Fix two different skins displaying at the same time when rapidly switching

This commit is contained in:
Dean Herbert 2021-10-11 16:11:15 +09:00
parent a16ffd2976
commit 43aacb3831
1 changed files with 7 additions and 1 deletions

View File

@ -3,6 +3,7 @@
using System;
using System.Linq;
using System.Threading;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
@ -22,6 +23,8 @@ public class SkinnableTargetContainer : SkinReloadableDrawable, ISkinnableTarget
public bool ComponentsLoaded { get; private set; }
private CancellationTokenSource cancellationSource;
public SkinnableTargetContainer(SkinnableTarget target)
{
Target = target;
@ -38,6 +41,9 @@ public void Reload()
content = CurrentSkin.GetDrawableComponent(new SkinnableTargetComponent(Target)) as SkinnableTargetComponentsContainer;
cancellationSource?.Cancel();
cancellationSource = null;
if (content != null)
{
LoadComponentAsync(content, wrapper =>
@ -45,7 +51,7 @@ public void Reload()
AddInternal(wrapper);
components.AddRange(wrapper.Children.OfType<ISkinnableDrawable>());
ComponentsLoaded = true;
});
}, (cancellationSource = new CancellationTokenSource()).Token);
}
else
ComponentsLoaded = true;