1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-07 18:47:26 +08:00

Merge pull request #17277 from peppy/skin-editor-sidebars

Update skin editor to use `EditorSidebar`
This commit is contained in:
Dan Balasescu 2022-03-16 21:41:29 +09:00 committed by GitHub
commit fa8058e025
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 120 additions and 93 deletions

View File

@ -2,7 +2,9 @@
// See the LICENCE file in the repository root for full licence text.
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Game.Overlays;
using osu.Game.Rulesets;
using osu.Game.Rulesets.Osu;
using osu.Game.Skinning.Editor;
@ -11,13 +13,17 @@ namespace osu.Game.Tests.Visual.Gameplay
{
public class TestSceneSkinEditorComponentsList : SkinnableTestScene
{
[Cached]
private readonly OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Blue);
[Test]
public void TestToggleEditor()
{
AddStep("show available components", () => SetContents(_ => new SkinComponentToolbox(300)
AddStep("show available components", () => SetContents(_ => new SkinComponentToolbox
{
Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre,
Anchor = Anchor.TopRight,
Origin = Anchor.TopRight,
Width = 0.6f,
}));
}

View File

@ -18,19 +18,17 @@ using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface;
using osu.Game.Rulesets;
using osu.Game.Rulesets.Difficulty;
using osu.Game.Rulesets.Edit;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Scoring;
using osu.Game.Rulesets.UI;
using osu.Game.Screens.Edit.Components;
using osuTK;
using osuTK.Graphics;
namespace osu.Game.Skinning.Editor
{
public class SkinComponentToolbox : ScrollingToolboxGroup
public class SkinComponentToolbox : EditorSidebarSection
{
public const float WIDTH = 200;
public Action<Type> RequestPlacement;
private const float component_display_scale = 0.8f;
@ -45,11 +43,9 @@ namespace osu.Game.Skinning.Editor
[Cached(typeof(HealthProcessor))]
private HealthProcessor healthProcessor = new DrainingHealthProcessor(0);
public SkinComponentToolbox(float height)
: base("Components", height)
public SkinComponentToolbox()
: base("Components")
{
RelativeSizeAxes = Axes.None;
Width = WIDTH;
}
[BackgroundDependencyLoader]

View File

@ -17,7 +17,7 @@ using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Cursor;
using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays;
using osu.Game.Rulesets.Edit;
using osu.Game.Screens.Edit.Components;
using osu.Game.Screens.Edit.Components.Menus;
namespace osu.Game.Skinning.Editor
@ -50,7 +50,7 @@ namespace osu.Game.Skinning.Editor
private Container content;
private EditorToolboxGroup settingsToolbox;
private EditorSidebarSection settingsToolbox;
public SkinEditor()
{
@ -71,82 +71,111 @@ namespace osu.Game.Skinning.Editor
InternalChild = new OsuContextMenuContainer
{
RelativeSizeAxes = Axes.Both,
Children = new Drawable[]
Child = new GridContainer
{
new Container
RelativeSizeAxes = Axes.Both,
RowDimensions = new[]
{
Name = "Menu container",
RelativeSizeAxes = Axes.X,
Depth = float.MinValue,
Height = menu_height,
Children = new Drawable[]
{
new EditorMenuBar
{
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft,
RelativeSizeAxes = Axes.Both,
Items = new[]
{
new MenuItem("File")
{
Items = new[]
{
new EditorMenuItem("Save", MenuItemType.Standard, Save),
new EditorMenuItem("Revert to default", MenuItemType.Destructive, revert),
new EditorMenuItemSpacer(),
new EditorMenuItem("Exit", MenuItemType.Standard, Hide),
},
},
}
},
headerText = new OsuTextFlowContainer
{
TextAnchor = Anchor.TopRight,
Padding = new MarginPadding(5),
Anchor = Anchor.TopRight,
Origin = Anchor.TopRight,
AutoSizeAxes = Axes.X,
RelativeSizeAxes = Axes.Y,
},
},
},
new SkinEditorSceneLibrary
{
RelativeSizeAxes = Axes.X,
Y = menu_height,
new Dimension(GridSizeMode.AutoSize),
new Dimension(GridSizeMode.AutoSize),
new Dimension(),
},
new GridContainer
Content = new[]
{
RelativeSizeAxes = Axes.Both,
ColumnDimensions = new[]
new Drawable[]
{
new Dimension(GridSizeMode.AutoSize),
new Dimension(),
new Dimension(GridSizeMode.AutoSize),
},
Content = new[]
{
new Drawable[]
new Container
{
new SkinComponentToolbox(600)
Name = "Menu container",
RelativeSizeAxes = Axes.X,
Depth = float.MinValue,
Height = menu_height,
Children = new Drawable[]
{
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft,
RequestPlacement = placeComponent
new EditorMenuBar
{
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft,
RelativeSizeAxes = Axes.Both,
Items = new[]
{
new MenuItem("File")
{
Items = new[]
{
new EditorMenuItem("Save", MenuItemType.Standard, Save),
new EditorMenuItem("Revert to default", MenuItemType.Destructive, revert),
new EditorMenuItemSpacer(),
new EditorMenuItem("Exit", MenuItemType.Standard, Hide),
},
},
}
},
headerText = new OsuTextFlowContainer
{
TextAnchor = Anchor.TopRight,
Padding = new MarginPadding(5),
Anchor = Anchor.TopRight,
Origin = Anchor.TopRight,
AutoSizeAxes = Axes.X,
RelativeSizeAxes = Axes.Y,
},
},
content = new Container
},
},
new Drawable[]
{
new SkinEditorSceneLibrary
{
RelativeSizeAxes = Axes.X,
},
},
new Drawable[]
{
new GridContainer
{
RelativeSizeAxes = Axes.Both,
ColumnDimensions = new[]
{
RelativeSizeAxes = Axes.Both,
new Dimension(GridSizeMode.AutoSize),
new Dimension(),
new Dimension(GridSizeMode.AutoSize),
},
settingsToolbox = new SkinSettingsToolbox
Content = new[]
{
Anchor = Anchor.CentreRight,
Origin = Anchor.CentreRight,
new Drawable[]
{
new EditorSidebar
{
Children = new[]
{
new SkinComponentToolbox
{
RequestPlacement = placeComponent
},
}
},
content = new Container
{
Depth = float.MaxValue,
RelativeSizeAxes = Axes.Both,
},
new EditorSidebar
{
Children = new[]
{
settingsToolbox = new SkinSettingsToolbox
{
Anchor = Anchor.CentreRight,
Origin = Anchor.CentreRight,
}
}
},
}
}
}
}
},
}
}
};
@ -180,17 +209,9 @@ namespace osu.Game.Skinning.Editor
SelectedComponents.Clear();
Scheduler.AddOnce(loadBlueprintContainer);
Scheduler.AddOnce(populateSettings);
void loadBlueprintContainer()
{
content.Children = new Drawable[]
{
new SkinBlueprintContainer(targetScreen)
{
Margin = new MarginPadding { Top = 100 },
}
};
}
void loadBlueprintContainer() => content.Child = new SkinBlueprintContainer(targetScreen);
}
private void skinChanged()

View File

@ -2,22 +2,26 @@
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Graphics;
using osu.Game.Rulesets.Edit;
using osu.Framework.Graphics.Containers;
using osu.Game.Screens.Edit.Components;
using osuTK;
namespace osu.Game.Skinning.Editor
{
internal class SkinSettingsToolbox : ScrollingToolboxGroup
internal class SkinSettingsToolbox : EditorSidebarSection
{
public const float WIDTH = 200;
protected override Container<Drawable> Content { get; }
public SkinSettingsToolbox()
: base("Settings", 600)
: base("Settings")
{
RelativeSizeAxes = Axes.None;
Width = WIDTH;
FillFlow.Spacing = new Vector2(10);
base.Content.Add(Content = new FillFlowContainer
{
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
Direction = FillDirection.Vertical,
Spacing = new Vector2(10),
});
}
}
}