diff --git a/osu.Game/Screens/Play/HUD/SkinnableInfo.cs b/osu.Game/Screens/Play/HUD/SkinnableInfo.cs
index 678885d096..a7c5c33f7d 100644
--- a/osu.Game/Screens/Play/HUD/SkinnableInfo.cs
+++ b/osu.Game/Screens/Play/HUD/SkinnableInfo.cs
@@ -15,7 +15,7 @@ using osuTK;
namespace osu.Game.Screens.Play.HUD
{
///
- /// Serialised information governing custom changes to an .
+ /// Serialised information governing custom changes to an .
///
[Serializable]
public class SkinnableInfo : IJsonSerializable
@@ -55,7 +55,7 @@ namespace osu.Game.Screens.Play.HUD
if (component is Container container)
{
- foreach (var child in container.OfType().OfType())
+ foreach (var child in container.OfType().OfType())
Children.Add(child.CreateSkinnableInfo());
}
}
diff --git a/osu.Game/Skinning/Editor/SkinBlueprintContainer.cs b/osu.Game/Skinning/Editor/SkinBlueprintContainer.cs
index 09bbf7ffd5..31f89ad0c2 100644
--- a/osu.Game/Skinning/Editor/SkinBlueprintContainer.cs
+++ b/osu.Game/Skinning/Editor/SkinBlueprintContainer.cs
@@ -81,6 +81,14 @@ namespace osu.Game.Skinning.Editor
}
}
+ protected override void AddBlueprintFor(ISkinnableComponent item)
+ {
+ if (!item.IsEditable)
+ return;
+
+ base.AddBlueprintFor(item);
+ }
+
protected override SelectionHandler CreateSelectionHandler() => new SkinSelectionHandler();
protected override SelectionBlueprint CreateBlueprintFor(ISkinnableComponent component)
diff --git a/osu.Game/Skinning/Editor/SkinComponentToolbox.cs b/osu.Game/Skinning/Editor/SkinComponentToolbox.cs
index a000204062..068b2058a6 100644
--- a/osu.Game/Skinning/Editor/SkinComponentToolbox.cs
+++ b/osu.Game/Skinning/Editor/SkinComponentToolbox.cs
@@ -78,6 +78,9 @@ namespace osu.Game.Skinning.Editor
Debug.Assert(instance != null);
+ if (!((ISkinnableComponent)instance).IsEditable)
+ return null;
+
return new ToolboxComponentButton(instance);
}
catch
diff --git a/osu.Game/Skinning/ISkinSerialisable.cs b/osu.Game/Skinning/ISkinSerialisable.cs
deleted file mode 100644
index d1777512af..0000000000
--- a/osu.Game/Skinning/ISkinSerialisable.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
-// See the LICENCE file in the repository root for full licence text.
-
-using osu.Framework.Graphics;
-
-namespace osu.Game.Skinning
-{
- ///
- /// Denotes a drawable component which should be serialised as part of a skin.
- /// Use for components which should be mutable by the user / editor.
- ///
- public interface ISkinSerialisable : IDrawable
- {
- }
-}
diff --git a/osu.Game/Skinning/ISkinnableComponent.cs b/osu.Game/Skinning/ISkinnableComponent.cs
index e44c7be13d..65ac2d5849 100644
--- a/osu.Game/Skinning/ISkinnableComponent.cs
+++ b/osu.Game/Skinning/ISkinnableComponent.cs
@@ -1,12 +1,18 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
+using osu.Framework.Graphics;
+
namespace osu.Game.Skinning
{
///
/// Denotes a drawable which, as a drawable, can be adjusted via skinning specifications.
///
- public interface ISkinnableComponent : ISkinSerialisable
+ public interface ISkinnableComponent : IDrawable
{
+ ///
+ /// Whether this component should be editable by an end user.
+ ///
+ bool IsEditable => true;
}
}
diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs
index fbe23482d7..7b27a7a816 100644
--- a/osu.Game/Skinning/SkinManager.cs
+++ b/osu.Game/Skinning/SkinManager.cs
@@ -19,7 +19,6 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.OpenGL.Textures;
using osu.Framework.Graphics.Textures;
using osu.Framework.IO.Stores;
-using osu.Framework.Logging;
using osu.Framework.Platform;
using osu.Framework.Testing;
using osu.Framework.Utils;
diff --git a/osu.Game/Skinning/SkinnableTargetWrapper.cs b/osu.Game/Skinning/SkinnableTargetWrapper.cs
index d8ad008448..28e8d585fc 100644
--- a/osu.Game/Skinning/SkinnableTargetWrapper.cs
+++ b/osu.Game/Skinning/SkinnableTargetWrapper.cs
@@ -13,8 +13,10 @@ namespace osu.Game.Skinning
/// Will also optionally apply default cross-element layout dependencies when initialised from a non-deserialised source.
///
[Serializable]
- public class SkinnableTargetWrapper : Container, ISkinSerialisable
+ public class SkinnableTargetWrapper : Container, ISkinnableComponent
{
+ public bool IsEditable => false;
+
private readonly Action applyDefaults;
///