// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osuTK.Graphics; namespace osu.Game.Overlays { public class OverlayColourProvider { public OverlayColourScheme ColourScheme { get; private set; } public OverlayColourProvider(OverlayColourScheme colourScheme) { ColourScheme = colourScheme; } // Note that the following five colours are also defined in `OsuColour` as `{colourScheme}{0,1,2,3,4}`. // The difference as to which should be used where comes down to context. // If the colour in question is supposed to always match the view in which it is displayed theme-wise, use `OverlayColourProvider`. // If the colour usage is special and in general differs from the surrounding view in choice of hue, use the `OsuColour` constants. public Color4 Colour0 => getColour(1, 0.8f); public Color4 Colour1 => getColour(1, 0.7f); public Color4 Colour2 => getColour(0.8f, 0.6f); public Color4 Colour3 => getColour(0.6f, 0.5f); public Color4 Colour4 => getColour(0.4f, 0.3f); public Color4 Highlight1 => getColour(1, 0.7f); public Color4 Content1 => getColour(0.4f, 1); public Color4 Content2 => getColour(0.4f, 0.9f); public Color4 Light1 => getColour(0.4f, 0.8f); public Color4 Light2 => getColour(0.4f, 0.75f); public Color4 Light3 => getColour(0.4f, 0.7f); public Color4 Light4 => getColour(0.4f, 0.5f); public Color4 Dark1 => getColour(0.2f, 0.35f); public Color4 Dark2 => getColour(0.2f, 0.3f); public Color4 Dark3 => getColour(0.2f, 0.25f); public Color4 Dark4 => getColour(0.2f, 0.2f); public Color4 Dark5 => getColour(0.2f, 0.15f); public Color4 Dark6 => getColour(0.2f, 0.1f); public Color4 Foreground1 => getColour(0.1f, 0.6f); public Color4 Background1 => getColour(0.1f, 0.4f); public Color4 Background2 => getColour(0.1f, 0.3f); public Color4 Background3 => getColour(0.1f, 0.25f); public Color4 Background4 => getColour(0.1f, 0.2f); public Color4 Background5 => getColour(0.1f, 0.15f); public Color4 Background6 => getColour(0.1f, 0.1f); /// /// Changes the value of to a different colour scheme. /// Note that this does not trigger any kind of signal to any drawable that received colours from here, all drawables need to be updated manually. /// /// The proposed colour scheme. public void ChangeColourScheme(OverlayColourScheme colourScheme) { ColourScheme = colourScheme; } private Color4 getColour(float saturation, float lightness) => Framework.Graphics.Colour4.FromHSL(getBaseHue(ColourScheme), saturation, lightness); private static float getBaseHue(OverlayColourScheme colourScheme) => (int)colourScheme / 360f; } // See https://github.com/ppy/osu-web/blob/5a536d217a21582aad999db50a981003d3ad5659/app/helpers.php#L1620-L1628 public enum OverlayColourScheme { Red = 0, Orange = 45, Lime = 90, Green = 125, Aquamarine = 160, Blue = 200, Purple = 255, Plum = 320, Pink = 333, } }