1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-13 08:32:57 +08:00

Merge branch 'master' into update-framework

This commit is contained in:
Bartłomiej Dach 2022-11-26 16:19:36 +01:00
commit 894ef15e79
No known key found for this signature in database
40 changed files with 252 additions and 180 deletions

View File

@ -25,6 +25,7 @@ namespace osu.Game.Tests.Visual.Editing
beatmap.ControlPointInfo.Clear(); beatmap.ControlPointInfo.Clear();
beatmap.ControlPointInfo.Add(0, new TimingControlPoint { BeatLength = 1000 }); beatmap.ControlPointInfo.Add(0, new TimingControlPoint { BeatLength = 1000 });
beatmap.ControlPointInfo.Add(2000, new TimingControlPoint { BeatLength = 500 }); beatmap.ControlPointInfo.Add(2000, new TimingControlPoint { BeatLength = 500 });
beatmap.ControlPointInfo.Add(20000, new TimingControlPoint { BeatLength = 500 });
return beatmap; return beatmap;
} }
@ -116,6 +117,26 @@ namespace osu.Game.Tests.Visual.Editing
pressAndCheckTime(Key.Right, 3000); pressAndCheckTime(Key.Right, 3000);
} }
[Test]
public void TestSeekBetweenControlPoints()
{
AddStep("seek to 0", () => EditorClock.Seek(0));
AddAssert("time is 0", () => EditorClock.CurrentTime == 0);
// already at first control point, noop
pressAndCheckTime(Key.Up, 0);
pressAndCheckTime(Key.Down, 2000);
pressAndCheckTime(Key.Down, 20000);
// at last control point, noop
pressAndCheckTime(Key.Down, 20000);
pressAndCheckTime(Key.Up, 2000);
pressAndCheckTime(Key.Up, 0);
pressAndCheckTime(Key.Up, 0);
}
private void pressAndCheckTime(Key key, double expectedTime) private void pressAndCheckTime(Key key, double expectedTime)
{ {
AddStep($"press {key}", () => InputManager.Key(key)); AddStep($"press {key}", () => InputManager.Key(key));

View File

@ -9,8 +9,10 @@ using NUnit.Framework;
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Framework.Testing; using osu.Framework.Testing;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Configuration;
using osu.Game.Extensions; using osu.Game.Extensions;
using osu.Game.Rulesets; using osu.Game.Rulesets;
using osu.Game.Rulesets.Catch;
using osu.Game.Rulesets.Mania; using osu.Game.Rulesets.Mania;
using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu;
using osu.Game.Screens.Menu; using osu.Game.Screens.Menu;
@ -71,17 +73,51 @@ namespace osu.Game.Tests.Visual.Navigation
} }
[Test] [Test]
public void TestFromSongSelectDifferentRuleset() public void TestFromSongSelectDifferentRulesetWithConvertDisallowed()
{ {
var firstImport = importBeatmap(1); AddStep("Set converts disallowed", () => Game.LocalConfig.SetValue(OsuSetting.ShowConvertedBeatmaps, false));
presentAndConfirm(firstImport);
var secondImport = importBeatmap(3, new ManiaRuleset().RulesetInfo); var osuImport = importBeatmap(1);
confirmBeatmapInSongSelect(secondImport); presentAndConfirm(osuImport);
presentAndConfirm(secondImport);
presentSecondDifficultyAndConfirm(firstImport, 1); var maniaImport = importBeatmap(2, new ManiaRuleset().RulesetInfo);
presentSecondDifficultyAndConfirm(secondImport, 3); confirmBeatmapInSongSelect(maniaImport);
presentAndConfirm(maniaImport);
var catchImport = importBeatmap(3, new CatchRuleset().RulesetInfo);
confirmBeatmapInSongSelect(catchImport);
presentAndConfirm(catchImport);
// Ruleset is always changed.
presentSecondDifficultyAndConfirm(maniaImport, 2);
presentSecondDifficultyAndConfirm(osuImport, 1);
presentSecondDifficultyAndConfirm(catchImport, 3);
}
[Test]
public void TestFromSongSelectDifferentRulesetWithConvertAllowed()
{
AddStep("Set converts allowed", () => Game.LocalConfig.SetValue(OsuSetting.ShowConvertedBeatmaps, true));
var osuImport = importBeatmap(1);
presentAndConfirm(osuImport);
var maniaImport = importBeatmap(2, new ManiaRuleset().RulesetInfo);
confirmBeatmapInSongSelect(maniaImport);
presentAndConfirm(maniaImport);
var catchImport = importBeatmap(3, new CatchRuleset().RulesetInfo);
confirmBeatmapInSongSelect(catchImport);
presentAndConfirm(catchImport);
// force ruleset to osu!mania
presentSecondDifficultyAndConfirm(maniaImport, 2);
// ruleset is not changed as we can convert osu! beatmap.
presentSecondDifficultyAndConfirm(osuImport, 1, expectedRulesetOnlineID: 3);
// ruleset is changed as we cannot convert.
presentSecondDifficultyAndConfirm(catchImport, 3);
} }
private void returnToMenu() private void returnToMenu()
@ -112,19 +148,19 @@ namespace osu.Game.Tests.Visual.Navigation
imported = Game.BeatmapManager.Import(new BeatmapSetInfo imported = Game.BeatmapManager.Import(new BeatmapSetInfo
{ {
Hash = Guid.NewGuid().ToString(), Hash = Guid.NewGuid().ToString(),
OnlineID = i, OnlineID = i * 1024,
Beatmaps = Beatmaps =
{ {
new BeatmapInfo new BeatmapInfo
{ {
OnlineID = i * 1024, OnlineID = i * 1024 + 1,
Metadata = metadata, Metadata = metadata,
Difficulty = new BeatmapDifficulty(), Difficulty = new BeatmapDifficulty(),
Ruleset = ruleset ?? new OsuRuleset().RulesetInfo Ruleset = ruleset ?? new OsuRuleset().RulesetInfo
}, },
new BeatmapInfo new BeatmapInfo
{ {
OnlineID = i * 2048, OnlineID = i * 1024 + 2,
Metadata = metadata, Metadata = metadata,
Difficulty = new BeatmapDifficulty(), Difficulty = new BeatmapDifficulty(),
Ruleset = ruleset ?? new OsuRuleset().RulesetInfo Ruleset = ruleset ?? new OsuRuleset().RulesetInfo
@ -156,14 +192,14 @@ namespace osu.Game.Tests.Visual.Navigation
AddAssert("correct ruleset selected", () => Game.Ruleset.Value, () => Is.EqualTo(getImport().Beatmaps.First().Ruleset)); AddAssert("correct ruleset selected", () => Game.Ruleset.Value, () => Is.EqualTo(getImport().Beatmaps.First().Ruleset));
} }
private void presentSecondDifficultyAndConfirm(Func<BeatmapSetInfo> getImport, int importedID) private void presentSecondDifficultyAndConfirm(Func<BeatmapSetInfo> getImport, int importedID, int? expectedRulesetOnlineID = null)
{ {
Predicate<BeatmapInfo> pred = b => b.OnlineID == importedID * 2048; Predicate<BeatmapInfo> pred = b => b.OnlineID == importedID * 1024 + 2;
AddStep("present difficulty", () => Game.PresentBeatmap(getImport(), pred)); AddStep("present difficulty", () => Game.PresentBeatmap(getImport(), pred));
AddUntilStep("wait for song select", () => Game.ScreenStack.CurrentScreen is Screens.Select.SongSelect songSelect && songSelect.IsLoaded); AddUntilStep("wait for song select", () => Game.ScreenStack.CurrentScreen is Screens.Select.SongSelect songSelect && songSelect.IsLoaded);
AddUntilStep("correct beatmap displayed", () => Game.Beatmap.Value.BeatmapInfo.OnlineID, () => Is.EqualTo(importedID * 2048)); AddUntilStep("correct beatmap displayed", () => Game.Beatmap.Value.BeatmapInfo.OnlineID, () => Is.EqualTo(importedID * 1024 + 2));
AddAssert("correct ruleset selected", () => Game.Ruleset.Value, () => Is.EqualTo(getImport().Beatmaps.First().Ruleset)); AddAssert("correct ruleset selected", () => Game.Ruleset.Value.OnlineID, () => Is.EqualTo(expectedRulesetOnlineID ?? getImport().Beatmaps.First().Ruleset.OnlineID));
} }
} }
} }

View File

@ -10,6 +10,7 @@ using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Online.Rooms; using osu.Game.Online.Rooms;
using osu.Game.Screens.OnlinePlay; using osu.Game.Screens.OnlinePlay;
using osu.Game.Screens.OnlinePlay.Playlists; using osu.Game.Screens.OnlinePlay.Playlists;
@ -148,7 +149,7 @@ namespace osu.Game.Tests.Visual.Playlists
private partial class TestRoomSettings : PlaylistsRoomSettingsOverlay private partial class TestRoomSettings : PlaylistsRoomSettingsOverlay
{ {
public TriangleButton ApplyButton => ((MatchSettings)Settings).ApplyButton; public RoundedButton ApplyButton => ((MatchSettings)Settings).ApplyButton;
public OsuTextBox NameField => ((MatchSettings)Settings).NameField; public OsuTextBox NameField => ((MatchSettings)Settings).NameField;
public OsuDropdown<TimeSpan> DurationField => ((MatchSettings)Settings).DurationField; public OsuDropdown<TimeSpan> DurationField => ((MatchSettings)Settings).DurationField;

View File

@ -10,6 +10,7 @@ using osu.Framework.Graphics.Shapes;
using osu.Framework.Utils; using osu.Framework.Utils;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osuTK; using osuTK;
using osuTK.Graphics; using osuTK.Graphics;
@ -49,8 +50,8 @@ namespace osu.Game.Tests.Visual.UserInterface
Children = new Drawable[] Children = new Drawable[]
{ {
new OsuSpriteText { Text = "Sample content" }, new OsuSpriteText { Text = "Sample content" },
new TriangleButton { Text = "can't puush me", Width = 200, }, new RoundedButton { Text = "can't puush me", Width = 200, },
new TriangleButton { Text = "puush me", Width = 200, Action = () => { } }, new RoundedButton { Text = "puush me", Width = 200, Action = () => { } },
} }
}, },
overlay = new TestLoadingLayer(true), overlay = new TestLoadingLayer(true),

View File

@ -33,7 +33,7 @@ namespace osu.Game.Tests.Visual.UserInterface
Text = @"No OverlayColourProvider", Text = @"No OverlayColourProvider",
Font = OsuFont.Default.With(size: 40) Font = OsuFont.Default.With(size: 40)
}, },
new TriangleButtonWithPopover() new RoundedButtonWithPopover()
} }
}; };
@ -50,15 +50,15 @@ namespace osu.Game.Tests.Visual.UserInterface
Text = @"With OverlayColourProvider (orange)", Text = @"With OverlayColourProvider (orange)",
Font = OsuFont.Default.With(size: 40) Font = OsuFont.Default.With(size: 40)
}, },
new TriangleButtonWithPopover() new RoundedButtonWithPopover()
} }
} }
}; };
} }
private partial class TriangleButtonWithPopover : TriangleButton, IHasPopover private partial class RoundedButtonWithPopover : RoundedButton, IHasPopover
{ {
public TriangleButtonWithPopover() public RoundedButtonWithPopover()
{ {
Width = 100; Width = 100;
Height = 30; Height = 30;

View File

@ -9,7 +9,6 @@ using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Testing; using osu.Framework.Testing;
using osu.Game.Graphics;
using osu.Game.Graphics.UserInterfaceV2; using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Overlays; using osu.Game.Overlays;
using osu.Game.Overlays.Settings; using osu.Game.Overlays.Settings;
@ -37,7 +36,7 @@ namespace osu.Game.Tests.Visual.UserInterface
}, },
new SettingsButton new SettingsButton
{ {
Text = "Test button", Text = "Test settings button",
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Enabled = { BindTarget = enabled }, Enabled = { BindTarget = enabled },
@ -56,8 +55,8 @@ namespace osu.Game.Tests.Visual.UserInterface
public void TestBackgroundColour() public void TestBackgroundColour()
{ {
AddStep("set red scheme", () => CreateThemedContent(OverlayColourScheme.Red)); AddStep("set red scheme", () => CreateThemedContent(OverlayColourScheme.Red));
AddAssert("rounded button has correct colour", () => Cell(0, 1).ChildrenOfType<RoundedButton>().First().BackgroundColour == new OsuColour().Blue3); AddAssert("rounded button has correct colour", () => Cell(0, 1).ChildrenOfType<RoundedButton>().First().BackgroundColour == new OverlayColourProvider(OverlayColourScheme.Red).Colour3);
AddAssert("settings button has correct colour", () => Cell(0, 1).ChildrenOfType<SettingsButton>().First().BackgroundColour == new OverlayColourProvider(OverlayColourScheme.Red).Highlight1); AddAssert("settings button has correct colour", () => Cell(0, 1).ChildrenOfType<SettingsButton>().First().BackgroundColour == new OverlayColourProvider(OverlayColourScheme.Red).Colour3);
} }
} }
} }

View File

@ -11,6 +11,7 @@ using osu.Framework.Screens;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Screens; using osu.Game.Screens;
using osuTK; using osuTK;
@ -109,7 +110,7 @@ namespace osu.Game.Tests.Visual.UserInterface
Origin = Anchor.TopCentre, Origin = Anchor.TopCentre,
Text = Title, Text = Title,
}, },
new TriangleButton new RoundedButton
{ {
Anchor = Anchor.TopCentre, Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre, Origin = Anchor.TopCentre,

View File

@ -61,7 +61,7 @@ namespace osu.Game.Tournament.Screens.Setup
Spacing = new Vector2(10, 0), Spacing = new Vector2(10, 0),
Children = new Drawable[] Children = new Drawable[]
{ {
Button = new TriangleButton Button = new RoundedButton
{ {
Size = new Vector2(100, 40), Size = new Vector2(100, 40),
Action = () => Action?.Invoke() Action = () => Action?.Invoke()

View File

@ -93,7 +93,7 @@ namespace osu.Game.Tournament.Screens.Setup
Spacing = new Vector2(20), Spacing = new Vector2(20),
Children = new Drawable[] Children = new Drawable[]
{ {
new TriangleButton new RoundedButton
{ {
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
@ -101,7 +101,7 @@ namespace osu.Game.Tournament.Screens.Setup
Text = "Select stable path", Text = "Select stable path",
Action = ChangePath Action = ChangePath
}, },
new TriangleButton new RoundedButton
{ {
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,

View File

@ -6,6 +6,7 @@
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Tournament.IO; using osu.Game.Tournament.IO;
namespace osu.Game.Tournament.Screens.Setup namespace osu.Game.Tournament.Screens.Setup
@ -37,7 +38,7 @@ namespace osu.Game.Tournament.Screens.Setup
{ {
var drawable = base.CreateComponent(); var drawable = base.CreateComponent();
FlowContainer.Insert(-1, folderButton = new TriangleButton FlowContainer.Insert(-1, folderButton = new RoundedButton
{ {
Text = "Open folder", Text = "Open folder",
Width = 100 Width = 100

View File

@ -172,7 +172,7 @@ namespace osu.Game.Graphics.Backgrounds
// Limited by the maximum size of QuadVertexBuffer for safety. // Limited by the maximum size of QuadVertexBuffer for safety.
const int max_triangles = ushort.MaxValue / (IRenderer.VERTICES_PER_QUAD + 2); const int max_triangles = ushort.MaxValue / (IRenderer.VERTICES_PER_QUAD + 2);
AimCount = (int)Math.Min(max_triangles, DrawWidth * DrawHeight * 0.0005f * SpawnRatio); AimCount = (int)Math.Clamp(DrawWidth * 0.02f * SpawnRatio, 1, max_triangles);
int currentCount = parts.Count; int currentCount = parts.Count;

View File

@ -4,17 +4,16 @@
#nullable disable #nullable disable
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Game.Graphics.UserInterfaceV2;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface
{ {
public partial class DangerousTriangleButton : TriangleButton public partial class DangerousRoundedButton : RoundedButton
{ {
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuColour colours) private void load(OsuColour colours)
{ {
BackgroundColour = colours.PinkDark; BackgroundColour = colours.PinkDark;
Triangles.ColourDark = colours.PinkDarker;
Triangles.ColourLight = colours.Pink;
} }
} }
} }

View File

@ -37,7 +37,7 @@ namespace osu.Game.Graphics.UserInterface
/// <summary> /// <summary>
/// Sets a custom background colour to this button, replacing the provided default. /// Sets a custom background colour to this button, replacing the provided default.
/// </summary> /// </summary>
public Color4 BackgroundColour public virtual Color4 BackgroundColour
{ {
get => backgroundColour ?? defaultBackgroundColour; get => backgroundColour ?? defaultBackgroundColour;
set set
@ -90,6 +90,7 @@ namespace osu.Game.Graphics.UserInterface
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Depth = float.MaxValue,
}, },
Hover = new Box Hover = new Box
{ {
@ -141,13 +142,15 @@ namespace osu.Game.Graphics.UserInterface
return base.OnClick(e); return base.OnClick(e);
} }
protected virtual float HoverLayerFinalAlpha => 0.1f;
protected override bool OnHover(HoverEvent e) protected override bool OnHover(HoverEvent e)
{ {
if (Enabled.Value) if (Enabled.Value)
{ {
Hover.FadeTo(0.2f, 40, Easing.OutQuint) Hover.FadeTo(0.2f, 40, Easing.OutQuint)
.Then() .Then()
.FadeTo(0.1f, 800, Easing.OutQuint); .FadeTo(HoverLayerFinalAlpha, 800, Easing.OutQuint);
} }
return base.OnHover(e); return base.OnHover(e);

View File

@ -1,42 +0,0 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
#nullable disable
using System.Collections.Generic;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Localisation;
using osu.Game.Graphics.Backgrounds;
namespace osu.Game.Graphics.UserInterface
{
/// <summary>
/// A button with moving triangles in the background.
/// </summary>
public partial class TriangleButton : OsuButton, IFilterable
{
protected Triangles Triangles { get; private set; }
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
Add(Triangles = new Triangles
{
RelativeSizeAxes = Axes.Both,
ColourDark = colours.BlueDarker,
ColourLight = colours.Blue,
});
}
public virtual IEnumerable<LocalisableString> FilterTerms => new[] { Text };
public bool MatchingFilter
{
set => this.FadeTo(value ? 1 : 0);
}
public bool FilteringActive { get; set; }
}
}

View File

@ -1,19 +1,29 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
#nullable disable
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Input.Events;
using osu.Framework.Localisation; using osu.Framework.Localisation;
using osu.Game.Graphics.Backgrounds;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays;
using osuTK.Graphics;
namespace osu.Game.Graphics.UserInterfaceV2 namespace osu.Game.Graphics.UserInterfaceV2
{ {
public partial class RoundedButton : OsuButton, IFilterable public partial class RoundedButton : OsuButton, IFilterable
{ {
protected TrianglesV2? Triangles { get; private set; }
protected override float HoverLayerFinalAlpha => 0;
private Color4? triangleGradientSecondColour;
public override float Height public override float Height
{ {
get => base.Height; get => base.Height;
@ -26,19 +36,65 @@ namespace osu.Game.Graphics.UserInterfaceV2
} }
} }
[BackgroundDependencyLoader(true)] public override Color4 BackgroundColour
private void load(OsuColour colours)
{ {
// According to flyte, buttons are supposed to have explicit colours for now. get => base.BackgroundColour;
// Not sure this is the correct direction, but we haven't decided on an `OverlayColourProvider` stand-in yet. set
// This is a better default. See `SettingsButton` for an override which uses `OverlayColourProvider`. {
DefaultBackgroundColour = colours.Blue3; base.BackgroundColour = value;
triangleGradientSecondColour = BackgroundColour.Lighten(0.2f);
updateColours();
}
}
[BackgroundDependencyLoader(true)]
private void load(OverlayColourProvider? overlayColourProvider, OsuColour colours)
{
// Many buttons have local colours, but this provides a sane default for all other cases.
DefaultBackgroundColour = overlayColourProvider?.Colour3 ?? colours.Blue3;
triangleGradientSecondColour ??= overlayColourProvider?.Colour1 ?? colours.Blue3.Lighten(0.2f);
} }
protected override void LoadComplete() protected override void LoadComplete()
{ {
base.LoadComplete(); base.LoadComplete();
updateCornerRadius(); updateCornerRadius();
Add(Triangles = new TrianglesV2
{
Thickness = 0.02f,
SpawnRatio = 0.6f,
RelativeSizeAxes = Axes.Both,
Depth = float.MaxValue,
});
updateColours();
}
private void updateColours()
{
if (Triangles == null)
return;
Debug.Assert(triangleGradientSecondColour != null);
Triangles.ColourTop = triangleGradientSecondColour.Value;
Triangles.ColourBottom = BackgroundColour;
}
protected override bool OnHover(HoverEvent e)
{
Debug.Assert(triangleGradientSecondColour != null);
Background.FadeColour(triangleGradientSecondColour.Value, 300, Easing.OutQuint);
return base.OnHover(e);
}
protected override void OnHoverLost(HoverLostEvent e)
{
Background.FadeColour(BackgroundColour, 300, Easing.OutQuint);
base.OnHoverLost(e);
} }
private void updateCornerRadius() => Content.CornerRadius = DrawHeight / 2; private void updateCornerRadius() => Content.CornerRadius = DrawHeight / 2;

View File

@ -520,11 +520,29 @@ namespace osu.Game
} }
else else
{ {
Logger.Log($"Completing {nameof(PresentBeatmap)} with beatmap {beatmap} ruleset {selection.Ruleset}"); // Don't change the local ruleset if the user is on another ruleset and is showing converted beatmaps at song select.
// Eventually we probably want to check whether conversion is actually possible for the current ruleset.
bool requiresRulesetSwitch = !selection.Ruleset.Equals(Ruleset.Value)
&& (selection.Ruleset.OnlineID > 0 || !LocalConfig.Get<bool>(OsuSetting.ShowConvertedBeatmaps));
if (requiresRulesetSwitch)
{
Ruleset.Value = selection.Ruleset; Ruleset.Value = selection.Ruleset;
Beatmap.Value = BeatmapManager.GetWorkingBeatmap(selection); Beatmap.Value = BeatmapManager.GetWorkingBeatmap(selection);
Logger.Log($"Completing {nameof(PresentBeatmap)} with beatmap {beatmap} ruleset {selection.Ruleset}");
} }
}, validScreens: new[] { typeof(SongSelect), typeof(IHandlePresentBeatmap) }); else
{
Beatmap.Value = BeatmapManager.GetWorkingBeatmap(selection);
Logger.Log($"Completing {nameof(PresentBeatmap)} with beatmap {beatmap} (maintaining ruleset)");
}
}
}, validScreens: new[]
{
typeof(SongSelect), typeof(IHandlePresentBeatmap)
});
} }
/// <summary> /// <summary>

View File

@ -1,16 +1,14 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
#nullable disable
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Extensions.Color4Extensions;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterfaceV2;
namespace osu.Game.Overlays.BeatmapSet.Buttons namespace osu.Game.Overlays.BeatmapSet.Buttons
{ {
public partial class HeaderButton : TriangleButton public partial class HeaderButton : RoundedButton
{ {
public HeaderButton() public HeaderButton()
{ {
@ -22,9 +20,6 @@ namespace osu.Game.Overlays.BeatmapSet.Buttons
private void load() private void load()
{ {
BackgroundColour = Color4Extensions.FromHex(@"094c5f"); BackgroundColour = Color4Extensions.FromHex(@"094c5f");
Triangles.ColourLight = Color4Extensions.FromHex(@"0f7c9b");
Triangles.ColourDark = Color4Extensions.FromHex(@"094c5f");
Triangles.TriangleScale = 1.5f;
} }
} }
} }

View File

@ -203,7 +203,7 @@ namespace osu.Game.Overlays.Dashboard
Anchor = Anchor.TopCentre, Anchor = Anchor.TopCentre,
Origin = Anchor.TopCentre, Origin = Anchor.TopCentre,
}, },
new PurpleTriangleButton new PurpleRoundedButton
{ {
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
Text = "Spectate", Text = "Spectate",

View File

@ -22,6 +22,7 @@ using osu.Game.Database;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Input; using osu.Game.Input;
using osu.Game.Input.Bindings; using osu.Game.Input.Bindings;
using osu.Game.Resources.Localisation.Web; using osu.Game.Resources.Localisation.Web;
@ -446,7 +447,7 @@ namespace osu.Game.Overlays.Settings.Sections.Input
isDefault.Value = bindings.Select(b => b.KeyCombination).SequenceEqual(Defaults); isDefault.Value = bindings.Select(b => b.KeyCombination).SequenceEqual(Defaults);
} }
private partial class CancelButton : TriangleButton private partial class CancelButton : RoundedButton
{ {
public CancelButton() public CancelButton()
{ {
@ -455,7 +456,7 @@ namespace osu.Game.Overlays.Settings.Sections.Input
} }
} }
public partial class ClearButton : DangerousTriangleButton public partial class ClearButton : DangerousRoundedButton
{ {
public ClearButton() public ClearButton()
{ {

View File

@ -13,7 +13,6 @@ using osuTK;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
using osu.Framework.Localisation; using osu.Framework.Localisation;
using osu.Game.Graphics.UserInterface;
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Localisation; using osu.Game.Localisation;
@ -22,7 +21,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
{ {
public abstract partial class DirectorySelectScreen : OsuScreen public abstract partial class DirectorySelectScreen : OsuScreen
{ {
private TriangleButton selectionButton; private RoundedButton selectionButton;
private OsuDirectorySelector directorySelector; private OsuDirectorySelector directorySelector;
@ -101,7 +100,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
}, },
new Drawable[] new Drawable[]
{ {
selectionButton = new TriangleButton selectionButton = new RoundedButton
{ {
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,

View File

@ -1,16 +1,11 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
#nullable disable
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using JetBrains.Annotations;
using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Cursor;
using osu.Framework.Localisation; using osu.Framework.Localisation;
using osu.Game.Graphics;
using osu.Game.Graphics.UserInterfaceV2; using osu.Game.Graphics.UserInterfaceV2;
namespace osu.Game.Overlays.Settings namespace osu.Game.Overlays.Settings
@ -23,12 +18,6 @@ namespace osu.Game.Overlays.Settings
Padding = new MarginPadding { Left = SettingsPanel.CONTENT_MARGINS, Right = SettingsPanel.CONTENT_MARGINS }; Padding = new MarginPadding { Left = SettingsPanel.CONTENT_MARGINS, Right = SettingsPanel.CONTENT_MARGINS };
} }
[BackgroundDependencyLoader(true)]
private void load([CanBeNull] OverlayColourProvider overlayColourProvider, OsuColour colours)
{
DefaultBackgroundColour = overlayColourProvider?.Highlight1 ?? colours.Blue3;
}
public LocalisableString TooltipText { get; set; } public LocalisableString TooltipText { get; set; }
public override IEnumerable<LocalisableString> FilterTerms public override IEnumerable<LocalisableString> FilterTerms

View File

@ -86,6 +86,7 @@ namespace osu.Game.Rulesets.Edit
SpriteText.Font = OsuFont.GetFont(weight: FontWeight.Bold); SpriteText.Font = OsuFont.GetFont(weight: FontWeight.Bold);
base.Height = actualHeight; base.Height = actualHeight;
Background.Show(); Background.Show();
Triangles?.Show();
} }
else else
{ {
@ -94,6 +95,7 @@ namespace osu.Game.Rulesets.Edit
SpriteText.Font = OsuFont.GetFont(weight: FontWeight.Regular); SpriteText.Font = OsuFont.GetFont(weight: FontWeight.Regular);
base.Height = actualHeight / 2; base.Height = actualHeight / 2;
Background.Hide(); Background.Hide();
Triangles?.Hide();
} }
}, true); }, true);
} }

View File

@ -499,6 +499,15 @@ namespace osu.Game.Screens.Edit
seek(e, 1); seek(e, 1);
return true; return true;
// Of those, these two keys are reversed from stable because it feels more natural (and matches mouse wheel scroll directionality).
case Key.Up:
seekControlPoint(-1);
return true;
case Key.Down:
seekControlPoint(1);
return true;
// Track traversal keys. // Track traversal keys.
// Matching osu-stable implementations. // Matching osu-stable implementations.
case Key.Z: case Key.Z:
@ -892,6 +901,16 @@ namespace osu.Game.Screens.Edit
} }
} }
private void seekControlPoint(int direction)
{
var found = direction < 1
? editorBeatmap.ControlPointInfo.AllControlPoints.LastOrDefault(p => p.Time < clock.CurrentTime)
: editorBeatmap.ControlPointInfo.AllControlPoints.FirstOrDefault(p => p.Time > clock.CurrentTime);
if (found != null)
clock.Seek(found.Time);
}
private void seek(UIEvent e, int direction) private void seek(UIEvent e, int direction)
{ {
double amount = e.ShiftPressed ? 4 : 1; double amount = e.ShiftPressed ? 4 : 1;

View File

@ -14,7 +14,6 @@ using osu.Framework.Graphics.Shapes;
using osu.Framework.Screens; using osu.Framework.Screens;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2; using osu.Game.Graphics.UserInterfaceV2;
using osuTK; using osuTK;
@ -28,7 +27,7 @@ namespace osu.Game.Screens.Import
private Container contentContainer; private Container contentContainer;
private TextFlowContainer currentFileText; private TextFlowContainer currentFileText;
private TriangleButton importButton; private RoundedButton importButton;
private const float duration = 300; private const float duration = 300;
private const float button_height = 50; private const float button_height = 50;
@ -100,7 +99,7 @@ namespace osu.Game.Screens.Import
} }
}, },
}, },
importButton = new TriangleButton importButton = new RoundedButton
{ {
Text = "Import", Text = "Import",
Anchor = Anchor.BottomCentre, Anchor = Anchor.BottomCentre,

View File

@ -9,7 +9,7 @@ using osu.Framework.Allocation;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Online.Rooms; using osu.Game.Online.Rooms;
using osu.Game.Screens.OnlinePlay.Playlists; using osu.Game.Screens.OnlinePlay.Playlists;
using osu.Game.Screens.Select; using osu.Game.Screens.Select;
@ -54,7 +54,7 @@ namespace osu.Game.Screens.OnlinePlay.Components
}, },
new Drawable[] new Drawable[]
{ {
new TriangleButton new RoundedButton
{ {
Text = "Add new playlist entry", Text = "Add new playlist entry",
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,

View File

@ -7,13 +7,13 @@ using osu.Framework.Allocation;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Cursor;
using osu.Framework.Localisation; using osu.Framework.Localisation;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Online; using osu.Game.Online;
using osu.Game.Online.Rooms; using osu.Game.Online.Rooms;
namespace osu.Game.Screens.OnlinePlay.Components namespace osu.Game.Screens.OnlinePlay.Components
{ {
public abstract partial class ReadyButton : TriangleButton, IHasTooltip public abstract partial class ReadyButton : RoundedButton, IHasTooltip
{ {
public new readonly BindableBool Enabled = new BindableBool(); public new readonly BindableBool Enabled = new BindableBool();

View File

@ -197,7 +197,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
} }
private OsuPasswordTextBox passwordTextBox; private OsuPasswordTextBox passwordTextBox;
private TriangleButton joinButton; private RoundedButton joinButton;
private OsuSpriteText errorText; private OsuSpriteText errorText;
private Sample sampleJoinFail; private Sample sampleJoinFail;
@ -226,7 +226,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
Width = 200, Width = 200,
PlaceholderText = "password", PlaceholderText = "password",
}, },
joinButton = new TriangleButton joinButton = new RoundedButton
{ {
Width = 80, Width = 80,
Text = "Join Room", Text = "Join Room",

View File

@ -10,13 +10,12 @@ using osu.Framework.Input.Events;
namespace osu.Game.Screens.OnlinePlay.Match.Components namespace osu.Game.Screens.OnlinePlay.Match.Components
{ {
public abstract partial class CreateRoomButton : PurpleTriangleButton, IKeyBindingHandler<PlatformAction> public abstract partial class CreateRoomButton : PurpleRoundedButton, IKeyBindingHandler<PlatformAction>
{ {
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load() private void load()
{ {
SpriteText.Font = SpriteText.Font.With(size: 14); SpriteText.Font = SpriteText.Font.With(size: 14);
Triangles.TriangleScale = 1.5f;
} }
public bool OnPressed(KeyBindingPressEvent<PlatformAction> e) public bool OnPressed(KeyBindingPressEvent<PlatformAction> e)

View File

@ -1,22 +1,18 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
#nullable disable
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Extensions.Color4Extensions;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterfaceV2;
namespace osu.Game.Screens.OnlinePlay.Match.Components namespace osu.Game.Screens.OnlinePlay.Match.Components
{ {
public partial class PurpleTriangleButton : TriangleButton public partial class PurpleRoundedButton : RoundedButton
{ {
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load() private void load()
{ {
BackgroundColour = Color4Extensions.FromHex(@"593790"); BackgroundColour = Color4Extensions.FromHex(@"593790");
Triangles.ColourLight = Color4Extensions.FromHex(@"7247b6");
Triangles.ColourDark = Color4Extensions.FromHex(@"593790");
} }
} }
} }

View File

@ -48,7 +48,7 @@ namespace osu.Game.Screens.OnlinePlay.Match
{ {
if (allowEdit) if (allowEdit)
{ {
ButtonsContainer.Add(editButton = new PurpleTriangleButton ButtonsContainer.Add(editButton = new PurpleRoundedButton
{ {
RelativeSizeAxes = Axes.Y, RelativeSizeAxes = Axes.Y,
Size = new Vector2(100, 1), Size = new Vector2(100, 1),

View File

@ -517,7 +517,7 @@ namespace osu.Game.Screens.OnlinePlay.Match
/// <param name="room">The room to change the settings of.</param> /// <param name="room">The room to change the settings of.</param>
protected abstract RoomSettingsOverlay CreateRoomSettingsOverlay(Room room); protected abstract RoomSettingsOverlay CreateRoomSettingsOverlay(Room room);
public partial class UserModSelectButton : PurpleTriangleButton, IKeyBindingHandler<GlobalAction> public partial class UserModSelectButton : PurpleRoundedButton, IKeyBindingHandler<GlobalAction>
{ {
public bool OnPressed(KeyBindingPressEvent<GlobalAction> e) public bool OnPressed(KeyBindingPressEvent<GlobalAction> e)
{ {

View File

@ -109,7 +109,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
foreach (var duration in available_delays) foreach (var duration in available_delays)
{ {
flow.Add(new OsuButton flow.Add(new RoundedButton
{ {
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
Text = $"Start match in {duration.Humanize()}", Text = $"Start match in {duration.Humanize()}",
@ -124,7 +124,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
if (multiplayerClient.Room?.ActiveCountdowns.Any(c => c is MatchStartCountdown) == true && multiplayerClient.IsHost) if (multiplayerClient.Room?.ActiveCountdowns.Any(c => c is MatchStartCountdown) == true && multiplayerClient.IsHost)
{ {
flow.Add(new OsuButton flow.Add(new RoundedButton
{ {
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
Text = "Stop countdown", Text = "Stop countdown",

View File

@ -16,6 +16,7 @@ using osu.Game.Graphics;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Online.Multiplayer; using osu.Game.Online.Multiplayer;
using osu.Game.Online.Rooms; using osu.Game.Online.Rooms;
using osu.Game.Overlays; using osu.Game.Overlays;
@ -64,7 +65,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
public OsuEnumDropdown<QueueMode> QueueModeDropdown = null!; public OsuEnumDropdown<QueueMode> QueueModeDropdown = null!;
public OsuTextBox PasswordTextBox = null!; public OsuTextBox PasswordTextBox = null!;
public OsuCheckbox AutoSkipCheckbox = null!; public OsuCheckbox AutoSkipCheckbox = null!;
public TriangleButton ApplyButton = null!; public RoundedButton ApplyButton = null!;
public OsuSpriteText ErrorText = null!; public OsuSpriteText ErrorText = null!;
@ -274,7 +275,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
Height = DrawableRoomPlaylistItem.HEIGHT Height = DrawableRoomPlaylistItem.HEIGHT
}, },
new PurpleTriangleButton new RoundedButton
{ {
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
Height = 40, Height = 40,
@ -460,7 +461,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
}); });
} }
public partial class CreateOrUpdateButton : TriangleButton public partial class CreateOrUpdateButton : RoundedButton
{ {
[Resolved(typeof(Room), nameof(Room.RoomID))] [Resolved(typeof(Room), nameof(Room.RoomID))]
private Bindable<long?> roomId { get; set; } = null!; private Bindable<long?> roomId { get; set; } = null!;
@ -474,9 +475,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuColour colours) private void load(OsuColour colours)
{ {
BackgroundColour = colours.Yellow; BackgroundColour = colours.YellowDark;
Triangles.ColourLight = colours.YellowLight;
Triangles.ColourDark = colours.YellowDark;
} }
} }

View File

@ -12,7 +12,6 @@ using osu.Framework.Audio.Sample;
using osu.Framework.Localisation; using osu.Framework.Localisation;
using osu.Framework.Threading; using osu.Framework.Threading;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Backgrounds;
using osu.Game.Online.Multiplayer; using osu.Game.Online.Multiplayer;
using osu.Game.Screens.OnlinePlay.Components; using osu.Game.Screens.OnlinePlay.Components;
@ -20,8 +19,6 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
{ {
public partial class MultiplayerReadyButton : ReadyButton public partial class MultiplayerReadyButton : ReadyButton
{ {
public new Triangles Triangles => base.Triangles;
[Resolved] [Resolved]
private MultiplayerClient multiplayerClient { get; set; } private MultiplayerClient multiplayerClient { get; set; }
@ -212,15 +209,11 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
void setYellow() void setYellow()
{ {
BackgroundColour = colours.YellowDark; BackgroundColour = colours.YellowDark;
Triangles.ColourDark = colours.YellowDark;
Triangles.ColourLight = colours.Yellow;
} }
void setGreen() void setGreen()
{ {
BackgroundColour = colours.Green; BackgroundColour = colours.Green;
Triangles.ColourDark = colours.Green;
Triangles.ColourLight = colours.GreenLight;
} }
} }

View File

@ -7,8 +7,7 @@ using osu.Framework.Allocation;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Graphics.UserInterface;
using osu.Game.Online.Multiplayer; using osu.Game.Online.Multiplayer;
using osuTK; using osuTK;
@ -24,11 +23,11 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
private IBindable<bool> operationInProgress; private IBindable<bool> operationInProgress;
private readonly ButtonWithTrianglesExposed button; private readonly RoundedButton button;
public MultiplayerSpectateButton() public MultiplayerSpectateButton()
{ {
InternalChild = button = new ButtonWithTrianglesExposed InternalChild = button = new RoundedButton
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Size = Vector2.One, Size = Vector2.One,
@ -67,15 +66,11 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
default: default:
button.Text = "Spectate"; button.Text = "Spectate";
button.BackgroundColour = colours.BlueDark; button.BackgroundColour = colours.BlueDark;
button.Triangles.ColourDark = colours.BlueDarker;
button.Triangles.ColourLight = colours.Blue;
break; break;
case MultiplayerUserState.Spectating: case MultiplayerUserState.Spectating:
button.Text = "Stop spectating"; button.Text = "Stop spectating";
button.BackgroundColour = colours.Gray4; button.BackgroundColour = colours.Gray4;
button.Triangles.ColourDark = colours.Gray5;
button.Triangles.ColourLight = colours.Gray6;
break; break;
} }
@ -83,10 +78,5 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Match
&& Client.Room.State != MultiplayerRoomState.Closed && Client.Room.State != MultiplayerRoomState.Closed
&& !operationInProgress.Value; && !operationInProgress.Value;
} }
private partial class ButtonWithTrianglesExposed : TriangleButton
{
public new Triangles Triangles => base.Triangles;
}
} }
} }

View File

@ -430,7 +430,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
modSettingChangeTracker?.Dispose(); modSettingChangeTracker?.Dispose();
} }
public partial class AddItemButton : PurpleTriangleButton public partial class AddItemButton : PurpleRoundedButton
{ {
} }
} }

View File

@ -38,8 +38,6 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
private void load(OsuColour colours) private void load(OsuColour colours)
{ {
BackgroundColour = colours.Green; BackgroundColour = colours.Green;
Triangles.ColourDark = colours.Green;
Triangles.ColourLight = colours.GreenLight;
} }
private bool hasRemainingAttempts = true; private bool hasRemainingAttempts = true;

View File

@ -16,6 +16,7 @@ using osu.Game.Graphics;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Online.API; using osu.Game.Online.API;
using osu.Game.Online.API.Requests.Responses; using osu.Game.Online.API.Requests.Responses;
using osu.Game.Online.Rooms; using osu.Game.Online.Rooms;
@ -58,7 +59,7 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
public OsuTextBox NameField = null!, MaxParticipantsField = null!, MaxAttemptsField = null!; public OsuTextBox NameField = null!, MaxParticipantsField = null!, MaxAttemptsField = null!;
public OsuDropdown<TimeSpan> DurationField = null!; public OsuDropdown<TimeSpan> DurationField = null!;
public RoomAvailabilityPicker AvailabilityPicker = null!; public RoomAvailabilityPicker AvailabilityPicker = null!;
public TriangleButton ApplyButton = null!; public RoundedButton ApplyButton = null!;
public bool IsLoading => loadingLayer.State.Value == Visibility.Visible; public bool IsLoading => loadingLayer.State.Value == Visibility.Visible;
@ -68,7 +69,7 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
private DrawableRoomPlaylist playlist = null!; private DrawableRoomPlaylist playlist = null!;
private OsuSpriteText playlistLength = null!; private OsuSpriteText playlistLength = null!;
private PurpleTriangleButton editPlaylistButton = null!; private PurpleRoundedButton editPlaylistButton = null!;
[Resolved] [Resolved]
private IRoomManager? manager { get; set; } private IRoomManager? manager { get; set; }
@ -222,7 +223,7 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
}, },
new Drawable[] new Drawable[]
{ {
editPlaylistButton = new PurpleTriangleButton editPlaylistButton = new PurpleRoundedButton
{ {
RelativeSizeAxes = Axes.X, RelativeSizeAxes = Axes.X,
Height = 40, Height = 40,
@ -414,7 +415,7 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
} }
} }
public partial class CreateRoomButton : TriangleButton public partial class CreateRoomButton : RoundedButton
{ {
public CreateRoomButton() public CreateRoomButton()
{ {
@ -424,9 +425,7 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(OsuColour colours) private void load(OsuColour colours)
{ {
BackgroundColour = colours.Yellow; BackgroundColour = colours.YellowDark;
Triangles.ColourLight = colours.YellowLight;
Triangles.ColourDark = colours.YellowDark;
} }
} }

View File

@ -18,7 +18,7 @@ using osu.Game.Beatmaps.Drawables.Cards;
using osu.Game.Configuration; using osu.Game.Configuration;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Online.API; using osu.Game.Online.API;
using osu.Game.Online.API.Requests; using osu.Game.Online.API.Requests;
using osu.Game.Online.API.Requests.Responses; using osu.Game.Online.API.Requests.Responses;
@ -54,7 +54,7 @@ namespace osu.Game.Screens.Play
private OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple); private OverlayColourProvider colourProvider = new OverlayColourProvider(OverlayColourScheme.Purple);
private Container beatmapPanelContainer; private Container beatmapPanelContainer;
private TriangleButton watchButton; private RoundedButton watchButton;
private SettingsCheckbox automaticDownload; private SettingsCheckbox automaticDownload;
/// <summary> /// <summary>
@ -147,7 +147,7 @@ namespace osu.Game.Screens.Play
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
}, },
watchButton = new PurpleTriangleButton watchButton = new PurpleRoundedButton
{ {
Text = "Start Watching", Text = "Start Watching",
Width = 250, Width = 250,

View File

@ -12,7 +12,7 @@ using osu.Framework.Testing;
using osu.Framework.Testing.Input; using osu.Framework.Testing.Input;
using osu.Game.Graphics.Cursor; using osu.Game.Graphics.Cursor;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Input.Bindings; using osu.Game.Input.Bindings;
using osuTK; using osuTK;
using osuTK.Graphics; using osuTK.Graphics;
@ -27,8 +27,8 @@ namespace osu.Game.Tests.Visual
protected readonly ManualInputManager InputManager; protected readonly ManualInputManager InputManager;
private readonly TriangleButton buttonTest; private readonly RoundedButton buttonTest;
private readonly TriangleButton buttonLocal; private readonly RoundedButton buttonLocal;
/// <summary> /// <summary>
/// Whether to create a nested container to handle <see cref="GlobalAction"/>s that result from local (manual) test input. /// Whether to create a nested container to handle <see cref="GlobalAction"/>s that result from local (manual) test input.
@ -110,13 +110,13 @@ namespace osu.Game.Tests.Visual
Children = new Drawable[] Children = new Drawable[]
{ {
buttonLocal = new TriangleButton buttonLocal = new RoundedButton
{ {
Text = "local", Text = "local",
Size = new Vector2(50, 30), Size = new Vector2(50, 30),
Action = returnUserInput Action = returnUserInput
}, },
buttonTest = new TriangleButton buttonTest = new RoundedButton
{ {
Text = "test", Text = "test",
Size = new Vector2(50, 30), Size = new Vector2(50, 30),