mirror of
https://github.com/ppy/osu.git
synced 2026-05-26 17:10:16 +08:00
Handle component changes via ISkinnableTarget.Components rather than inside SkinEditor directly
Seems saner? Maybe?
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user