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

Fix beatmap listing placeholder potentially getting disposed

This commit is contained in:
Salman Ahmed 2021-01-25 22:18:23 +03:00
parent 49aa318b1b
commit 75d6dbdbb7

View File

@ -180,18 +180,24 @@ namespace osu.Game.Overlays
if (lastContent != null) if (lastContent != null)
{ {
lastContent.FadeOut(100, Easing.OutQuint).Expire(); lastContent.FadeOut(100, Easing.OutQuint);
// Consider the case when the new content is smaller than the last content. // Consider the case when the new content is smaller than the last content.
// If the auto-size computation is delayed until fade out completes, the background remain high for too long making the resulting transition to the smaller height look weird. // If the auto-size computation is delayed until fade out completes, the background remain high for too long making the resulting transition to the smaller height look weird.
// At the same time, if the last content's height is bypassed immediately, there is a period where the new content is at Alpha = 0 when the auto-sized height will be 0. // At the same time, if the last content's height is bypassed immediately, there is a period where the new content is at Alpha = 0 when the auto-sized height will be 0.
// To resolve both of these issues, the bypass is delayed until a point when the content transitions (fade-in and fade-out) overlap and it looks good to do so. // To resolve both of these issues, the bypass is delayed until a point when the content transitions (fade-in and fade-out) overlap and it looks good to do so.
lastContent.Delay(25).Schedule(() => lastContent.BypassAutoSizeAxes = Axes.Y).Then().Schedule(() => panelTarget.Remove(lastContent)); lastContent.Delay(25).Schedule(() => lastContent.BypassAutoSizeAxes = Axes.Y).Then().Schedule(() =>
{
panelTarget.Remove(lastContent);
// the content may be reused again (e.g. notFoundContent), clear Y-axis bypass for displaying back properly.
lastContent.BypassAutoSizeAxes = Axes.None;
});
} }
if (!content.IsAlive) if (!content.IsAlive)
panelTarget.Add(content); panelTarget.Add(content);
content.FadeIn(200, Easing.OutQuint); content.FadeInFromZero(200, Easing.OutQuint);
currentContent = content; currentContent = content;
} }