diff --git a/osu.Game/Overlays/Profile/Header/Components/RankGraph.cs b/osu.Game/Overlays/Profile/Header/Components/RankGraph.cs
index 7ba8ae7c80..3312cb2c4f 100644
--- a/osu.Game/Overlays/Profile/Header/Components/RankGraph.cs
+++ b/osu.Game/Overlays/Profile/Header/Components/RankGraph.cs
@@ -8,7 +8,6 @@ using Humanizer;
using osu.Framework.Bindables;
using osu.Framework.Extensions.LocalisationExtensions;
using osu.Framework.Graphics;
-using osu.Framework.Localisation;
using osu.Game.Graphics;
using osu.Game.Graphics.Sprites;
using osu.Game.Resources.Localisation.Web;
@@ -61,40 +60,16 @@ namespace osu.Game.Overlays.Profile.Header.Components
placeholder.FadeIn(FADE_DURATION, Easing.Out);
}
- protected override object GetTooltipContent(int index, int rank)
+ protected override UserGraphTooltipContent GetTooltipContent(int index, int rank)
{
var days = ranked_days - index + 1;
- return new TooltipDisplayContent
+ return new UserGraphTooltipContent
{
- Rank = rank.ToLocalisableString("\\##,##0"),
+ Name = UsersStrings.ShowRankGlobalSimple,
+ Count = rank.ToLocalisableString("\\##,##0"),
Time = days == 0 ? "now" : $"{"day".ToQuantity(days)} ago"
};
}
-
- protected override UserGraphTooltip GetTooltip() => new RankGraphTooltip();
-
- private class RankGraphTooltip : UserGraphTooltip
- {
- public RankGraphTooltip()
- : base(UsersStrings.ShowRankGlobalSimple)
- {
- }
-
- public override void SetContent(object content)
- {
- if (!(content is TooltipDisplayContent info))
- return;
-
- Counter.Text = info.Rank;
- BottomText.Text = info.Time;
- }
- }
-
- private class TooltipDisplayContent
- {
- public LocalisableString Rank;
- public string Time;
- }
}
}
diff --git a/osu.Game/Overlays/Profile/Sections/Historical/UserHistoryGraph.cs b/osu.Game/Overlays/Profile/Sections/Historical/UserHistoryGraph.cs
index 85287d2325..d86e976e70 100644
--- a/osu.Game/Overlays/Profile/Sections/Historical/UserHistoryGraph.cs
+++ b/osu.Game/Overlays/Profile/Sections/Historical/UserHistoryGraph.cs
@@ -28,43 +28,11 @@ namespace osu.Game.Overlays.Profile.Sections.Historical
protected override float GetDataPointHeight(long playCount) => playCount;
- protected override UserGraphTooltip GetTooltip() => new HistoryGraphTooltip(tooltipCounterName);
-
- protected override object GetTooltipContent(DateTime date, long playCount)
+ protected override UserGraphTooltipContent GetTooltipContent(DateTime date, long playCount) => new UserGraphTooltipContent
{
- return new TooltipDisplayContent
- {
- Name = tooltipCounterName,
- Count = playCount.ToLocalisableString("N0"),
- Date = date.ToLocalisableString("MMMM yyyy")
- };
- }
-
- protected class HistoryGraphTooltip : UserGraphTooltip
- {
- private readonly LocalisableString tooltipCounterName;
-
- public HistoryGraphTooltip(LocalisableString tooltipCounterName)
- : base(tooltipCounterName)
- {
- this.tooltipCounterName = tooltipCounterName;
- }
-
- public override void SetContent(object content)
- {
- if (!(content is TooltipDisplayContent info) || info.Name != tooltipCounterName)
- return;
-
- Counter.Text = info.Count;
- BottomText.Text = info.Date;
- }
- }
-
- private class TooltipDisplayContent
- {
- public LocalisableString Name;
- public LocalisableString Count;
- public LocalisableString Date;
- }
+ Name = tooltipCounterName,
+ Count = playCount.ToLocalisableString("N0"),
+ Time = date.ToLocalisableString("MMMM yyyy")
+ };
}
}
diff --git a/osu.Game/Overlays/Profile/UserGraph.cs b/osu.Game/Overlays/Profile/UserGraph.cs
index b88cc32ff7..502bbbe1a6 100644
--- a/osu.Game/Overlays/Profile/UserGraph.cs
+++ b/osu.Game/Overlays/Profile/UserGraph.cs
@@ -24,7 +24,7 @@ namespace osu.Game.Overlays.Profile
///
/// Type of data to be used for X-axis of the graph.
/// Type of data to be used for Y-axis of the graph.
- public abstract class UserGraph : Container, IHasCustomTooltip
+ public abstract class UserGraph : Container, IHasCustomTooltip
{
protected const float FADE_DURATION = 150;
@@ -118,23 +118,21 @@ namespace osu.Game.Overlays.Profile
protected virtual void ShowGraph() => graph.FadeIn(FADE_DURATION, Easing.Out);
protected virtual void HideGraph() => graph.FadeOut(FADE_DURATION, Easing.Out);
- public ITooltip GetCustomTooltip() => GetTooltip();
+ public ITooltip GetCustomTooltip() => new UserGraphTooltip();
- protected abstract UserGraphTooltip GetTooltip();
-
- public object TooltipContent
+ public UserGraphTooltipContent TooltipContent
{
get
{
if (data == null || hoveredIndex == -1)
- return null;
+ return default;
var (key, value) = data[hoveredIndex];
return GetTooltipContent(key, value);
}
}
- protected abstract object GetTooltipContent(TKey key, TValue value);
+ protected abstract UserGraphTooltipContent GetTooltipContent(TKey key, TValue value);
protected class UserLineGraph : LineGraph
{
@@ -207,12 +205,12 @@ namespace osu.Game.Overlays.Profile
}
}
- protected abstract class UserGraphTooltip : VisibilityContainer, ITooltip
+ private class UserGraphTooltip : VisibilityContainer, ITooltip
{
- protected readonly OsuSpriteText Counter, BottomText;
+ protected readonly OsuSpriteText Label, Counter, BottomText;
private readonly Box background;
- protected UserGraphTooltip(LocalisableString tooltipCounterName)
+ public UserGraphTooltip()
{
AutoSizeAxes = Axes.Both;
Masking = true;
@@ -238,10 +236,9 @@ namespace osu.Game.Overlays.Profile
Spacing = new Vector2(3, 0),
Children = new Drawable[]
{
- new OsuSpriteText
+ Label = new OsuSpriteText
{
Font = OsuFont.GetFont(size: 12, weight: FontWeight.Bold),
- Text = tooltipCounterName
},
Counter = new OsuSpriteText
{
@@ -268,7 +265,12 @@ namespace osu.Game.Overlays.Profile
background.Colour = colours.Gray1;
}
- public abstract void SetContent(object content);
+ public void SetContent(UserGraphTooltipContent content)
+ {
+ Label.Text = content.Name;
+ Counter.Text = content.Count;
+ BottomText.Text = content.Time;
+ }
private bool instantMove = true;
@@ -292,4 +294,12 @@ namespace osu.Game.Overlays.Profile
protected override void PopOut() => this.FadeOut(200, Easing.OutQuint);
}
}
+
+ public class UserGraphTooltipContent
+ {
+ // todo: change to init-only on C# 9
+ public LocalisableString Name { get; set; }
+ public LocalisableString Count { get; set; }
+ public LocalisableString Time { get; set; }
+ }
}