mirror of
https://github.com/ppy/osu.git
synced 2025-01-28 08:43:20 +08:00
Fix unreadable colour hex code text due to low contrast
Logic is shared with the timeline blueprints which also have the same problem of displaying text on top of a combo colour. Slightly modified the formula. Seems to yield better results on a subjective check.
This commit is contained in:
parent
67c19df000
commit
a8027d87b6
@ -10,6 +10,7 @@ using osu.Framework.Graphics.Shapes;
|
||||
using osu.Framework.Graphics.UserInterface;
|
||||
using osu.Framework.Localisation;
|
||||
using osu.Game.Graphics.Sprites;
|
||||
using osu.Game.Utils;
|
||||
using osuTK;
|
||||
using osuTK.Graphics;
|
||||
|
||||
@ -98,6 +99,7 @@ namespace osu.Game.Graphics.UserInterfaceV2
|
||||
{
|
||||
fill.Colour = current.Value;
|
||||
colourHexCode.Text = current.Value.ToHex();
|
||||
colourHexCode.Colour = ColourUtils.ForegroundTextColourFor(current.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ using osu.Game.Rulesets.Edit;
|
||||
using osu.Game.Rulesets.Objects;
|
||||
using osu.Game.Rulesets.Objects.Types;
|
||||
using osu.Game.Skinning;
|
||||
using osu.Game.Utils;
|
||||
using osuTK;
|
||||
using osuTK.Graphics;
|
||||
|
||||
@ -158,10 +159,7 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
|
||||
circle.Colour = comboColour;
|
||||
|
||||
var col = circle.Colour.TopLeft.Linear;
|
||||
float brightness = col.R + col.G + col.B;
|
||||
|
||||
// decide the combo index colour based on brightness?
|
||||
colouredComponents.Colour = OsuColour.Gray(brightness > 0.5f ? 0.2f : 0.9f);
|
||||
colouredComponents.Colour = ColourUtils.ForegroundTextColourFor(col);
|
||||
}
|
||||
|
||||
protected override void Update()
|
||||
|
23
osu.Game/Utils/ColourUtils.cs
Normal file
23
osu.Game/Utils/ColourUtils.cs
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||
// See the LICENCE file in the repository root for full licence text.
|
||||
|
||||
using osu.Game.Graphics;
|
||||
using osuTK.Graphics;
|
||||
|
||||
namespace osu.Game.Utils
|
||||
{
|
||||
public static class ColourUtils
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns a foreground text colour that is supposed to contrast well on top of
|
||||
/// the supplied <paramref name="backgroundColour"/>.
|
||||
/// </summary>
|
||||
public static Color4 ForegroundTextColourFor(Color4 backgroundColour)
|
||||
{
|
||||
// formula taken from the RGB->YIQ conversions: https://en.wikipedia.org/wiki/YIQ
|
||||
// brightness here is equivalent to the Y component in the above colour model, which is a rough estimate of lightness.
|
||||
float brightness = 0.299f * backgroundColour.R + 0.587f * backgroundColour.G + 0.114f * backgroundColour.B;
|
||||
return OsuColour.Gray(brightness > 0.5f ? 0.2f : 0.9f);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user