From 7b4616c6c1799c339585fd84afcabf7c62a1c37d Mon Sep 17 00:00:00 2001 From: AlFasGD Date: Fri, 20 Jul 2018 14:02:02 +0300 Subject: [PATCH 01/17] Add circular button file --- .../Components/OsuSetupCircularButton.cs | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 osu.Game/Screens/Edit/Screens/Setup/Components/OsuSetupCircularButton.cs diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/OsuSetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/OsuSetupCircularButton.cs new file mode 100644 index 0000000000..ae22f38a08 --- /dev/null +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/OsuSetupCircularButton.cs @@ -0,0 +1,133 @@ +// 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.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Input; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using System; + +namespace osu.Game.Screens.Edit.Screens.Setup.Components +{ + public class OsuSetupCircularButton : Container, IHasAccentColour + { + private readonly Box fill; + private readonly OsuSpriteText label; + + public const float DEFAULT_LABEL_TEXT_SIZE = 14; + public const float SIZE_X = 125; + public const float SIZE_Y = 30; + + public event Action ButtonClicked; + + private bool disabled; + public bool Disabled + { + get => disabled; + set + { + disabled = value; + fadeColour(); + } + } + + private Color4 defaultColour; + public Color4 DefaultColour + { + get => defaultColour; + set + { + defaultColour = value; + fadeColour(); + } + } + + private Color4 accentColour; + public Color4 AccentColour + { + get => accentColour; + set + { + accentColour = value; + fill.Colour = value; + } + } + + private string labelText; + public string LabelText + { + get => labelText; + set + { + labelText = value; + label.Text = value; + } + } + + public OsuSetupCircularButton() + { + Size = new Vector2(SIZE_X, SIZE_Y); + CornerRadius = 15; + Masking = true; + + Children = new Drawable[] + { + fill = new Box + { + RelativeSizeAxes = Axes.Both, + AlwaysPresent = true, + }, + label = new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Colour = Color4.White, + TextSize = DEFAULT_LABEL_TEXT_SIZE, + Text = LabelText, + Font = @"Exo2.0-Bold", + } + }; + } + + protected override void LoadComplete() + { + FadeEdgeEffectTo(0); + } + + protected override bool OnClick(InputState state) + { + // Effect to indicate the button has been clicked + if (!disabled) + ButtonClicked?.Invoke(); + return base.OnClick(state); + } + + protected override bool OnHover(InputState state) + { + fadeColour(); + return base.OnHover(state); + } + + protected override void OnHoverLost(InputState state) + { + fadeColour(); + base.OnHoverLost(state); + } + + private void fadeColour() + { + if (!disabled) + { + this.FadeAccent(defaultColour.Lighten(IsHovered ? 0.3f : 0), 500, Easing.OutQuint); + this.FadeTo(1, 500, Easing.OutQuint); + } + else + this.FadeTo(0.3f, 500, Easing.OutQuint); + } + } +} From 4d0d4523ca83c47346758532f28bcfade7c044ae Mon Sep 17 00:00:00 2001 From: AlFasGD Date: Tue, 24 Jul 2018 11:23:38 +0300 Subject: [PATCH 02/17] Add test case, rename component --- .../TestCaseEditorSetupCircularButton.cs | 38 +++++++++++++++++++ ...rcularButton.cs => SetupCircularButton.cs} | 4 +- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs rename osu.Game/Screens/Edit/Screens/Setup/Components/{OsuSetupCircularButton.cs => SetupCircularButton.cs} (96%) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs new file mode 100644 index 0000000000..77cc6dbb9d --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs @@ -0,0 +1,38 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Game.Graphics; +using osu.Game.Screens.Edit.Screens.Setup.Components; +using System; +using System.Collections.Generic; + +namespace osu.Game.Tests.Visual +{ + public class TestCaseEditorSetupCircularButton : OsuTestCase + { + public override IReadOnlyList RequiredTypes => new[] + { + typeof(SetupCircularButton) + }; + + private readonly SetupCircularButton circularButton; + + public TestCaseEditorSetupCircularButton() + { + Child = circularButton = new SetupCircularButton + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + LabelText = "Button", + }; + } + + [BackgroundDependencyLoader] + private void load(OsuColour osuColour) + { + circularButton.DefaultColour = osuColour.Blue; + } + } +} diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/OsuSetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs similarity index 96% rename from osu.Game/Screens/Edit/Screens/Setup/Components/OsuSetupCircularButton.cs rename to osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index ae22f38a08..877c398be8 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/OsuSetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -14,7 +14,7 @@ using System; namespace osu.Game.Screens.Edit.Screens.Setup.Components { - public class OsuSetupCircularButton : Container, IHasAccentColour + public class SetupCircularButton : Container, IHasAccentColour { private readonly Box fill; private readonly OsuSpriteText label; @@ -69,7 +69,7 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components } } - public OsuSetupCircularButton() + public SetupCircularButton() { Size = new Vector2(SIZE_X, SIZE_Y); CornerRadius = 15; From ebf14c9c936a205e5ad4ac4193868250cc95b2ca Mon Sep 17 00:00:00 2001 From: AlFasGD Date: Tue, 24 Jul 2018 11:32:24 +0300 Subject: [PATCH 03/17] Update framework from current master --- .../Edit/Screens/Setup/Components/SetupCircularButton.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index 877c398be8..da238398fa 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -7,7 +7,7 @@ using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; -using osu.Framework.Input; +using osu.Framework.Input.States; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using System; From 2a819a53c093c3d28e1e7c4e79a089a36ec4a2f7 Mon Sep 17 00:00:00 2001 From: AlFasGD Date: Fri, 27 Jul 2018 12:26:37 +0300 Subject: [PATCH 04/17] Prefer inheriting TriangleButton instead of Container --- .../TestCaseEditorSetupCircularButton.cs | 5 +- .../Setup/Components/SetupCircularButton.cs | 74 ++++--------------- 2 files changed, 17 insertions(+), 62 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs index 77cc6dbb9d..14649e9d79 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs @@ -27,12 +27,15 @@ namespace osu.Game.Tests.Visual Origin = Anchor.Centre, LabelText = "Button", }; + + AddStep("Enable button", () => circularButton.Enabled.Value = true); + AddStep("Disable button", () => circularButton.Enabled.Value = false); } [BackgroundDependencyLoader] private void load(OsuColour osuColour) { - circularButton.DefaultColour = osuColour.Blue; + circularButton.AccentColour = osuColour.Blue; } } } diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index da238398fa..186d1cc223 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -3,6 +3,7 @@ using OpenTK; using OpenTK.Graphics; +using osu.Framework.Allocation; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -10,11 +11,12 @@ using osu.Framework.Graphics.Shapes; using osu.Framework.Input.States; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; +using osu.Game.Graphics.UserInterface; using System; namespace osu.Game.Screens.Edit.Screens.Setup.Components { - public class SetupCircularButton : Container, IHasAccentColour + public class SetupCircularButton : TriangleButton, IHasAccentColour { private readonly Box fill; private readonly OsuSpriteText label; @@ -25,28 +27,6 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components public event Action ButtonClicked; - private bool disabled; - public bool Disabled - { - get => disabled; - set - { - disabled = value; - fadeColour(); - } - } - - private Color4 defaultColour; - public Color4 DefaultColour - { - get => defaultColour; - set - { - defaultColour = value; - fadeColour(); - } - } - private Color4 accentColour; public Color4 AccentColour { @@ -57,23 +37,16 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components fill.Colour = value; } } - - private string labelText; + public string LabelText { - get => labelText; - set - { - labelText = value; - label.Text = value; - } + get => label.Text; + set => label.Text = value; } public SetupCircularButton() { Size = new Vector2(SIZE_X, SIZE_Y); - CornerRadius = 15; - Masking = true; Children = new Drawable[] { @@ -88,46 +61,25 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components Origin = Anchor.Centre, Colour = Color4.White, TextSize = DEFAULT_LABEL_TEXT_SIZE, - Text = LabelText, Font = @"Exo2.0-Bold", } }; + + Enabled.Value = true; } - protected override void LoadComplete() + [BackgroundDependencyLoader] + private void load(OsuColour colours) { - FadeEdgeEffectTo(0); + Triangles.Alpha = 0; + Content.CornerRadius = 15; } protected override bool OnClick(InputState state) { - // Effect to indicate the button has been clicked - if (!disabled) + if (Enabled.Value) ButtonClicked?.Invoke(); return base.OnClick(state); } - - protected override bool OnHover(InputState state) - { - fadeColour(); - return base.OnHover(state); - } - - protected override void OnHoverLost(InputState state) - { - fadeColour(); - base.OnHoverLost(state); - } - - private void fadeColour() - { - if (!disabled) - { - this.FadeAccent(defaultColour.Lighten(IsHovered ? 0.3f : 0), 500, Easing.OutQuint); - this.FadeTo(1, 500, Easing.OutQuint); - } - else - this.FadeTo(0.3f, 500, Easing.OutQuint); - } } } From 3ee1353976c7647e24104f86e657ea1a9af1a664 Mon Sep 17 00:00:00 2001 From: AlFasGD Date: Fri, 27 Jul 2018 12:28:47 +0300 Subject: [PATCH 05/17] Remove whitespace --- .../Edit/Screens/Setup/Components/SetupCircularButton.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index 186d1cc223..51f67b2f27 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -37,7 +37,7 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components fill.Colour = value; } } - + public string LabelText { get => label.Text; From 78cde951323e20a7543b41737e4ee5dc7e9eca0f Mon Sep 17 00:00:00 2001 From: AlFasGD Date: Fri, 27 Jul 2018 12:34:11 +0300 Subject: [PATCH 06/17] Privatise constants --- .../Screens/Setup/Components/SetupCircularButton.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index 51f67b2f27..cb4f5b6864 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -21,9 +21,9 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components private readonly Box fill; private readonly OsuSpriteText label; - public const float DEFAULT_LABEL_TEXT_SIZE = 14; - public const float SIZE_X = 125; - public const float SIZE_Y = 30; + private const float default_label_text_size = 14; + private const float size_x = 125; + private const float size_y = 30; public event Action ButtonClicked; @@ -46,7 +46,7 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components public SetupCircularButton() { - Size = new Vector2(SIZE_X, SIZE_Y); + Size = new Vector2(size_x, size_y); Children = new Drawable[] { @@ -60,7 +60,7 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components Anchor = Anchor.Centre, Origin = Anchor.Centre, Colour = Color4.White, - TextSize = DEFAULT_LABEL_TEXT_SIZE, + TextSize = default_label_text_size, Font = @"Exo2.0-Bold", } }; From 1962797e206563a113755ca9e905e84bd7221bcf Mon Sep 17 00:00:00 2001 From: AlFasGD Date: Fri, 27 Jul 2018 12:40:38 +0300 Subject: [PATCH 07/17] Remove unnecessary using directive --- .../Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index cb4f5b6864..cd748df005 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -4,7 +4,6 @@ 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.Shapes; From 93cf063c97b1da6bc22732594d76fe796f16a4fd Mon Sep 17 00:00:00 2001 From: AlFasGD Date: Fri, 27 Jul 2018 12:52:33 +0300 Subject: [PATCH 08/17] Remove useless things --- .../Edit/Screens/Setup/Components/SetupCircularButton.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index cd748df005..873a176d3d 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -5,7 +5,6 @@ using OpenTK; using OpenTK.Graphics; using osu.Framework.Allocation; using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Input.States; using osu.Game.Graphics; @@ -68,7 +67,7 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components } [BackgroundDependencyLoader] - private void load(OsuColour colours) + private void load() { Triangles.Alpha = 0; Content.CornerRadius = 15; From c5a772bbc8c7035fd3c7bb45f1b8390af1b4d107 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 31 Jul 2018 15:49:04 +0900 Subject: [PATCH 09/17] Completely reuse TriangleButton --- .../TestCaseEditorSetupCircularButton.cs | 15 ++--- .../Setup/Components/SetupCircularButton.cs | 58 +------------------ 2 files changed, 5 insertions(+), 68 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs index 14649e9d79..ce3ae349b9 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs @@ -1,9 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Framework.Allocation; using osu.Framework.Graphics; -using osu.Game.Graphics; using osu.Game.Screens.Edit.Screens.Setup.Components; using System; using System.Collections.Generic; @@ -17,25 +15,20 @@ namespace osu.Game.Tests.Visual typeof(SetupCircularButton) }; - private readonly SetupCircularButton circularButton; - public TestCaseEditorSetupCircularButton() { + SetupCircularButton circularButton; + Child = circularButton = new SetupCircularButton { Anchor = Anchor.Centre, Origin = Anchor.Centre, - LabelText = "Button", + Text = "Button", + Action = () => { } }; AddStep("Enable button", () => circularButton.Enabled.Value = true); AddStep("Disable button", () => circularButton.Enabled.Value = false); } - - [BackgroundDependencyLoader] - private void load(OsuColour osuColour) - { - circularButton.AccentColour = osuColour.Blue; - } } } diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index 873a176d3d..0697e62224 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -2,68 +2,19 @@ // 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.Graphics; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Input.States; -using osu.Game.Graphics; -using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; -using System; namespace osu.Game.Screens.Edit.Screens.Setup.Components { - public class SetupCircularButton : TriangleButton, IHasAccentColour + public class SetupCircularButton : TriangleButton { - private readonly Box fill; - private readonly OsuSpriteText label; - - private const float default_label_text_size = 14; private const float size_x = 125; private const float size_y = 30; - public event Action ButtonClicked; - - private Color4 accentColour; - public Color4 AccentColour - { - get => accentColour; - set - { - accentColour = value; - fill.Colour = value; - } - } - - public string LabelText - { - get => label.Text; - set => label.Text = value; - } - public SetupCircularButton() { Size = new Vector2(size_x, size_y); - - Children = new Drawable[] - { - fill = new Box - { - RelativeSizeAxes = Axes.Both, - AlwaysPresent = true, - }, - label = new OsuSpriteText - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Colour = Color4.White, - TextSize = default_label_text_size, - Font = @"Exo2.0-Bold", - } - }; - - Enabled.Value = true; } [BackgroundDependencyLoader] @@ -72,12 +23,5 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components Triangles.Alpha = 0; Content.CornerRadius = 15; } - - protected override bool OnClick(InputState state) - { - if (Enabled.Value) - ButtonClicked?.Invoke(); - return base.OnClick(state); - } } } From c9d43328465d3c31b5d01071d3e868399b650284 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 31 Jul 2018 16:44:20 +0900 Subject: [PATCH 10/17] size_x, size_y -> width, height --- .../Edit/Screens/Setup/Components/SetupCircularButton.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index 0697e62224..37cc742ad2 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -9,12 +9,12 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components { public class SetupCircularButton : TriangleButton { - private const float size_x = 125; - private const float size_y = 30; + private const float width = 125; + private const float height = 30; public SetupCircularButton() { - Size = new Vector2(size_x, size_y); + Size = new Vector2(width, height); } [BackgroundDependencyLoader] From 7c60c74d46bdfb195edd3e738b47eb5284ce582b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 1 Aug 2018 16:07:58 +0900 Subject: [PATCH 11/17] Remove testcase --- .../TestCaseEditorSetupCircularButton.cs | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs diff --git a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs deleted file mode 100644 index ce3ae349b9..0000000000 --- a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Graphics; -using osu.Game.Screens.Edit.Screens.Setup.Components; -using System; -using System.Collections.Generic; - -namespace osu.Game.Tests.Visual -{ - public class TestCaseEditorSetupCircularButton : OsuTestCase - { - public override IReadOnlyList RequiredTypes => new[] - { - typeof(SetupCircularButton) - }; - - public TestCaseEditorSetupCircularButton() - { - SetupCircularButton circularButton; - - Child = circularButton = new SetupCircularButton - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Text = "Button", - Action = () => { } - }; - - AddStep("Enable button", () => circularButton.Enabled.Value = true); - AddStep("Disable button", () => circularButton.Enabled.Value = false); - } - } -} From b9814b64ed4836d1f2e61700095ac418d6a419fb Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 1 Aug 2018 16:45:48 +0900 Subject: [PATCH 12/17] Move default button implementation from TriangleButton to OsuButton --- osu.Game/Graphics/UserInterface/OsuButton.cs | 75 +++++++++++++++++- .../Graphics/UserInterface/TriangleButton.cs | 79 ++----------------- osu.Game/Overlays/Settings/SidebarButton.cs | 6 +- 3 files changed, 84 insertions(+), 76 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/OsuButton.cs b/osu.Game/Graphics/UserInterface/OsuButton.cs index bf3805a44d..bb6a032a12 100644 --- a/osu.Game/Graphics/UserInterface/OsuButton.cs +++ b/osu.Game/Graphics/UserInterface/OsuButton.cs @@ -1,7 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Framework.Allocation; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.UserInterface; +using osu.Framework.Input.EventArgs; +using osu.Framework.Input.States; +using osu.Game.Graphics.Sprites; +using OpenTK.Graphics; namespace osu.Game.Graphics.UserInterface { @@ -10,9 +19,73 @@ namespace osu.Game.Graphics.UserInterface /// public class OsuButton : Button { + private Box hover; + public OsuButton() { - Add(new HoverClickSounds(HoverSampleSet.Loud)); + Height = 40; + + Content.Masking = true; + Content.CornerRadius = 5; } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + BackgroundColour = colours.BlueDark; + + AddRange(new Drawable[] + { + hover = new Box + { + RelativeSizeAxes = Axes.Both, + Blending = BlendingMode.Additive, + Colour = Color4.White.Opacity(0.1f), + Alpha = 0, + Depth = -1 + }, + new HoverClickSounds(HoverSampleSet.Loud), + }); + + Enabled.ValueChanged += enabled_ValueChanged; + Enabled.TriggerChange(); + } + + private void enabled_ValueChanged(bool enabled) + { + this.FadeColour(enabled ? Color4.White : Color4.Gray, 200, Easing.OutQuint); + } + + protected override bool OnHover(InputState state) + { + hover.FadeIn(200); + return base.OnHover(state); + } + + protected override void OnHoverLost(InputState state) + { + hover.FadeOut(200); + base.OnHoverLost(state); + } + + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) + { + Content.ScaleTo(0.9f, 4000, Easing.OutQuint); + return base.OnMouseDown(state, args); + } + + protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) + { + Content.ScaleTo(1, 1000, Easing.OutElastic); + return base.OnMouseUp(state, args); + } + + protected override SpriteText CreateText() => new OsuSpriteText + { + Depth = -1, + Origin = Anchor.Centre, + Anchor = Anchor.Centre, + Font = @"Exo2.0-Bold", + }; } } diff --git a/osu.Game/Graphics/UserInterface/TriangleButton.cs b/osu.Game/Graphics/UserInterface/TriangleButton.cs index bfdc0c3bef..e85ef9dac1 100644 --- a/osu.Game/Graphics/UserInterface/TriangleButton.cs +++ b/osu.Game/Graphics/UserInterface/TriangleButton.cs @@ -2,17 +2,10 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; -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.Shapes; -using osu.Framework.Graphics.Sprites; -using osu.Framework.Input.EventArgs; -using osu.Framework.Input.States; using osu.Game.Graphics.Backgrounds; -using osu.Game.Graphics.Sprites; namespace osu.Game.Graphics.UserInterface { @@ -21,80 +14,19 @@ namespace osu.Game.Graphics.UserInterface /// public class TriangleButton : OsuButton, IFilterable { - private Box hover; - - protected Triangles Triangles; - - public TriangleButton() - { - Height = 40; - } - - protected override SpriteText CreateText() => new OsuSpriteText - { - Depth = -1, - Origin = Anchor.Centre, - Anchor = Anchor.Centre, - Font = @"Exo2.0-Bold", - }; + protected Triangles Triangles { get; private set; } [BackgroundDependencyLoader] private void load(OsuColour colours) { - BackgroundColour = colours.BlueDark; - - Content.Masking = true; - Content.CornerRadius = 5; - - AddRange(new Drawable[] + Add(Triangles = new Triangles { - Triangles = new Triangles - { - RelativeSizeAxes = Axes.Both, - ColourDark = colours.BlueDarker, - ColourLight = colours.Blue, - }, - hover = new Box - { - RelativeSizeAxes = Axes.Both, - Blending = BlendingMode.Additive, - Colour = Color4.White.Opacity(0.1f), - Alpha = 0, - }, + RelativeSizeAxes = Axes.Both, + ColourDark = colours.BlueDarker, + ColourLight = colours.Blue, }); - - Enabled.ValueChanged += enabled_ValueChanged; - Enabled.TriggerChange(); } - private void enabled_ValueChanged(bool enabled) - { - this.FadeColour(enabled ? Color4.White : Color4.Gray, 200, Easing.OutQuint); - } - - protected override bool OnHover(InputState state) - { - hover.FadeIn(200); - return base.OnHover(state); - } - - protected override void OnHoverLost(InputState state) - { - hover.FadeOut(200); - base.OnHoverLost(state); - } - - protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) - { - Content.ScaleTo(0.9f, 4000, Easing.OutQuint); - return base.OnMouseDown(state, args); - } - - protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) - { - Content.ScaleTo(1, 1000, Easing.OutElastic); - return base.OnMouseUp(state, args); - } public IEnumerable FilterTerms => new[] { Text }; @@ -105,5 +37,6 @@ namespace osu.Game.Graphics.UserInterface this.FadeTo(value ? 1 : 0); } } + } } diff --git a/osu.Game/Overlays/Settings/SidebarButton.cs b/osu.Game/Overlays/Settings/SidebarButton.cs index ac2c840c94..28e2b773ec 100644 --- a/osu.Game/Overlays/Settings/SidebarButton.cs +++ b/osu.Game/Overlays/Settings/SidebarButton.cs @@ -9,6 +9,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.UserInterface; using osu.Framework.Input.States; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; @@ -16,7 +17,7 @@ using osu.Game.Graphics.UserInterface; namespace osu.Game.Overlays.Settings { - public class SidebarButton : OsuButton + public class SidebarButton : Button { private readonly SpriteIcon drawableIcon; private readonly SpriteText headerText; @@ -97,7 +98,8 @@ namespace osu.Game.Overlays.Settings Width = 5, Anchor = Anchor.CentreRight, Origin = Anchor.CentreRight, - } + }, + new HoverClickSounds(HoverSampleSet.Loud), }); } From 9eb47ae69141e0c18d94a4a6b1ed2126653c2d3a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 1 Aug 2018 17:02:52 +0900 Subject: [PATCH 13/17] Make SetupCircularButton inherit OsuButton --- .../Edit/Screens/Setup/Components/SetupCircularButton.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index 37cc742ad2..093598be7a 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -7,7 +7,7 @@ using osu.Game.Graphics.UserInterface; namespace osu.Game.Screens.Edit.Screens.Setup.Components { - public class SetupCircularButton : TriangleButton + public class SetupCircularButton : OsuButton { private const float width = 125; private const float height = 30; @@ -20,7 +20,6 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components [BackgroundDependencyLoader] private void load() { - Triangles.Alpha = 0; Content.CornerRadius = 15; } } From 10b8708d4e11314fd45c56d8307dfa648ca9f198 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 1 Aug 2018 17:47:32 +0900 Subject: [PATCH 14/17] Make SetupCircularButton adjust corner radius by height --- .../TestCaseEditorSetupCircularButton.cs | 45 +++++++++++++++++++ .../Setup/Components/SetupCircularButton.cs | 7 ++- 2 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs diff --git a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs new file mode 100644 index 0000000000..c6037b706b --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs @@ -0,0 +1,45 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Graphics; +using osu.Framework.Allocation; +using osu.Framework.Graphics.Containers; +using osu.Game.Screens.Edit.Screens.Setup.Components; +using OpenTK; + +namespace osu.Game.Tests.Visual +{ + public class TestCaseEditorSetupCircularButton : OsuTestCase + { + [BackgroundDependencyLoader] + private void load() + { + Child = new FillFlowContainer + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Children = new[] + { + new SetupCircularButton { Text = "Default" }, + new SetupCircularButton + { + Width = 200, + Text = "Wide", + }, + new SetupCircularButton + { + Height = 100, + Text = "High" + }, + new SetupCircularButton + { + Size = new Vector2(200, 100), + Text = "Wide 'n' High" + } + } + }; + } + } +} diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs index 093598be7a..d46fb2f269 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using OpenTK; -using osu.Framework.Allocation; using osu.Game.Graphics.UserInterface; namespace osu.Game.Screens.Edit.Screens.Setup.Components @@ -17,10 +16,10 @@ namespace osu.Game.Screens.Edit.Screens.Setup.Components Size = new Vector2(width, height); } - [BackgroundDependencyLoader] - private void load() + protected override void Update() { - Content.CornerRadius = 15; + base.Update(); + Content.CornerRadius = DrawHeight / 2f; } } } From fe99aab0f20b7a6987bcdd9a9ea3f591c5c81e3f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 15 Aug 2018 16:45:33 +0900 Subject: [PATCH 15/17] Remove highly unnecessary testcase --- .../TestCaseEditorSetupCircularButton.cs | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs diff --git a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs b/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs deleted file mode 100644 index c6037b706b..0000000000 --- a/osu.Game.Tests/Visual/TestCaseEditorSetupCircularButton.cs +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Graphics; -using osu.Framework.Allocation; -using osu.Framework.Graphics.Containers; -using osu.Game.Screens.Edit.Screens.Setup.Components; -using OpenTK; - -namespace osu.Game.Tests.Visual -{ - public class TestCaseEditorSetupCircularButton : OsuTestCase - { - [BackgroundDependencyLoader] - private void load() - { - Child = new FillFlowContainer - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - AutoSizeAxes = Axes.Both, - Direction = FillDirection.Vertical, - Children = new[] - { - new SetupCircularButton { Text = "Default" }, - new SetupCircularButton - { - Width = 200, - Text = "Wide", - }, - new SetupCircularButton - { - Height = 100, - Text = "High" - }, - new SetupCircularButton - { - Size = new Vector2(200, 100), - Text = "Wide 'n' High" - } - } - }; - } - } -} From 85dc42d47a9e4085eb51aed85f77fe4bd69b8ae1 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 15 Aug 2018 16:47:20 +0900 Subject: [PATCH 16/17] Re-namespace/rename CircularButton --- .../CircularButton.cs} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename osu.Game/Screens/Edit/{Screens/Setup/Components/SetupCircularButton.cs => Components/CircularButton.cs} (78%) diff --git a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs b/osu.Game/Screens/Edit/Components/CircularButton.cs similarity index 78% rename from osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs rename to osu.Game/Screens/Edit/Components/CircularButton.cs index d46fb2f269..a8ad242772 100644 --- a/osu.Game/Screens/Edit/Screens/Setup/Components/SetupCircularButton.cs +++ b/osu.Game/Screens/Edit/Components/CircularButton.cs @@ -1,17 +1,17 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using OpenTK; using osu.Game.Graphics.UserInterface; +using OpenTK; -namespace osu.Game.Screens.Edit.Screens.Setup.Components +namespace osu.Game.Screens.Edit.Components { - public class SetupCircularButton : OsuButton + public class CircularButton : OsuButton { private const float width = 125; private const float height = 30; - public SetupCircularButton() + public CircularButton() { Size = new Vector2(width, height); } From 4cd21fabf34e59956740ad78f5703285baced4b7 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 21 Aug 2018 19:16:07 +0900 Subject: [PATCH 17/17] Remove extra newlines --- osu.Game/Graphics/UserInterface/TriangleButton.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/TriangleButton.cs b/osu.Game/Graphics/UserInterface/TriangleButton.cs index e85ef9dac1..683b442d93 100644 --- a/osu.Game/Graphics/UserInterface/TriangleButton.cs +++ b/osu.Game/Graphics/UserInterface/TriangleButton.cs @@ -27,7 +27,6 @@ namespace osu.Game.Graphics.UserInterface }); } - public IEnumerable FilterTerms => new[] { Text }; public bool MatchingFilter @@ -37,6 +36,5 @@ namespace osu.Game.Graphics.UserInterface this.FadeTo(value ? 1 : 0); } } - } }