diff --git a/osu.Desktop.VisualTests/Tests/TestCaseTooltip.cs b/osu.Desktop.VisualTests/Tests/TestCaseTooltip.cs index 870a9f3397..30e486d2b1 100644 --- a/osu.Desktop.VisualTests/Tests/TestCaseTooltip.cs +++ b/osu.Desktop.VisualTests/Tests/TestCaseTooltip.cs @@ -33,7 +33,10 @@ public override void Reset() Children = new Drawable[] { new TooltipContainer("Text with some tooltip"), - new TooltipContainer("and another one"), + new TooltipContainer("and another one with a custom delay") + { + TooltipDelay = 1000, + }, new TooltipTextbox { Text = "a box with a tooltip", @@ -54,11 +57,13 @@ public override void Reset() }); } - private class TooltipContainer : Container, IHasTooltip + private class TooltipContainer : Container, IHasTooltipWithCustomDelay { private readonly OsuSpriteText text; - public string Tooltip => text.Text; + public string TooltipText => text.Text; + + public int TooltipDelay { get; set; } = Tooltip.DEFAULT_APPEAR_DELAY; public TooltipContainer(string tooltipText) { @@ -75,26 +80,24 @@ public TooltipContainer(string tooltipText) private class TooltipTextbox : OsuTextBox, IHasTooltip { - public string Tooltip => Text; + public string TooltipText => Text; } - private class TooltipSlider : OsuSliderBar, IHasDelayedTooltip, IHasOverhangingTooltip + private class TooltipSlider : OsuSliderBar, IHasDisappearingTooltip { - public string Tooltip => Current.Value.ToString(); + public string TooltipText => Current.Value.ToString(); - int IHasDelayedTooltip.Delay => Overhanging ? 0 : 250; - - public bool Overhanging { get; set; } + public bool Disappear { get; set; } = true; protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) { - Overhanging = true; + Disappear = false; return base.OnMouseDown(state, args); } protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) { - Overhanging = false; + Disappear = true; return base.OnMouseUp(state, args); } } diff --git a/osu.Game/Graphics/Cursor/IHasTooltip.cs b/osu.Game/Graphics/Cursor/IHasTooltip.cs index 576175ff93..e7b6637f2a 100644 --- a/osu.Game/Graphics/Cursor/IHasTooltip.cs +++ b/osu.Game/Graphics/Cursor/IHasTooltip.cs @@ -1,35 +1,37 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Framework.Graphics; + namespace osu.Game.Graphics.Cursor { - public interface IHasTooltip + public interface IHasTooltip : IDrawable { /// - /// Tooltip that shows when hovering the object + /// Tooltip that shows when hovering the drawable /// - string Tooltip { get; } + string TooltipText { get; } } /// /// Tooltip with custom appear time /// - public interface IHasDelayedTooltip : IHasTooltip + public interface IHasTooltipWithCustomDelay : IHasTooltip { /// /// Time until the tooltip appears (in milliseconds) /// - int Delay { get; } + int TooltipDelay { get; } } /// - /// Tooltip which can show after hovering over the object + /// Tooltip which can decide when to disappear /// - public interface IHasOverhangingTooltip : IHasTooltip + public interface IHasDisappearingTooltip : IHasTooltip { /// - /// Should the tooltip still show? + /// Should the tooltip disappear? /// - bool Overhanging { get; } + bool Disappear { get; } } } diff --git a/osu.Game/Graphics/Cursor/MenuCursor.cs b/osu.Game/Graphics/Cursor/MenuCursor.cs index 21d64b795a..da89571b36 100644 --- a/osu.Game/Graphics/Cursor/MenuCursor.cs +++ b/osu.Game/Graphics/Cursor/MenuCursor.cs @@ -20,7 +20,7 @@ public class MenuCursor : CursorContainer protected override Drawable CreateCursor() => new Cursor(); private bool dragging; - private Tooltip tooltip; + private readonly Tooltip tooltip; public MenuCursor() { diff --git a/osu.Game/Graphics/Cursor/Tooltip.cs b/osu.Game/Graphics/Cursor/Tooltip.cs index 86751ddd65..1efbdf6ba8 100644 --- a/osu.Game/Graphics/Cursor/Tooltip.cs +++ b/osu.Game/Graphics/Cursor/Tooltip.cs @@ -22,7 +22,9 @@ public class Tooltip : Container private ScheduledDelegate show; private UserInputManager input; - private IHasOverhangingTooltip overhang; + private IHasDisappearingTooltip disappearingTooltip; + + public const int DEFAULT_APPEAR_DELAY = 250; public string TooltipText { get @@ -43,16 +45,16 @@ public IMouseState MouseState { set { - if (value.Position != value.LastPosition && overhang?.Overhanging != true) + if (value.Position != value.LastPosition && disappearingTooltip?.Disappear != false) { show?.Cancel(); TooltipText = string.Empty; IHasTooltip hasTooltip = input.HoveredDrawables.OfType().FirstOrDefault(); if (hasTooltip != null) { - IHasDelayedTooltip delayedTooltip = hasTooltip as IHasDelayedTooltip; - overhang = hasTooltip as IHasOverhangingTooltip; - show = Scheduler.AddDelayed(() => TooltipText = hasTooltip.Tooltip, delayedTooltip?.Delay ?? 250); + IHasTooltipWithCustomDelay delayedTooltip = hasTooltip as IHasTooltipWithCustomDelay; + disappearingTooltip = hasTooltip as IHasDisappearingTooltip; + show = Scheduler.AddDelayed(() => TooltipText = hasTooltip.TooltipText, delayedTooltip?.TooltipDelay ?? DEFAULT_APPEAR_DELAY); } } } @@ -99,11 +101,11 @@ private void load(OsuColour colour, UserInputManager input) protected override void Update() { - if (overhang?.Overhanging ?? false) - TooltipText = overhang.Tooltip; - else if (overhang != null) + if (disappearingTooltip?.Disappear == false) + TooltipText = disappearingTooltip.TooltipText; + else if (disappearingTooltip != null) { - overhang = null; + disappearingTooltip = null; TooltipText = string.Empty; } }