diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index bee4f914ce..64e77384a2 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -116,6 +116,7 @@ namespace osu.Game.Configuration SetDefault(OsuSetting.HitLighting, true); SetDefault(OsuSetting.HUDVisibilityMode, HUDVisibilityMode.Always); + SetDefault(OsuSetting.ShowProgressGraph, true); SetDefault(OsuSetting.ShowHealthDisplayWhenCantFail, true); SetDefault(OsuSetting.FadePlayfieldWhenHealthLow, true); SetDefault(OsuSetting.KeyOverlay, false); @@ -274,6 +275,9 @@ namespace osu.Game.Configuration AlwaysPlayFirstComboBreak, FloatingComments, HUDVisibilityMode, + + // This has been migrated to the component itself. can be removed 20221027. + ShowProgressGraph, ShowHealthDisplayWhenCantFail, FadePlayfieldWhenHealthLow, MouseDisableButtons, diff --git a/osu.Game/Screens/Play/SongProgress.cs b/osu.Game/Screens/Play/SongProgress.cs index 9470c60fe6..592071b02e 100644 --- a/osu.Game/Screens/Play/SongProgress.cs +++ b/osu.Game/Screens/Play/SongProgress.cs @@ -1,20 +1,20 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using osuTK; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; using System; using System.Collections.Generic; -using osu.Game.Graphics; -using osu.Framework.Allocation; using System.Linq; +using osu.Framework.Allocation; using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; using osu.Framework.Timing; using osu.Game.Configuration; +using osu.Game.Graphics; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.UI; using osu.Game.Skinning; +using osuTK; namespace osu.Game.Screens.Play { @@ -139,6 +139,52 @@ namespace osu.Game.Screens.Play AllowSeeking.BindValueChanged(_ => updateBarVisibility(), true); ShowGraph.BindValueChanged(_ => updateGraphVisibility(), true); + + migrateSettingFromConfig(); + } + + [Resolved] + private OsuConfigManager config { get; set; } + + [Resolved] + private SkinManager skinManager { get; set; } + + /// + /// This setting has been migrated to a per-component level. + /// Only take the value from the config if it is in a non-default state (then reset it to default so it only applies once). + /// + /// Can be removed 20221027. + /// + private void migrateSettingFromConfig() + { + Bindable configShowGraph = config.GetBindable(OsuSetting.ShowProgressGraph); + + if (!configShowGraph.IsDefault) + { + ShowGraph.Value = configShowGraph.Value; + configShowGraph.SetDefault(); + + // This is pretty ugly, but the only way to make this stick... + if (skinManager != null) + { + var skinnableTarget = this.FindClosestParent(); + + if (skinnableTarget != null) + { + skinManager.EnsureMutableSkin(); + + // If `EnsureMutableSkin` actually changed the skin, default layout may take a frame to apply. + // See `SkinnableTargetComponentsContainer`'s use of ScheduleAfterChildren. + ScheduleAfterChildren(() => + { + var skin = skinManager.CurrentSkin.Value; + skin.UpdateDrawableTarget(skinnableTarget); + + skinManager.Save(skin); + }); + } + } + } } protected override void PopIn()