// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using OpenTK; using OpenTK.Graphics; using osu.Framework.Allocation; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Shapes; using osu.Game.Graphics.Sprites; namespace osu.Game.Graphics.Cursor { public class OsuTooltipContainer : TooltipContainer { protected override ITooltip CreateTooltip() => new OsuTooltip(); public OsuTooltipContainer(CursorContainer cursor) : base(cursor) { } public class OsuTooltip : Tooltip { private readonly Box background; private readonly OsuSpriteText text; private bool instantMovement = true; public override string TooltipText { set { if (value == text.Text) return; text.Text = value; if (IsPresent) { AutoSizeDuration = 250; background.FlashColour(OsuColour.Gray(0.4f), 1000, Easing.OutQuint); } else AutoSizeDuration = 0; } } private const float text_size = 16; public OsuTooltip() { AutoSizeEasing = Easing.OutQuint; CornerRadius = 5; Masking = true; EdgeEffect = new EdgeEffectParameters { Type = EdgeEffectType.Shadow, Colour = Color4.Black.Opacity(40), Radius = 5, }; Children = new Drawable[] { background = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0.9f, }, text = new OsuSpriteText { TextSize = text_size, Padding = new MarginPadding(5), Font = @"Exo2.0-Regular", } }; } [BackgroundDependencyLoader] private void load(OsuColour colour) { background.Colour = colour.Gray3; } protected override void PopIn() { instantMovement |= !IsPresent; this.FadeIn(500, Easing.OutQuint); } protected override void PopOut() => this.Delay(150).FadeOut(500, Easing.OutQuint); public override void Move(Vector2 pos) { if (instantMovement) { Position = pos; instantMovement = false; } else { this.MoveTo(pos, 200, Easing.OutQuint); } } } } }