diff --git a/osu.Game/Localisation/SkinComponents/SkinnableComponentStrings.cs b/osu.Game/Localisation/SkinComponents/SkinnableComponentStrings.cs
index d5c8d5ccec..bd22527f67 100644
--- a/osu.Game/Localisation/SkinComponents/SkinnableComponentStrings.cs
+++ b/osu.Game/Localisation/SkinComponents/SkinnableComponentStrings.cs
@@ -59,6 +59,26 @@ namespace osu.Game.Localisation.SkinComponents
///
public static LocalisableString ShowLabelDescription => new TranslatableString(getKey(@"show_label_description"), @"Whether the component's label should be shown.");
+ ///
+ /// "Colour"
+ ///
+ public static LocalisableString Colour => new TranslatableString(getKey(@"colour"), @"Colour");
+
+ ///
+ /// "The colour of the component."
+ ///
+ public static LocalisableString ColourDescription => new TranslatableString(getKey(@"colour_description"), @"The colour of the component.");
+
+ ///
+ /// "Font colour"
+ ///
+ public static LocalisableString FontColour => new TranslatableString(getKey(@"font_colour"), @"Font colour");
+
+ ///
+ /// "The colour of the font."
+ ///
+ public static LocalisableString FontColourDescription => new TranslatableString(getKey(@"font_colour_description"), @"The colour of the font.");
+
private static string getKey(string key) => $@"{prefix}:{key}";
}
}
diff --git a/osu.Game/Screens/Play/HUD/ArgonSongProgress.cs b/osu.Game/Screens/Play/HUD/ArgonSongProgress.cs
index ebebfebfb3..696369921a 100644
--- a/osu.Game/Screens/Play/HUD/ArgonSongProgress.cs
+++ b/osu.Game/Screens/Play/HUD/ArgonSongProgress.cs
@@ -9,6 +9,7 @@ using osu.Framework.Graphics.Containers;
using osu.Game.Configuration;
using osu.Game.Graphics;
using osu.Game.Localisation.HUD;
+using osu.Game.Localisation.SkinComponents;
using osu.Game.Rulesets.Objects;
namespace osu.Game.Screens.Play.HUD
@@ -28,6 +29,8 @@ namespace osu.Game.Screens.Play.HUD
[SettingSource(typeof(SongProgressStrings), nameof(SongProgressStrings.ShowTime), nameof(SongProgressStrings.ShowTimeDescription))]
public Bindable ShowTime { get; } = new BindableBool(true);
+ [SettingSource(typeof(SkinnableComponentStrings), nameof(SkinnableComponentStrings.Colour), nameof(SkinnableComponentStrings.ColourDescription))]
+ public new BindableColour4 Colour { get; } = new BindableColour4(Colour4.White);
[Resolved]
private Player? player { get; set; }
@@ -114,6 +117,7 @@ namespace osu.Game.Screens.Play.HUD
base.Update();
content.Height = bar.Height + bar_height + info.Height;
graphContainer.Height = bar.Height;
+ base.Colour = Colour.Value;
}
protected override void UpdateProgress(double progress, bool isIntro)
diff --git a/osu.Game/Screens/Play/HUD/ArgonWedgePiece.cs b/osu.Game/Screens/Play/HUD/ArgonWedgePiece.cs
index 3c2e3e05ea..837e9547f0 100644
--- a/osu.Game/Screens/Play/HUD/ArgonWedgePiece.cs
+++ b/osu.Game/Screens/Play/HUD/ArgonWedgePiece.cs
@@ -9,6 +9,7 @@ using osu.Framework.Graphics.Colour;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
using osu.Game.Configuration;
+using osu.Game.Localisation.SkinComponents;
using osu.Game.Skinning;
using osuTK;
@@ -21,6 +22,9 @@ namespace osu.Game.Screens.Play.HUD
[SettingSource("Inverted shear")]
public BindableBool InvertShear { get; } = new BindableBool();
+ [SettingSource(typeof(SkinnableComponentStrings), nameof(SkinnableComponentStrings.Colour), nameof(SkinnableComponentStrings.ColourDescription))]
+ public new BindableColour4 Colour { get; } = new BindableColour4(Color4Extensions.FromHex("#66CCFF"));
+
public ArgonWedgePiece()
{
CornerRadius = 10f;
@@ -37,7 +41,7 @@ namespace osu.Game.Screens.Play.HUD
InternalChild = new Box
{
RelativeSizeAxes = Axes.Both,
- Colour = ColourInfo.GradientVertical(Color4Extensions.FromHex("#66CCFF").Opacity(0.0f), Color4Extensions.FromHex("#66CCFF").Opacity(0.25f)),
+ Colour = ColourInfo.GradientVertical(Colour.Value.Opacity(0.0f), Colour.Value.Opacity(0.25f)),
};
}
@@ -46,6 +50,7 @@ namespace osu.Game.Screens.Play.HUD
base.LoadComplete();
InvertShear.BindValueChanged(v => Shear = new Vector2(0.8f, 0f) * (v.NewValue ? -1 : 1), true);
+ Colour.BindValueChanged(c => InternalChild.Colour = ColourInfo.GradientVertical(Colour.Value.Opacity(0.0f), Colour.Value.Opacity(0.25f)));
}
}
}
diff --git a/osu.Game/Screens/Play/HUD/DefaultSongProgress.cs b/osu.Game/Screens/Play/HUD/DefaultSongProgress.cs
index 6b2bb2b718..512edd7106 100644
--- a/osu.Game/Screens/Play/HUD/DefaultSongProgress.cs
+++ b/osu.Game/Screens/Play/HUD/DefaultSongProgress.cs
@@ -10,6 +10,7 @@ using osu.Framework.Utils;
using osu.Game.Configuration;
using osu.Game.Graphics;
using osu.Game.Localisation.HUD;
+using osu.Game.Localisation.SkinComponents;
using osu.Game.Rulesets.Objects;
using osuTK;
@@ -35,6 +36,8 @@ namespace osu.Game.Screens.Play.HUD
[SettingSource(typeof(SongProgressStrings), nameof(SongProgressStrings.ShowTime), nameof(SongProgressStrings.ShowTimeDescription))]
public Bindable ShowTime { get; } = new BindableBool(true);
+ [SettingSource(typeof(SkinnableComponentStrings), nameof(SkinnableComponentStrings.Colour), nameof(SkinnableComponentStrings.ColourDescription))]
+ public new BindableColour4 Colour { get; } = new BindableColour4(Colour4.White);
[Resolved]
private Player? player { get; set; }
@@ -114,6 +117,8 @@ namespace osu.Game.Screens.Play.HUD
if (!Precision.AlmostEquals(Height, newHeight, 5f))
content.Height = newHeight;
+
+ base.Colour = Colour.Value;
}
private void updateBarVisibility()
diff --git a/osu.Game/Skinning/Components/BeatmapAttributeText.cs b/osu.Game/Skinning/Components/BeatmapAttributeText.cs
index c467b2e946..06f0d9cea9 100644
--- a/osu.Game/Skinning/Components/BeatmapAttributeText.cs
+++ b/osu.Game/Skinning/Components/BeatmapAttributeText.cs
@@ -123,6 +123,8 @@ namespace osu.Game.Skinning.Components
}
protected override void SetFont(FontUsage font) => text.Font = font.With(size: 40);
+
+ protected override void SetFontColour(Colour4 fontColour) => text.Colour = fontColour;
}
// WARNING: DO NOT ADD ANY VALUES TO THIS ENUM ANYWHERE ELSE THAN AT THE END.
diff --git a/osu.Game/Skinning/Components/BoxElement.cs b/osu.Game/Skinning/Components/BoxElement.cs
index 34d389728c..e49ec0cc4d 100644
--- a/osu.Game/Skinning/Components/BoxElement.cs
+++ b/osu.Game/Skinning/Components/BoxElement.cs
@@ -27,6 +27,9 @@ namespace osu.Game.Skinning.Components
Precision = 0.01f
};
+ [SettingSource(typeof(SkinnableComponentStrings), nameof(SkinnableComponentStrings.Colour), nameof(SkinnableComponentStrings.ColourDescription))]
+ public new BindableColour4 Colour { get; } = new BindableColour4(Colour4.White);
+
public BoxElement()
{
Size = new Vector2(400, 80);
@@ -48,6 +51,7 @@ namespace osu.Game.Skinning.Components
base.Update();
base.CornerRadius = CornerRadius.Value * Math.Min(DrawWidth, DrawHeight);
+ base.Colour = Colour.Value;
}
}
}
diff --git a/osu.Game/Skinning/Components/PlayerName.cs b/osu.Game/Skinning/Components/PlayerName.cs
index 21bf615bc6..70672a1f58 100644
--- a/osu.Game/Skinning/Components/PlayerName.cs
+++ b/osu.Game/Skinning/Components/PlayerName.cs
@@ -53,5 +53,7 @@ namespace osu.Game.Skinning.Components
}
protected override void SetFont(FontUsage font) => text.Font = font.With(size: 40);
+
+ protected override void SetFontColour(Colour4 fontColour) => text.Colour = fontColour;
}
}
diff --git a/osu.Game/Skinning/Components/TextElement.cs b/osu.Game/Skinning/Components/TextElement.cs
index 936f6a529b..9d66c58ae8 100644
--- a/osu.Game/Skinning/Components/TextElement.cs
+++ b/osu.Game/Skinning/Components/TextElement.cs
@@ -36,5 +36,7 @@ namespace osu.Game.Skinning.Components
}
protected override void SetFont(FontUsage font) => text.Font = font.With(size: 40);
+
+ protected override void SetFontColour(Colour4 fontColour) => text.Colour = fontColour;
}
}
diff --git a/osu.Game/Skinning/FontAdjustableSkinComponent.cs b/osu.Game/Skinning/FontAdjustableSkinComponent.cs
index 8f3a1d41c6..e3052aee5c 100644
--- a/osu.Game/Skinning/FontAdjustableSkinComponent.cs
+++ b/osu.Game/Skinning/FontAdjustableSkinComponent.cs
@@ -2,6 +2,7 @@
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Bindables;
+using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Game.Configuration;
@@ -20,11 +21,16 @@ namespace osu.Game.Skinning
[SettingSource(typeof(SkinnableComponentStrings), nameof(SkinnableComponentStrings.Font), nameof(SkinnableComponentStrings.FontDescription))]
public Bindable Font { get; } = new Bindable(Typeface.Torus);
+ [SettingSource(typeof(SkinnableComponentStrings), nameof(SkinnableComponentStrings.FontColour), nameof(SkinnableComponentStrings.FontColourDescription))]
+ public BindableColour4 FontColour { get; } = new BindableColour4(Colour4.White);
+
///
/// Implement to apply the user font selection to one or more components.
///
protected abstract void SetFont(FontUsage font);
+ protected abstract void SetFontColour(Colour4 fontColour);
+
protected override void LoadComplete()
{
base.LoadComplete();
@@ -37,6 +43,8 @@ namespace osu.Game.Skinning
FontUsage f = OsuFont.GetFont(e.NewValue, weight: fontWeight);
SetFont(f);
}, true);
+
+ FontColour.BindValueChanged(e => SetFontColour(e.NewValue), true);
}
}
}