1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-05 12:32:58 +08:00

Remove externally exposed Expanded state and change behaviour and visuals surrounding it

This commit is contained in:
Dean Herbert 2021-10-15 12:13:42 +09:00
parent ec5c967e71
commit e1ac5fbed9
3 changed files with 48 additions and 47 deletions

View File

@ -17,11 +17,10 @@ using osu.Game.Overlays;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface
{ {
public class Nub : CircularContainer, IHasCurrentValue<bool>, IHasAccentColour public class Nub : CompositeDrawable, IHasCurrentValue<bool>, IHasAccentColour
{ {
public const float HEIGHT = 15; public const float HEIGHT = 15;
public const float COLLAPSED_SIZE = 30;
public const float EXPANDED_SIZE = 50; public const float EXPANDED_SIZE = 50;
private const float border_width = 3; private const float border_width = 3;
@ -29,32 +28,34 @@ namespace osu.Game.Graphics.UserInterface
private const double animate_in_duration = 200; private const double animate_in_duration = 200;
private const double animate_out_duration = 500; private const double animate_out_duration = 500;
private readonly Box fill;
private readonly Container main;
public Nub() public Nub()
{ {
Box fill; Size = new Vector2(EXPANDED_SIZE, HEIGHT);
Size = new Vector2(COLLAPSED_SIZE, HEIGHT); InternalChildren = new[]
BorderColour = Color4.White;
BorderThickness = border_width;
Masking = true;
Children = new[]
{ {
fill = new Box main = new CircularContainer
{ {
BorderColour = Color4.White,
BorderThickness = border_width,
Masking = true,
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Alpha = 0, Anchor = Anchor.TopCentre,
AlwaysPresent = true, Origin = Anchor.TopCentre,
Children = new Drawable[]
{
fill = new Box
{
RelativeSizeAxes = Axes.Both,
Alpha = 0,
AlwaysPresent = true,
},
}
}, },
}; };
Current.ValueChanged += filled =>
{
fill.FadeTo(filled.NewValue ? 1 : 0, 200, Easing.OutQuint);
this.TransformTo(nameof(BorderThickness), filled.NewValue ? 8.5f : border_width, 200, Easing.OutQuint);
};
} }
[BackgroundDependencyLoader(true)] [BackgroundDependencyLoader(true)]
@ -64,7 +65,7 @@ namespace osu.Game.Graphics.UserInterface
GlowingAccentColour = colourProvider?.Highlight1.Lighten(0.2f) ?? colours.PinkLighter; GlowingAccentColour = colourProvider?.Highlight1.Lighten(0.2f) ?? colours.PinkLighter;
GlowColour = colourProvider?.Light4 ?? colours.PinkDarker; GlowColour = colourProvider?.Light4 ?? colours.PinkDarker;
EdgeEffect = new EdgeEffectParameters main.EdgeEffect = new EdgeEffectParameters
{ {
Colour = GlowColour.Opacity(0), Colour = GlowColour.Opacity(0),
Type = EdgeEffectType.Glow, Type = EdgeEffectType.Glow,
@ -73,6 +74,13 @@ namespace osu.Game.Graphics.UserInterface
}; };
} }
protected override void LoadComplete()
{
base.LoadComplete();
Current.BindValueChanged(onCurrentValueChanged, true);
}
private bool glowing; private bool glowing;
public bool Glowing public bool Glowing
@ -84,28 +92,17 @@ namespace osu.Game.Graphics.UserInterface
if (value) if (value)
{ {
this.FadeColour(GlowingAccentColour, animate_in_duration, Easing.OutQuint); main.FadeColour(GlowingAccentColour, animate_in_duration, Easing.OutQuint);
FadeEdgeEffectTo(0.6f, animate_in_duration, Easing.OutQuint); main.FadeEdgeEffectTo(0.6f, animate_in_duration, Easing.OutQuint);
} }
else else
{ {
FadeEdgeEffectTo(0, animate_out_duration); main.FadeEdgeEffectTo(0, animate_out_duration);
this.FadeColour(AccentColour, animate_out_duration); main.FadeColour(AccentColour, animate_out_duration);
} }
} }
} }
public bool Expanded
{
set
{
if (value)
this.ResizeTo(new Vector2(EXPANDED_SIZE, HEIGHT), animate_in_duration, Easing.OutQuint);
else
this.ResizeTo(new Vector2(COLLAPSED_SIZE, HEIGHT), animate_out_duration, Easing.OutQuint);
}
}
private readonly Bindable<bool> current = new Bindable<bool>(); private readonly Bindable<bool> current = new Bindable<bool>();
public Bindable<bool> Current public Bindable<bool> Current
@ -130,7 +127,7 @@ namespace osu.Game.Graphics.UserInterface
{ {
accentColour = value; accentColour = value;
if (!Glowing) if (!Glowing)
Colour = value; main.Colour = value;
} }
} }
@ -143,7 +140,7 @@ namespace osu.Game.Graphics.UserInterface
{ {
glowingAccentColour = value; glowingAccentColour = value;
if (Glowing) if (Glowing)
Colour = value; main.Colour = value;
} }
} }
@ -158,8 +155,20 @@ namespace osu.Game.Graphics.UserInterface
var effect = EdgeEffect; var effect = EdgeEffect;
effect.Colour = Glowing ? value : value.Opacity(0); effect.Colour = Glowing ? value : value.Opacity(0);
EdgeEffect = effect; main.EdgeEffect = effect;
} }
} }
private void onCurrentValueChanged(ValueChangedEvent<bool> filled)
{
fill.FadeTo(filled.NewValue ? 1 : 0, 200, Easing.OutQuint);
if (filled.NewValue)
main.ResizeWidthTo(1, animate_in_duration, Easing.OutElasticHalf);
else
main.ResizeWidthTo(0.9f, animate_out_duration, Easing.OutElastic);
main.TransformTo(nameof(BorderThickness), filled.NewValue ? 8.5f : border_width, 200, Easing.OutQuint);
}
} }
} }

View File

@ -9,16 +9,11 @@ using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input.Events; using osu.Framework.Input.Events;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osuTK.Graphics;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface
{ {
public class OsuCheckbox : Checkbox public class OsuCheckbox : Checkbox
{ {
public Color4 CheckedColor { get; set; } = Color4.Cyan;
public Color4 UncheckedColor { get; set; } = Color4.White;
public int FadeDuration { get; set; }
/// <summary> /// <summary>
/// Whether to play sounds when the state changes as a result of user interaction. /// Whether to play sounds when the state changes as a result of user interaction.
/// </summary> /// </summary>
@ -104,14 +99,12 @@ namespace osu.Game.Graphics.UserInterface
protected override bool OnHover(HoverEvent e) protected override bool OnHover(HoverEvent e)
{ {
Nub.Glowing = true; Nub.Glowing = true;
Nub.Expanded = true;
return base.OnHover(e); return base.OnHover(e);
} }
protected override void OnHoverLost(HoverLostEvent e) protected override void OnHoverLost(HoverLostEvent e)
{ {
Nub.Glowing = false; Nub.Glowing = false;
Nub.Expanded = false;
base.OnHoverLost(e); base.OnHoverLost(e);
} }

View File

@ -120,7 +120,6 @@ namespace osu.Game.Graphics.UserInterface
{ {
Origin = Anchor.TopCentre, Origin = Anchor.TopCentre,
RelativePositionAxes = Axes.X, RelativePositionAxes = Axes.X,
Expanded = true,
Current = { Value = true } Current = { Value = true }
}, },
}, },