Skip to content

Commit c26e669

Browse files
authored
Merge pull request #34837 from smoogipoo/more-testable-footers
Add footer to `ScreenTestScene`
2 parents e621eed + 04ba5aa commit c26e669

File tree

2 files changed

+55
-55
lines changed

2 files changed

+55
-55
lines changed

osu.Game.Tests/Visual/SongSelectV2/SongSelectTestScene.cs

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
using osu.Game.Rulesets;
2323
using osu.Game.Rulesets.Mods;
2424
using osu.Game.Scoring;
25-
using osu.Game.Screens;
26-
using osu.Game.Screens.Footer;
2725
using osu.Game.Screens.Menu;
2826
using osu.Game.Screens.Select.Filter;
2927
using osu.Game.Screens.SelectV2;
@@ -43,9 +41,6 @@ public abstract partial class SongSelectTestScene : ScreenTestScene
4341
protected Screens.SelectV2.SongSelect SongSelect { get; private set; } = null!;
4442
protected BeatmapCarousel Carousel => SongSelect.ChildrenOfType<BeatmapCarousel>().Single();
4543

46-
[Cached]
47-
protected readonly ScreenFooter Footer;
48-
4944
[Cached]
5045
private readonly OsuLogo logo;
5146

@@ -72,10 +67,6 @@ protected SongSelectTestScene()
7267
{
7368
State = { Value = Visibility.Visible },
7469
},
75-
Footer = new ScreenFooter
76-
{
77-
BackButtonPressed = () => Stack.CurrentScreen.Exit(),
78-
},
7970
logo = new OsuLogo
8071
{
8172
Alpha = 0f,
@@ -111,14 +102,6 @@ private void load()
111102
Add(beatmapStore);
112103
}
113104

114-
protected override void LoadComplete()
115-
{
116-
base.LoadComplete();
117-
118-
Stack.ScreenPushed += updateFooter;
119-
Stack.ScreenExited += updateFooter;
120-
}
121-
122105
public override void SetUpSteps()
123106
{
124107
base.SetUpSteps();
@@ -207,38 +190,5 @@ protected void AddManyTestMaps(int? difficultyCountPerSet = null)
207190
}
208191

209192
protected void WaitForSuspension() => AddUntilStep("wait for not current", () => !SongSelect.AsNonNull().IsCurrentScreen());
210-
211-
private void updateFooter(IScreen? _, IScreen? newScreen)
212-
{
213-
if (newScreen is OsuScreen osuScreen && osuScreen.ShowFooter)
214-
{
215-
Footer.Show();
216-
217-
if (osuScreen.IsLoaded)
218-
updateFooterButtons();
219-
else
220-
{
221-
// ensure the current buttons are immediately disabled on screen change (so they can't be pressed).
222-
Footer.SetButtons(Array.Empty<ScreenFooterButton>());
223-
224-
osuScreen.OnLoadComplete += _ => updateFooterButtons();
225-
}
226-
227-
void updateFooterButtons()
228-
{
229-
var buttons = osuScreen.CreateFooterButtons();
230-
231-
osuScreen.LoadComponentsAgainstScreenDependencies(buttons);
232-
233-
Footer.SetButtons(buttons);
234-
Footer.Show();
235-
}
236-
}
237-
else
238-
{
239-
Footer.Hide();
240-
Footer.SetButtons(Array.Empty<ScreenFooterButton>());
241-
}
242-
}
243193
}
244194
}

osu.Game/Tests/Visual/ScreenTestScene.cs

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
using osu.Framework.Development;
88
using osu.Framework.Graphics;
99
using osu.Framework.Graphics.Containers;
10+
using osu.Framework.Graphics.Cursor;
1011
using osu.Framework.Logging;
12+
using osu.Framework.Screens;
1113
using osu.Framework.Testing;
1214
using osu.Game.Graphics;
1315
using osu.Game.Overlays;
@@ -32,7 +34,7 @@ public abstract partial class ScreenTestScene : OsuManualInputManagerTestScene,
3234
protected DialogOverlay DialogOverlay { get; private set; }
3335

3436
[Cached]
35-
private ScreenFooter footer;
37+
protected ScreenFooter Footer { get; private set; }
3638

3739
protected ScreenTestScene()
3840
{
@@ -43,17 +45,32 @@ protected ScreenTestScene()
4345
Name = nameof(ScreenTestScene),
4446
RelativeSizeAxes = Axes.Both
4547
},
46-
content = new Container { RelativeSizeAxes = Axes.Both },
48+
new PopoverContainer
49+
{
50+
RelativeSizeAxes = Axes.Both,
51+
Children = new Drawable[]
52+
{
53+
content = new Container { RelativeSizeAxes = Axes.Both },
54+
Footer = new ScreenFooter(),
55+
}
56+
},
4757
overlayContent = new Container
4858
{
4959
RelativeSizeAxes = Axes.Both,
5060
Child = DialogOverlay = new DialogOverlay()
5161
},
52-
footer = new ScreenFooter(),
5362
});
5463

55-
Stack.ScreenPushed += (_, newScreen) => Logger.Log($"{nameof(ScreenTestScene)} screen changed → {newScreen}");
56-
Stack.ScreenExited += (_, newScreen) => Logger.Log($"{nameof(ScreenTestScene)} screen changed ← {newScreen}");
64+
Stack.ScreenPushed += (oldScreen, newScreen) =>
65+
{
66+
updateFooter(oldScreen, newScreen);
67+
Logger.Log($"{nameof(ScreenTestScene)} screen changed → {newScreen}");
68+
};
69+
Stack.ScreenExited += (oldScreen, newScreen) =>
70+
{
71+
updateFooter(oldScreen, newScreen);
72+
Logger.Log($"{nameof(ScreenTestScene)} screen changed ← {newScreen}");
73+
};
5774
}
5875

5976
protected void LoadScreen(OsuScreen screen) => Stack.Push(screen);
@@ -79,6 +96,39 @@ private void addExitAllScreensStep()
7996
});
8097
}
8198

99+
private void updateFooter(IScreen? _, IScreen? newScreen)
100+
{
101+
if (newScreen is OsuScreen osuScreen && osuScreen.ShowFooter)
102+
{
103+
Footer.Show();
104+
105+
if (osuScreen.IsLoaded)
106+
updateFooterButtons();
107+
else
108+
{
109+
// ensure the current buttons are immediately disabled on screen change (so they can't be pressed).
110+
Footer.SetButtons(Array.Empty<ScreenFooterButton>());
111+
112+
osuScreen.OnLoadComplete += _ => updateFooterButtons();
113+
}
114+
115+
void updateFooterButtons()
116+
{
117+
var buttons = osuScreen.CreateFooterButtons();
118+
119+
osuScreen.LoadComponentsAgainstScreenDependencies(buttons);
120+
121+
Footer.SetButtons(buttons);
122+
Footer.Show();
123+
}
124+
}
125+
else
126+
{
127+
Footer.Hide();
128+
Footer.SetButtons(Array.Empty<ScreenFooterButton>());
129+
}
130+
}
131+
82132
#region IOverlayManager
83133

84134
IBindable<OverlayActivation> IOverlayManager.OverlayActivationMode { get; } = new Bindable<OverlayActivation>(OverlayActivation.All);

0 commit comments

Comments
 (0)