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:
commit
9bd19e99ee
@ -1 +1 @@
|
|||||||
Subproject commit 415884e7e19f9062a4fac457a7ce19b566fa2ee7
|
Subproject commit bf6a3dc40176ee4f921012808070e014fc4a5779
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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">
|
||||||
|
20
osu.Desktop.VisualTests/AutomatedVisualTestGame.cs
Normal file
20
osu.Desktop.VisualTests/AutomatedVisualTestGame.cs
Normal 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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
|
|
||||||
Add(overlay);
|
Add(overlay);
|
||||||
|
|
||||||
AddButton(@"Toggle", overlay.ToggleVisibility);
|
AddStep(@"Toggle", overlay.ToggleVisibility);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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",
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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" />
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user