1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-14 07:42:57 +08:00

Handle component changes via ISkinnableTarget.Components rather than inside SkinEditor directly

Seems saner? Maybe?
This commit is contained in:
Dean Herbert 2023-02-07 16:23:24 +09:00
parent e162fd56da
commit 0320ba770f
2 changed files with 10 additions and 9 deletions

View File

@ -329,8 +329,6 @@ namespace osu.Game.Overlays.SkinEditor
SelectedComponents.Clear();
SelectedComponents.Add(component);
changeHandler?.SaveState();
}
private void populateSettings()
@ -406,8 +404,6 @@ namespace osu.Game.Overlays.SkinEditor
{
foreach (var item in items)
availableTargets.FirstOrDefault(t => t.Components.Contains(item))?.Remove(item);
changeHandler?.SaveState();
}
#region Drag & drop import handling

View File

@ -6,6 +6,7 @@ using System.IO;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Testing;
using osu.Game.Extensions;
@ -17,9 +18,10 @@ namespace osu.Game.Overlays.SkinEditor
{
public partial class SkinEditorChangeHandler : EditorChangeHandler
{
private readonly Drawable targetScreen;
private readonly ISkinnableTarget? firstTarget;
private ISkinnableTarget? firstTarget => targetScreen.ChildrenOfType<ISkinnableTarget>().FirstOrDefault();
// ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable
private readonly BindableList<ISkinnableDrawable>? components;
public SkinEditorChangeHandler(Drawable targetScreen)
{
@ -27,10 +29,13 @@ namespace osu.Game.Overlays.SkinEditor
// In the future we'll want this to cover all changes, even to skin's `InstantiationInfo`.
// We'll also need to consider cases where multiple targets are on screen at the same time.
this.targetScreen = targetScreen;
firstTarget = targetScreen?.ChildrenOfType<ISkinnableTarget>().FirstOrDefault();
// Save initial state.
SaveState();
if (firstTarget == null)
return;
components = new BindableList<ISkinnableDrawable> { BindTarget = firstTarget.Components };
components.BindCollectionChanged((_, _) => SaveState());
}
protected override void WriteCurrentStateToStream(MemoryStream stream)