diff --git a/osu.Game/Beatmaps/ControlPoints/ControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/ControlPoint.cs
index a1822a1163..c6649f6af1 100644
--- a/osu.Game/Beatmaps/ControlPoints/ControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/ControlPoint.cs
@@ -2,6 +2,8 @@
// See the LICENCE file in the repository root for full licence text.
using System;
+using osu.Game.Graphics;
+using osuTK.Graphics;
namespace osu.Game.Beatmaps.ControlPoints
{
@@ -18,6 +20,8 @@ namespace osu.Game.Beatmaps.ControlPoints
public int CompareTo(ControlPoint other) => Time.CompareTo(other.Time);
+ public virtual Color4 GetRepresentingColour(OsuColour colours) => colours.Yellow;
+
///
/// Determines whether this results in a meaningful change when placed alongside another.
///
diff --git a/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs
index 1d38790f87..283bf76572 100644
--- a/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs
@@ -2,6 +2,8 @@
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Bindables;
+using osu.Game.Graphics;
+using osuTK.Graphics;
namespace osu.Game.Beatmaps.ControlPoints
{
@@ -23,6 +25,8 @@ namespace osu.Game.Beatmaps.ControlPoints
MaxValue = 10
};
+ public override Color4 GetRepresentingColour(OsuColour colours) => colours.GreenDark;
+
///
/// The speed multiplier at this control point.
///
diff --git a/osu.Game/Beatmaps/ControlPoints/EffectControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/EffectControlPoint.cs
index 9e8e3978be..ea28fca170 100644
--- a/osu.Game/Beatmaps/ControlPoints/EffectControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/EffectControlPoint.cs
@@ -2,6 +2,8 @@
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Bindables;
+using osu.Game.Graphics;
+using osuTK.Graphics;
namespace osu.Game.Beatmaps.ControlPoints
{
@@ -18,6 +20,8 @@ namespace osu.Game.Beatmaps.ControlPoints
///
public readonly BindableBool OmitFirstBarLineBindable = new BindableBool();
+ public override Color4 GetRepresentingColour(OsuColour colours) => colours.Purple;
+
///
/// Whether the first bar line of this control point is ignored.
///
diff --git a/osu.Game/Beatmaps/ControlPoints/SampleControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/SampleControlPoint.cs
index c052c04ea0..f57ecfb9e3 100644
--- a/osu.Game/Beatmaps/ControlPoints/SampleControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/SampleControlPoint.cs
@@ -3,6 +3,8 @@
using osu.Framework.Bindables;
using osu.Game.Audio;
+using osu.Game.Graphics;
+using osuTK.Graphics;
namespace osu.Game.Beatmaps.ControlPoints
{
@@ -16,6 +18,8 @@ namespace osu.Game.Beatmaps.ControlPoints
SampleVolumeBindable = { Disabled = true }
};
+ public override Color4 GetRepresentingColour(OsuColour colours) => colours.Pink;
+
///
/// The default sample bank at this control point.
///
diff --git a/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs
index 9345299c3a..d9378bca4a 100644
--- a/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs
@@ -3,6 +3,8 @@
using osu.Framework.Bindables;
using osu.Game.Beatmaps.Timing;
+using osu.Game.Graphics;
+using osuTK.Graphics;
namespace osu.Game.Beatmaps.ControlPoints
{
@@ -18,6 +20,8 @@ namespace osu.Game.Beatmaps.ControlPoints
///
private const double default_beat_length = 60000.0 / 60.0;
+ public override Color4 GetRepresentingColour(OsuColour colours) => colours.YellowDark;
+
public static readonly TimingControlPoint DEFAULT = new TimingControlPoint
{
BeatLengthBindable =
diff --git a/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs b/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs
index 31cc768056..510ba8c094 100644
--- a/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/Timeline/DifficultyPointPiece.cs
@@ -15,12 +15,15 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
{
public class DifficultyPointPiece : CompositeDrawable
{
+ private readonly DifficultyControlPoint difficultyPoint;
+
private OsuSpriteText speedMultiplierText;
private readonly BindableNumber speedMultiplier;
- public DifficultyPointPiece(DifficultyControlPoint point)
+ public DifficultyPointPiece(DifficultyControlPoint difficultyPoint)
{
- speedMultiplier = point.SpeedMultiplierBindable.GetBoundCopy();
+ this.difficultyPoint = difficultyPoint;
+ speedMultiplier = difficultyPoint.SpeedMultiplierBindable.GetBoundCopy();
}
[BackgroundDependencyLoader]
@@ -29,7 +32,7 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
RelativeSizeAxes = Axes.Y;
AutoSizeAxes = Axes.X;
- Color4 colour = colours.GreenDark;
+ Color4 colour = difficultyPoint.GetRepresentingColour(colours);
InternalChildren = new Drawable[]
{
diff --git a/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs b/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs
index 6a6e947343..ffc0e55940 100644
--- a/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/Timeline/SamplePointPiece.cs
@@ -3,6 +3,7 @@
using osu.Framework.Allocation;
using osu.Framework.Bindables;
+using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Colour;
using osu.Framework.Graphics.Containers;
@@ -16,6 +17,8 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
{
public class SamplePointPiece : CompositeDrawable
{
+ private readonly SampleControlPoint samplePoint;
+
private readonly Bindable bank;
private readonly BindableNumber volume;
@@ -24,6 +27,7 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
public SamplePointPiece(SampleControlPoint samplePoint)
{
+ this.samplePoint = samplePoint;
volume = samplePoint.SampleVolumeBindable.GetBoundCopy();
bank = samplePoint.SampleBankBindable.GetBoundCopy();
}
@@ -37,7 +41,7 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
AutoSizeAxes = Axes.X;
RelativeSizeAxes = Axes.Y;
- Color4 colour = colours.PinkDarker;
+ Color4 colour = samplePoint.GetRepresentingColour(colours);
InternalChildren = new Drawable[]
{
@@ -57,7 +61,7 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
},
new Box
{
- Colour = colours.Pink,
+ Colour = colour.Lighten(0.2f),
Width = 2,
RelativeSizeAxes = Axes.Y,
},
diff --git a/osu.Game/Screens/Edit/Compose/Components/Timeline/TimingPointPiece.cs b/osu.Game/Screens/Edit/Compose/Components/Timeline/TimingPointPiece.cs
index de7cfecbf0..ba94916458 100644
--- a/osu.Game/Screens/Edit/Compose/Components/Timeline/TimingPointPiece.cs
+++ b/osu.Game/Screens/Edit/Compose/Components/Timeline/TimingPointPiece.cs
@@ -11,16 +11,20 @@ using osu.Framework.Graphics.Shapes;
using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Graphics;
using osu.Game.Graphics.Sprites;
+using osuTK.Graphics;
namespace osu.Game.Screens.Edit.Compose.Components.Timeline
{
public class TimingPointPiece : CompositeDrawable
{
+ private readonly TimingControlPoint point;
+
private readonly BindableNumber beatLength;
private OsuSpriteText bpmText;
public TimingPointPiece(TimingControlPoint point)
{
+ this.point = point;
beatLength = point.BeatLengthBindable.GetBoundCopy();
}
@@ -32,12 +36,14 @@ namespace osu.Game.Screens.Edit.Compose.Components.Timeline
AutoSizeAxes = Axes.Both;
+ Color4 colour = point.GetRepresentingColour(colours);
+
InternalChildren = new Drawable[]
{
new Box
{
Alpha = 0.9f,
- Colour = ColourInfo.GradientHorizontal(colours.YellowDark, colours.YellowDark.Opacity(0.5f)),
+ Colour = ColourInfo.GradientHorizontal(colour, colour.Opacity(0.5f)),
RelativeSizeAxes = Axes.Both,
},
bpmText = new OsuSpriteText
diff --git a/osu.Game/Screens/Edit/Timing/ControlPointTable.cs b/osu.Game/Screens/Edit/Timing/ControlPointTable.cs
index 87af4546f1..4121e1f7bb 100644
--- a/osu.Game/Screens/Edit/Timing/ControlPointTable.cs
+++ b/osu.Game/Screens/Edit/Timing/ControlPointTable.cs
@@ -114,7 +114,14 @@ namespace osu.Game.Screens.Edit.Timing
controlPoints = group.ControlPoints.GetBoundCopy();
controlPoints.CollectionChanged += (_, __) => createChildren();
+ }
+ [Resolved]
+ private OsuColour colours { get; set; }
+
+ [BackgroundDependencyLoader]
+ private void load()
+ {
createChildren();
}
@@ -125,20 +132,22 @@ namespace osu.Game.Screens.Edit.Timing
private Drawable createAttribute(ControlPoint controlPoint)
{
+ Color4 colour = controlPoint.GetRepresentingColour(colours);
+
switch (controlPoint)
{
case TimingControlPoint timing:
- return new RowAttribute("timing", () => $"{60000 / timing.BeatLength:n1}bpm {timing.TimeSignature}");
+ return new RowAttribute("timing", () => $"{60000 / timing.BeatLength:n1}bpm {timing.TimeSignature}", colour);
case DifficultyControlPoint difficulty:
- return new RowAttribute("difficulty", () => $"{difficulty.SpeedMultiplier:n2}x");
+ return new RowAttribute("difficulty", () => $"{difficulty.SpeedMultiplier:n2}x", colour);
case EffectControlPoint effect:
- return new RowAttribute("effect", () => $"{(effect.KiaiMode ? "Kiai " : "")}{(effect.OmitFirstBarLine ? "NoBarLine " : "")}");
+ return new RowAttribute("effect", () => $"{(effect.KiaiMode ? "Kiai " : "")}{(effect.OmitFirstBarLine ? "NoBarLine " : "")}", colour);
case SampleControlPoint sample:
- return new RowAttribute("sample", () => $"{sample.SampleBank} {sample.SampleVolume}%");
+ return new RowAttribute("sample", () => $"{sample.SampleBank} {sample.SampleVolume}%", colour);
}
return null;
diff --git a/osu.Game/Screens/Edit/Timing/RowAttribute.cs b/osu.Game/Screens/Edit/Timing/RowAttribute.cs
index be8f693683..c45995ee83 100644
--- a/osu.Game/Screens/Edit/Timing/RowAttribute.cs
+++ b/osu.Game/Screens/Edit/Timing/RowAttribute.cs
@@ -9,6 +9,7 @@ using osu.Framework.Graphics.Cursor;
using osu.Framework.Graphics.Shapes;
using osu.Game.Graphics;
using osu.Game.Graphics.Sprites;
+using osuTK.Graphics;
namespace osu.Game.Screens.Edit.Timing
{
@@ -16,11 +17,13 @@ namespace osu.Game.Screens.Edit.Timing
{
private readonly string header;
private readonly Func content;
+ private readonly Color4 colour;
- public RowAttribute(string header, Func content)
+ public RowAttribute(string header, Func content, Color4 colour)
{
this.header = header;
this.content = content;
+ this.colour = colour;
}
[BackgroundDependencyLoader]
@@ -40,7 +43,7 @@ namespace osu.Game.Screens.Edit.Timing
{
new Box
{
- Colour = colours.Yellow,
+ Colour = colour,
RelativeSizeAxes = Axes.Both,
},
new OsuSpriteText