1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-12 19:42:55 +08:00

Allow specifying height of ShearedButtons

Also includes a test case in `TestSceneShearedButton`s to ensure the buttons' shear factors don't change on different heights (I've encountered issues with that previously).
This commit is contained in:
Salman Ahmed 2024-05-16 04:49:33 +03:00
parent 21f5d891bb
commit e3afd89dc8
3 changed files with 53 additions and 9 deletions

View File

@ -7,11 +7,13 @@ using System.Linq;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
using osu.Framework.Testing; using osu.Framework.Testing;
using osu.Framework.Utils; using osu.Framework.Utils;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays; using osu.Game.Overlays;
using osuTK;
using osuTK.Input; using osuTK.Input;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
@ -35,7 +37,7 @@ namespace osu.Game.Tests.Visual.UserInterface
if (bigButton) if (bigButton)
{ {
Child = button = new ShearedButton(400) Child = button = new ShearedButton(400, 80)
{ {
LighterColour = Colour4.FromHex("#FFFFFF"), LighterColour = Colour4.FromHex("#FFFFFF"),
DarkerColour = Colour4.FromHex("#FFCC22"), DarkerColour = Colour4.FromHex("#FFCC22"),
@ -44,13 +46,12 @@ namespace osu.Game.Tests.Visual.UserInterface
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Text = "Let's GO!", Text = "Let's GO!",
Height = 80,
Action = () => actionFired = true, Action = () => actionFired = true,
}; };
} }
else else
{ {
Child = button = new ShearedButton(200) Child = button = new ShearedButton(200, 80)
{ {
LighterColour = Colour4.FromHex("#FF86DD"), LighterColour = Colour4.FromHex("#FF86DD"),
DarkerColour = Colour4.FromHex("#DE31AE"), DarkerColour = Colour4.FromHex("#DE31AE"),
@ -58,7 +59,6 @@ namespace osu.Game.Tests.Visual.UserInterface
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Text = "Press me", Text = "Press me",
Height = 80,
Action = () => actionFired = true, Action = () => actionFired = true,
}; };
} }
@ -171,5 +171,48 @@ namespace osu.Game.Tests.Visual.UserInterface
void setToggleDisabledState(bool disabled) => AddStep($"{(disabled ? "disable" : "enable")} toggle", () => button.Active.Disabled = disabled); void setToggleDisabledState(bool disabled) => AddStep($"{(disabled ? "disable" : "enable")} toggle", () => button.Active.Disabled = disabled);
} }
[Test]
public void TestButtons()
{
AddStep("create buttons", () => Children = new[]
{
new FillFlowContainer
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Direction = FillDirection.Horizontal,
AutoSizeAxes = Axes.Both,
Scale = new Vector2(2.5f),
Children = new Drawable[]
{
new ShearedButton(120)
{
Anchor = Anchor.BottomLeft,
Origin = Anchor.BottomLeft,
Text = "Test",
Action = () => { },
Padding = new MarginPadding(),
},
new ShearedButton(120, 40)
{
Anchor = Anchor.BottomLeft,
Origin = Anchor.BottomLeft,
Text = "Test",
Action = () => { },
Padding = new MarginPadding { Left = -1f },
},
new ShearedButton(120, 70)
{
Anchor = Anchor.BottomLeft,
Origin = Anchor.BottomLeft,
Text = "Test",
Action = () => { },
Padding = new MarginPadding { Left = 3f },
},
}
}
});
}
} }
} }

View File

@ -17,7 +17,7 @@ namespace osu.Game.Graphics.UserInterface
{ {
public partial class ShearedButton : OsuClickableContainer public partial class ShearedButton : OsuClickableContainer
{ {
public const float HEIGHT = 50; public const float DEFAULT_HEIGHT = 50;
public const float CORNER_RADIUS = 7; public const float CORNER_RADIUS = 7;
public const float BORDER_THICKNESS = 2; public const float BORDER_THICKNESS = 2;
@ -85,10 +85,11 @@ namespace osu.Game.Graphics.UserInterface
/// <item>If a <see langword="null"/> value is provided (or the argument is omitted entirely), the button will autosize in width to fit the text.</item> /// <item>If a <see langword="null"/> value is provided (or the argument is omitted entirely), the button will autosize in width to fit the text.</item>
/// </list> /// </list>
/// </param> /// </param>
public ShearedButton(float? width = null) /// <param name="height">The height of the button.</param>
public ShearedButton(float? width = null, float height = DEFAULT_HEIGHT)
{ {
Height = HEIGHT; Height = height;
Padding = new MarginPadding { Horizontal = shear * 50 }; Padding = new MarginPadding { Horizontal = shear * height };
Content.CornerRadius = CORNER_RADIUS; Content.CornerRadius = CORNER_RADIUS;
Content.Shear = new Vector2(shear, 0); Content.Shear = new Vector2(shear, 0);

View File

@ -36,7 +36,7 @@ namespace osu.Game.Overlays.Mods
Origin = Anchor.BottomRight, Origin = Anchor.BottomRight,
Anchor = Anchor.BottomRight, Anchor = Anchor.BottomRight,
AutoSizeAxes = Axes.X, AutoSizeAxes = Axes.X,
Height = ShearedButton.HEIGHT, Height = ShearedButton.DEFAULT_HEIGHT,
Shear = new Vector2(ShearedOverlayContainer.SHEAR, 0), Shear = new Vector2(ShearedOverlayContainer.SHEAR, 0),
CornerRadius = ShearedButton.CORNER_RADIUS, CornerRadius = ShearedButton.CORNER_RADIUS,
BorderThickness = ShearedButton.BORDER_THICKNESS, BorderThickness = ShearedButton.BORDER_THICKNESS,