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

Merge pull request #579 from peppy/general-fixes

Framework & VisualTests update
This commit is contained in:
Dan Balasescu 2017-04-01 15:44:13 +09:00 committed by GitHub
commit 9bd19e99ee
25 changed files with 123 additions and 132 deletions

@ -1 +1 @@
Subproject commit 415884e7e19f9062a4fac457a7ce19b566fa2ee7 Subproject commit bf6a3dc40176ee4f921012808070e014fc4a5779

View File

@ -13,10 +13,10 @@ using osu.Game.Modes.Taiko;
namespace osu.Desktop.Tests namespace osu.Desktop.Tests
{ {
[TestFixture] [TestFixture]
public class BenchmarkTest public class VisualTests
{ {
[Test] [Test]
public void TestBenchmark() public void TestVisualTests()
{ {
using (var host = new HeadlessGameHost()) using (var host = new HeadlessGameHost())
{ {
@ -25,7 +25,7 @@ namespace osu.Desktop.Tests
Ruleset.Register(new ManiaRuleset()); Ruleset.Register(new ManiaRuleset());
Ruleset.Register(new CatchRuleset()); Ruleset.Register(new CatchRuleset());
host.Run(new Benchmark()); host.Run(new AutomatedVisualTestGame());
} }
} }
} }

View File

@ -56,7 +56,7 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="BenchmarkTest.cs" /> <Compile Include="VisualTests.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\osu-framework\osu.Framework.Desktop\osu.Framework.Desktop.csproj"> <ProjectReference Include="..\osu-framework\osu.Framework.Desktop\osu.Framework.Desktop.csproj">

View File

@ -0,0 +1,20 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Testing;
using osu.Game;
namespace osu.Desktop.VisualTests
{
public class AutomatedVisualTestGame : OsuGameBase
{
protected override void LoadComplete()
{
base.LoadComplete();
// Have to construct this here, rather than in the constructor, because
// we depend on some dependencies to be loaded within OsuGameBase.load().
Add(new TestRunner(new TestBrowser()));
}
}
}

View File

@ -1,45 +0,0 @@
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
using osu.Framework.Allocation;
using osu.Framework.Testing;
using osu.Game;
namespace osu.Desktop.VisualTests
{
public class Benchmark : OsuGameBase
{
private const double time_per_test = 200;
[BackgroundDependencyLoader]
private void load()
{
Host.MaximumDrawHz = int.MaxValue;
Host.MaximumUpdateHz = int.MaxValue;
Host.MaximumInactiveHz = int.MaxValue;
}
protected override void LoadComplete()
{
base.LoadComplete();
TestBrowser f = new TestBrowser();
Add(f);
Console.WriteLine($@"{Time}: Running {f.TestCount} tests for {time_per_test}ms each...");
for (int i = 1; i < f.TestCount; i++)
{
int loadableCase = i;
Scheduler.AddDelayed(delegate
{
f.LoadTest(loadableCase);
Console.WriteLine($@"{Time}: Switching to test #{loadableCase}");
}, loadableCase * time_per_test);
}
Scheduler.AddDelayed(Host.Exit, f.TestCount * time_per_test);
}
}
}

View File

@ -27,7 +27,7 @@ namespace osu.Desktop.VisualTests
Ruleset.Register(new CatchRuleset()); Ruleset.Register(new CatchRuleset());
if (benchmark) if (benchmark)
host.Run(new Benchmark()); host.Run(new AutomatedVisualTestGame());
else else
host.Run(new VisualTestGame()); host.Run(new VisualTestGame());
} }

View File

@ -26,7 +26,7 @@ namespace osu.Desktop.VisualTests.Tests
Add(overlay); Add(overlay);
AddButton(@"Toggle", overlay.ToggleVisibility); AddStep(@"Toggle", overlay.ToggleVisibility);
} }
} }
} }

View File

@ -20,7 +20,7 @@ namespace osu.Desktop.VisualTests.Tests
Add(overlay = new DialogOverlay()); Add(overlay = new DialogOverlay());
AddButton("dialog #1", () => overlay.Push(new PopupDialog AddStep("dialog #1", () => overlay.Push(new PopupDialog
{ {
Icon = FontAwesome.fa_trash_o, Icon = FontAwesome.fa_trash_o,
HeaderText = @"Confirm deletion of", HeaderText = @"Confirm deletion of",
@ -40,7 +40,7 @@ namespace osu.Desktop.VisualTests.Tests
}, },
})); }));
AddButton("dialog #2", () => overlay.Push(new PopupDialog AddStep("dialog #2", () => overlay.Push(new PopupDialog
{ {
Icon = FontAwesome.fa_gear, Icon = FontAwesome.fa_gear,
HeaderText = @"What do you want to do with", HeaderText = @"What do you want to do with",

View File

@ -93,19 +93,28 @@ namespace osu.Desktop.VisualTests.Tests
playbackSpeed.TriggerChange(); playbackSpeed.TriggerChange();
AddButton(@"circles", () => load(HitObjectType.Circle)); AddStep(@"circles", () => load(HitObjectType.Circle));
AddButton(@"slider", () => load(HitObjectType.Slider)); AddStep(@"slider", () => load(HitObjectType.Slider));
AddButton(@"spinner", () => load(HitObjectType.Spinner)); AddStep(@"spinner", () => load(HitObjectType.Spinner));
AddToggle(@"auto", state => { auto = state; load(mode); }); AddToggleStep(@"auto", state => { auto = state; load(mode); });
ButtonsContainer.Add(new SpriteText { Text = "Playback Speed" }); Add(new Container
ButtonsContainer.Add(new BasicSliderBar<double>
{ {
Width = 150, Anchor = Anchor.TopRight,
Height = 10, Origin = Anchor.TopRight,
SelectionColor = Color4.Orange, AutoSizeAxes = Axes.Both,
Bindable = playbackSpeed Children = new Drawable[]
{
new SpriteText { Text = "Playback Speed" },
new BasicSliderBar<double>
{
Width = 150,
Height = 10,
SelectionColor = Color4.Orange,
Bindable = playbackSpeed
}
}
}); });
framedClock.ProcessFrame(); framedClock.ProcessFrame();

View File

@ -6,6 +6,7 @@ using osu.Framework.Graphics;
using OpenTK.Input; using OpenTK.Input;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using osu.Framework.Configuration; using osu.Framework.Configuration;
using osu.Framework.Graphics.Containers;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
@ -37,19 +38,30 @@ namespace osu.Desktop.VisualTests.Tests
}; };
BindableInt bindable = new BindableInt { MinValue = 0, MaxValue = 200, Default = 50 }; BindableInt bindable = new BindableInt { MinValue = 0, MaxValue = 200, Default = 50 };
bindable.ValueChanged += delegate { kc.FadeTime = bindable.Value; }; bindable.ValueChanged += delegate { kc.FadeTime = bindable.Value; };
AddButton("Add Random", () => AddStep("Add Random", () =>
{ {
Key key = (Key)((int)Key.A + RNG.Next(26)); Key key = (Key)((int)Key.A + RNG.Next(26));
kc.Add(new KeyCounterKeyboard(key)); kc.Add(new KeyCounterKeyboard(key));
}); });
ButtonsContainer.Add(new SpriteText { Text = "FadeTime" });
ButtonsContainer.Add(new TestSliderBar<int> Add(new Container
{ {
Width = 150, Anchor = Anchor.TopRight,
Height = 10, Origin = Anchor.TopRight,
SelectionColor = Color4.Orange, AutoSizeAxes = Axes.Both,
Bindable = bindable Children = new Drawable[]
{
new SpriteText { Text = "FadeTime" },
new TestSliderBar<int>
{
Width = 150,
Height = 10,
SelectionColor = Color4.Orange,
Bindable = bindable
}
}
}); });
Add(kc); Add(kc);
} }
private class TestSliderBar<T> : SliderBar<T> where T : struct private class TestSliderBar<T> : SliderBar<T> where T : struct

View File

@ -218,7 +218,7 @@ namespace osu.Desktop.VisualTests.Tests
Size = new Vector2(550f, 450f), Size = new Vector2(550f, 450f),
}); });
AddButton(@"New Scores", newScores); AddStep(@"New Scores", newScores);
newScores(); newScores();
} }
} }

View File

@ -25,11 +25,11 @@ namespace osu.Desktop.VisualTests.Tests
Anchor = Anchor.BottomCentre, Anchor = Anchor.BottomCentre,
}); });
AddButton("Toggle", modSelect.ToggleVisibility); AddStep("Toggle", modSelect.ToggleVisibility);
AddButton("osu!", () => modSelect.PlayMode.Value = PlayMode.Osu); AddStep("osu!", () => modSelect.PlayMode.Value = PlayMode.Osu);
AddButton("osu!taiko", () => modSelect.PlayMode.Value = PlayMode.Taiko); AddStep("osu!taiko", () => modSelect.PlayMode.Value = PlayMode.Taiko);
AddButton("osu!catch", () => modSelect.PlayMode.Value = PlayMode.Catch); AddStep("osu!catch", () => modSelect.PlayMode.Value = PlayMode.Catch);
AddButton("osu!mania", () => modSelect.PlayMode.Value = PlayMode.Mania); AddStep("osu!mania", () => modSelect.PlayMode.Value = PlayMode.Mania);
} }
} }
} }

View File

@ -30,7 +30,7 @@ namespace osu.Desktop.VisualTests.Tests
Anchor = Anchor.Centre Anchor = Anchor.Centre
}; };
Add(mc); Add(mc);
AddToggle(@"Show", state => mc.State = state ? Visibility.Visible : Visibility.Hidden); AddToggleStep(@"Show", state => mc.State = state ? Visibility.Visible : Visibility.Hidden);
} }
} }
} }

View File

@ -30,13 +30,13 @@ namespace osu.Desktop.VisualTests.Tests
Origin = Anchor.TopRight, Origin = Anchor.TopRight,
}); });
AddToggle(@"show", state => manager.State = state ? Visibility.Visible : Visibility.Hidden); AddToggleStep(@"show", state => manager.State = state ? Visibility.Visible : Visibility.Hidden);
AddButton(@"simple #1", sendNotification1); AddStep(@"simple #1", sendNotification1);
AddButton(@"simple #2", sendNotification2); AddStep(@"simple #2", sendNotification2);
AddButton(@"progress #1", sendProgress1); AddStep(@"progress #1", sendProgress1);
AddButton(@"progress #2", sendProgress2); AddStep(@"progress #2", sendProgress2);
AddButton(@"barrage", () => sendBarrage()); AddStep(@"barrage", () => sendBarrage());
} }
private void sendBarrage(int remaining = 100) private void sendBarrage(int remaining = 100)

View File

@ -25,8 +25,8 @@ namespace osu.Desktop.VisualTests.Tests
OnRetry = () => Logger.Log(@"Retry"), OnRetry = () => Logger.Log(@"Retry"),
OnQuit = () => Logger.Log(@"Quit") OnQuit = () => Logger.Log(@"Quit")
}); });
AddButton("Pause", pauseOverlay.Show); AddStep("Pause", pauseOverlay.Show);
AddButton("Add Retry", delegate AddStep("Add Retry", delegate
{ {
retryCount++; retryCount++;
pauseOverlay.Retries = retryCount; pauseOverlay.Retries = retryCount;

View File

@ -23,12 +23,10 @@ namespace osu.Desktop.VisualTests.Tests
public override void Reset() public override void Reset()
{ {
base.Reset(); base.Reset();
oldDb = Dependencies.Get<BeatmapDatabase>();
if (db == null) if (db == null)
{ {
storage = new TestStorage(@"TestCasePlaySongSelect"); storage = new TestStorage(@"TestCasePlaySongSelect");
db = new BeatmapDatabase(storage); db = new BeatmapDatabase(storage);
Dependencies.Cache(db, true);
var sets = new List<BeatmapSetInfo>(); var sets = new List<BeatmapSetInfo>();
@ -40,19 +38,16 @@ namespace osu.Desktop.VisualTests.Tests
Add(songSelect = new PlaySongSelect()); Add(songSelect = new PlaySongSelect());
AddButton(@"Sort by Artist", delegate { songSelect.FilterControl.Sort = SortMode.Artist; }); AddStep(@"Sort by Artist", delegate { songSelect.FilterControl.Sort = SortMode.Artist; });
AddButton(@"Sort by Title", delegate { songSelect.FilterControl.Sort = SortMode.Title; }); AddStep(@"Sort by Title", delegate { songSelect.FilterControl.Sort = SortMode.Title; });
AddButton(@"Sort by Author", delegate { songSelect.FilterControl.Sort = SortMode.Author; }); AddStep(@"Sort by Author", delegate { songSelect.FilterControl.Sort = SortMode.Author; });
AddButton(@"Sort by Difficulty", delegate { songSelect.FilterControl.Sort = SortMode.Difficulty; }); AddStep(@"Sort by Difficulty", delegate { songSelect.FilterControl.Sort = SortMode.Difficulty; });
} }
protected override void Dispose(bool isDisposing) protected override void Dispose(bool isDisposing)
{ {
if (oldDb != null) if (oldDb != null)
{
Dependencies.Cache(oldDb, true);
db = null; db = null;
}
base.Dispose(isDisposing); base.Dispose(isDisposing);
} }

View File

@ -68,7 +68,7 @@ namespace osu.Desktop.VisualTests.Tests
}; };
Add(starsLabel); Add(starsLabel);
AddButton(@"Reset all", delegate AddStep(@"Reset all", delegate
{ {
score.Current.Value = 0; score.Current.Value = 0;
comboCounter.Current.Value = 0; comboCounter.Current.Value = 0;
@ -78,7 +78,7 @@ namespace osu.Desktop.VisualTests.Tests
starsLabel.Text = stars.Count.ToString("0.00"); starsLabel.Text = stars.Count.ToString("0.00");
}); });
AddButton(@"Hit! :D", delegate AddStep(@"Hit! :D", delegate
{ {
score.Current.Value += 300 + (ulong)(300.0 * (comboCounter.Current > 0 ? comboCounter.Current - 1 : 0) / 25.0); score.Current.Value += 300 + (ulong)(300.0 * (comboCounter.Current > 0 ? comboCounter.Current - 1 : 0) / 25.0);
comboCounter.Increment(); comboCounter.Increment();
@ -86,20 +86,20 @@ namespace osu.Desktop.VisualTests.Tests
accuracyCounter.SetFraction(numerator, denominator); accuracyCounter.SetFraction(numerator, denominator);
}); });
AddButton(@"miss...", delegate AddStep(@"miss...", delegate
{ {
comboCounter.Current.Value = 0; comboCounter.Current.Value = 0;
denominator++; denominator++;
accuracyCounter.SetFraction(numerator, denominator); accuracyCounter.SetFraction(numerator, denominator);
}); });
AddButton(@"Alter stars", delegate AddStep(@"Alter stars", delegate
{ {
stars.Count = RNG.NextSingle() * (stars.StarCount + 1); stars.Count = RNG.NextSingle() * (stars.StarCount + 1);
starsLabel.Text = stars.Count.ToString("0.00"); starsLabel.Text = stars.Count.ToString("0.00");
}); });
AddButton(@"Stop counters", delegate AddStep(@"Stop counters", delegate
{ {
score.StopRolling(); score.StopRolling();
comboCounter.StopRolling(); comboCounter.StopRolling();

View File

@ -21,7 +21,7 @@ namespace osu.Desktop.VisualTests.Tests
{ {
base.Reset(); base.Reset();
AddToggle("Kiai", b => AddToggleStep("Kiai", b =>
{ {
kiai = !kiai; kiai = !kiai;
Reset(); Reset();

View File

@ -24,13 +24,13 @@ namespace osu.Desktop.VisualTests.Tests
{ {
base.Reset(); base.Reset();
AddButton("Hit!", addHitJudgement); AddStep("Hit!", addHitJudgement);
AddButton("Miss :(", addMissJudgement); AddStep("Miss :(", addMissJudgement);
AddButton("Swell", addSwell); AddStep("Swell", addSwell);
AddButton("Centre", () => addCentreHit(false)); AddStep("Centre", () => addCentreHit(false));
AddButton("Strong Centre", () => addCentreHit(true)); AddStep("Strong Centre", () => addCentreHit(true));
AddButton("Rim", () => addRimHit(false)); AddStep("Rim", () => addRimHit(false));
AddButton("Strong Rim", () => addRimHit(true)); AddStep("Strong Rim", () => addRimHit(true));
Add(new Container Add(new Container
{ {

View File

@ -184,7 +184,7 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Benchmark.cs" /> <Compile Include="AutomatedVisualTestGame.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Tests\TestCaseChatDisplay.cs" /> <Compile Include="Tests\TestCaseChatDisplay.cs" />
<Compile Include="Tests\TestCaseDrawings.cs" /> <Compile Include="Tests\TestCaseDrawings.cs" />

View File

@ -12,7 +12,7 @@ using osu.Framework.Graphics.UserInterface;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface
{ {
public class Nub : CircularContainer, IStateful<CheckBoxState> public class Nub : CircularContainer, IStateful<CheckboxState>
{ {
public const float COLLAPSED_SIZE = 20; public const float COLLAPSED_SIZE = 20;
public const float EXPANDED_SIZE = 40; public const float EXPANDED_SIZE = 40;
@ -84,9 +84,9 @@ namespace osu.Game.Graphics.UserInterface
} }
} }
private CheckBoxState state; private CheckboxState state;
public CheckBoxState State public CheckboxState State
{ {
get get
{ {
@ -98,10 +98,10 @@ namespace osu.Game.Graphics.UserInterface
switch (state) switch (state)
{ {
case CheckBoxState.Checked: case CheckboxState.Checked:
fill.FadeIn(200, EasingTypes.OutQuint); fill.FadeIn(200, EasingTypes.OutQuint);
break; break;
case CheckBoxState.Unchecked: case CheckboxState.Unchecked:
fill.FadeTo(0.01f, 200, EasingTypes.OutQuint); //todo: remove once we figure why containers aren't drawing at all times fill.FadeTo(0.01f, 200, EasingTypes.OutQuint); //todo: remove once we figure why containers aren't drawing at all times
break; break;
} }

View File

@ -16,7 +16,7 @@ using OpenTK.Graphics;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface
{ {
public class OsuCheckbox : CheckBox public class OsuCheckbox : Checkbox
{ {
private Bindable<bool> bindable; private Bindable<bool> bindable;
@ -29,9 +29,9 @@ namespace osu.Game.Graphics.UserInterface
bindable = value; bindable = value;
if (bindable != null) if (bindable != null)
{ {
bool state = State == CheckBoxState.Checked; bool state = State == CheckboxState.Checked;
if (state != bindable.Value) if (state != bindable.Value)
State = bindable.Value ? CheckBoxState.Checked : CheckBoxState.Unchecked; State = bindable.Value ? CheckboxState.Checked : CheckboxState.Unchecked;
bindable.ValueChanged += bindableValueChanged; bindable.ValueChanged += bindableValueChanged;
} }
@ -88,7 +88,7 @@ namespace osu.Game.Graphics.UserInterface
private void bindableValueChanged(object sender, EventArgs e) private void bindableValueChanged(object sender, EventArgs e)
{ {
State = bindable.Value ? CheckBoxState.Checked : CheckBoxState.Unchecked; State = bindable.Value ? CheckboxState.Checked : CheckboxState.Unchecked;
} }
protected override void Dispose(bool isDisposing) protected override void Dispose(bool isDisposing)
@ -122,7 +122,7 @@ namespace osu.Game.Graphics.UserInterface
protected override void OnChecked() protected override void OnChecked()
{ {
sampleChecked?.Play(); sampleChecked?.Play();
nub.State = CheckBoxState.Checked; nub.State = CheckboxState.Checked;
if (bindable != null) if (bindable != null)
bindable.Value = true; bindable.Value = true;
@ -131,7 +131,7 @@ namespace osu.Game.Graphics.UserInterface
protected override void OnUnchecked() protected override void OnUnchecked()
{ {
sampleUnchecked?.Play(); sampleUnchecked?.Play();
nub.State = CheckBoxState.Unchecked; nub.State = CheckboxState.Unchecked;
if (bindable != null) if (bindable != null)
bindable.Value = false; bindable.Value = false;

View File

@ -50,7 +50,7 @@ namespace osu.Game.Graphics.UserInterface
nub = new Nub nub = new Nub
{ {
Origin = Anchor.TopCentre, Origin = Anchor.TopCentre,
State = CheckBoxState.Unchecked, State = CheckboxState.Unchecked,
Expanded = true, Expanded = true,
} }
}; };
@ -94,13 +94,13 @@ namespace osu.Game.Graphics.UserInterface
protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) protected override bool OnMouseDown(InputState state, MouseDownEventArgs args)
{ {
nub.State = CheckBoxState.Checked; nub.State = CheckboxState.Checked;
return base.OnMouseDown(state, args); return base.OnMouseDown(state, args);
} }
protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) protected override bool OnMouseUp(InputState state, MouseUpEventArgs args)
{ {
nub.State = CheckBoxState.Unchecked; nub.State = CheckboxState.Unchecked;
return base.OnMouseUp(state, args); return base.OnMouseUp(state, args);
} }

View File

@ -16,15 +16,15 @@ using osu.Game.Graphics.Sprites;
namespace osu.Game.Graphics.UserInterface namespace osu.Game.Graphics.UserInterface
{ {
/// <summary> /// <summary>
/// A checkbox styled to be placed in line with an <see cref="OsuTabControl{T}"/> /// A Checkbox styled to be placed in line with an <see cref="OsuTabControl{T}"/>
/// </summary> /// </summary>
public class OsuTabControlCheckBox : CheckBox public class OsuTabControlCheckbox : Checkbox
{ {
private readonly Box box; private readonly Box box;
private readonly SpriteText text; private readonly SpriteText text;
private readonly TextAwesome icon; private readonly TextAwesome icon;
public event EventHandler<CheckBoxState> Action; public event EventHandler<CheckboxState> Action;
private Color4? accentColour; private Color4? accentColour;
public Color4 AccentColour public Color4 AccentColour
@ -34,7 +34,7 @@ namespace osu.Game.Graphics.UserInterface
{ {
accentColour = value; accentColour = value;
if (State != CheckBoxState.Checked) if (State != CheckboxState.Checked)
{ {
text.Colour = AccentColour; text.Colour = AccentColour;
icon.Colour = AccentColour; icon.Colour = AccentColour;
@ -84,7 +84,7 @@ namespace osu.Game.Graphics.UserInterface
protected override void OnHoverLost(InputState state) protected override void OnHoverLost(InputState state)
{ {
if (State == CheckBoxState.Unchecked) if (State == CheckboxState.Unchecked)
fadeOut(); fadeOut();
base.OnHoverLost(state); base.OnHoverLost(state);
@ -97,7 +97,7 @@ namespace osu.Game.Graphics.UserInterface
AccentColour = colours.Blue; AccentColour = colours.Blue;
} }
public OsuTabControlCheckBox() public OsuTabControlCheckbox()
{ {
AutoSizeAxes = Axes.Both; AutoSizeAxes = Axes.Both;

View File

@ -17,14 +17,14 @@ namespace osu.Game.Screens.Select
public class BeatmapDetailAreaTabControl : Container public class BeatmapDetailAreaTabControl : Container
{ {
public static readonly float HEIGHT = 24; public static readonly float HEIGHT = 24;
private readonly OsuTabControlCheckBox modsCheckbox; private readonly OsuTabControlCheckbox modsCheckbox;
private readonly OsuTabControl<BeatmapDetailTab> tabs; private readonly OsuTabControl<BeatmapDetailTab> tabs;
public Action<BeatmapDetailTab, bool> OnFilter; //passed the selected tab and if mods is checked public Action<BeatmapDetailTab, bool> OnFilter; //passed the selected tab and if mods is checked
private void invokeOnFilter() private void invokeOnFilter()
{ {
OnFilter?.Invoke(tabs.SelectedItem, modsCheckbox.State == CheckBoxState.Checked); OnFilter?.Invoke(tabs.SelectedItem, modsCheckbox.State == CheckboxState.Checked);
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
@ -53,7 +53,7 @@ namespace osu.Game.Screens.Select
Origin = Anchor.BottomLeft, Origin = Anchor.BottomLeft,
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
}, },
modsCheckbox = new OsuTabControlCheckBox modsCheckbox = new OsuTabControlCheckbox
{ {
Anchor = Anchor.BottomRight, Anchor = Anchor.BottomRight,
Origin = Anchor.BottomRight, Origin = Anchor.BottomRight,