diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs
index 35684849a3..8cc7721827 100644
--- a/osu.Game/OsuGame.cs
+++ b/osu.Game/OsuGame.cs
@@ -29,6 +29,7 @@ using osu.Framework.Threading;
using osu.Game.Beatmaps;
using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
+using osu.Game.Graphics.UserInterface;
using osu.Game.Input;
using osu.Game.Overlays.Notifications;
using osu.Game.Screens.Play;
@@ -82,6 +83,7 @@ namespace osu.Game
private OsuScreenStack screenStack;
private VolumeOverlay volume;
private OsuLogo osuLogo;
+ private BackButton backButton;
private MainMenu menuScreen;
private Intro introScreen;
@@ -402,6 +404,13 @@ namespace osu.Game
logoContainer = new Container { RelativeSizeAxes = Axes.Both },
}
},
+ backButton = new BackButton
+ {
+ Anchor = Anchor.BottomLeft,
+ Origin = Anchor.BottomLeft,
+ Alpha = 0,
+ Action = screenStack.Exit
+ },
overlayContent = new Container { RelativeSizeAxes = Axes.Both },
rightFloatingOverlayContent = new Container { RelativeSizeAxes = Axes.Both },
leftFloatingOverlayContent = new Container { RelativeSizeAxes = Axes.Both },
@@ -795,6 +804,8 @@ namespace osu.Game
CloseAllOverlays();
else
Toolbar.Show();
+
+ backButton.Alpha = newOsuScreen.ShowBackButton ? 1 : 0;
}
}
diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs
index de0f3870c6..660c1235d1 100644
--- a/osu.Game/Screens/Edit/Editor.cs
+++ b/osu.Game/Screens/Edit/Editor.cs
@@ -32,6 +32,8 @@ namespace osu.Game.Screens.Edit
{
protected override BackgroundScreen CreateBackground() => new BackgroundScreenCustom(@"Backgrounds/bg4");
+ public override bool AllowBackButton => false;
+
public override bool HideOverlaysOnEnter => true;
public override bool DisallowExternalBeatmapRulesetChanges => true;
diff --git a/osu.Game/Screens/IOsuScreen.cs b/osu.Game/Screens/IOsuScreen.cs
index b25bcdeab1..bc987e6126 100644
--- a/osu.Game/Screens/IOsuScreen.cs
+++ b/osu.Game/Screens/IOsuScreen.cs
@@ -17,6 +17,16 @@ namespace osu.Game.Screens
///
bool DisallowExternalBeatmapRulesetChanges { get; }
+ ///
+ /// Whether a visual display for the back button should be shown.
+ ///
+ bool ShowBackButton { get; }
+
+ ///
+ /// Whether the user can exit this this by pressing the back button.
+ ///
+ bool AllowBackButton { get; }
+
///
/// Whether a top-level component should be allowed to exit the current screen to, for example,
/// complete an import. Note that this can be overridden by a user if they specifically request.
diff --git a/osu.Game/Screens/Loader.cs b/osu.Game/Screens/Loader.cs
index fbe4b6311e..e4956bc8ab 100644
--- a/osu.Game/Screens/Loader.cs
+++ b/osu.Game/Screens/Loader.cs
@@ -23,7 +23,7 @@ namespace osu.Game.Screens
public override bool CursorVisible => false;
- protected override bool AllowBackButton => false;
+ public override bool AllowBackButton => false;
public Loader()
{
diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs
index 88537322ad..eec92e3080 100644
--- a/osu.Game/Screens/Menu/Intro.cs
+++ b/osu.Game/Screens/Menu/Intro.cs
@@ -32,6 +32,8 @@ namespace osu.Game.Screens.Menu
private SampleChannel welcome;
private SampleChannel seeya;
+ public override bool AllowBackButton => false;
+
public override bool HideOverlaysOnEnter => true;
public override OverlayActivation InitialOverlayActivationMode => OverlayActivation.Disabled;
diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs
index 65db2973de..7c2c5b5739 100644
--- a/osu.Game/Screens/Menu/MainMenu.cs
+++ b/osu.Game/Screens/Menu/MainMenu.cs
@@ -27,7 +27,9 @@ namespace osu.Game.Screens.Menu
public override bool HideOverlaysOnEnter => buttons == null || buttons.State == ButtonSystemState.Initial;
- protected override bool AllowBackButton => buttons.State != ButtonSystemState.Initial && host.CanExit;
+ public override bool ShowBackButton => false;
+
+ public override bool AllowBackButton => buttons.State != ButtonSystemState.Initial && host.CanExit;
public override bool AllowExternalScreenChange => true;
diff --git a/osu.Game/Screens/OsuScreen.cs b/osu.Game/Screens/OsuScreen.cs
index e2aeb41de1..8e40c72ac6 100644
--- a/osu.Game/Screens/OsuScreen.cs
+++ b/osu.Game/Screens/OsuScreen.cs
@@ -36,7 +36,9 @@ namespace osu.Game.Screens
public string Description => Title;
- protected virtual bool AllowBackButton => true;
+ public virtual bool ShowBackButton => AllowBackButton;
+
+ public virtual bool AllowBackButton => true;
public virtual bool AllowExternalScreenChange => false;
diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs
index c3a9ffdaba..8c2c653c5b 100644
--- a/osu.Game/Screens/Play/Player.cs
+++ b/osu.Game/Screens/Play/Player.cs
@@ -33,7 +33,7 @@ namespace osu.Game.Screens.Play
{
public class Player : ScreenWithBeatmapBackground
{
- protected override bool AllowBackButton => false; // handled by HoldForMenuButton
+ public override bool AllowBackButton => false; // handled by HoldForMenuButton
protected override UserActivity InitialActivity => new UserActivity.SoloGame(Beatmap.Value.BeatmapInfo, Ruleset.Value);
diff --git a/osu.Game/Screens/Ranking/Results.cs b/osu.Game/Screens/Ranking/Results.cs
index 370c856d1d..f53fb75e1a 100644
--- a/osu.Game/Screens/Ranking/Results.cs
+++ b/osu.Game/Screens/Ranking/Results.cs
@@ -16,7 +16,6 @@ using osu.Game.Screens.Backgrounds;
using osuTK;
using osuTK.Graphics;
using osu.Game.Graphics;
-using osu.Game.Graphics.UserInterface;
using osu.Framework.Graphics.Shapes;
using osu.Game.Graphics.Sprites;
using osu.Game.Scoring;
@@ -254,13 +253,7 @@ namespace osu.Game.Screens.Ranking
}
}
}
- },
- new BackButton
- {
- Anchor = Anchor.BottomLeft,
- Origin = Anchor.BottomLeft,
- Action = this.Exit
- },
+ }
};
foreach (var t in CreateResultPages())
diff --git a/osu.Game/Screens/ScreenWhiteBox.cs b/osu.Game/Screens/ScreenWhiteBox.cs
index d6766c2b49..5648dd997b 100644
--- a/osu.Game/Screens/ScreenWhiteBox.cs
+++ b/osu.Game/Screens/ScreenWhiteBox.cs
@@ -20,8 +20,6 @@ namespace osu.Game.Screens
{
public class ScreenWhiteBox : OsuScreen
{
- private readonly BackButton popButton;
-
private const double transition_time = 1000;
protected virtual IEnumerable PossibleChildren => null;
@@ -35,10 +33,6 @@ namespace osu.Game.Screens
{
base.OnEntering(last);
- //only show the pop button if we are entered form another screen.
- if (last != null)
- popButton.Alpha = 1;
-
Alpha = 0;
textContainer.Position = new Vector2(DrawSize.X / 16, 0);
@@ -144,13 +138,6 @@ namespace osu.Game.Screens
},
}
},
- popButton = new BackButton
- {
- Anchor = Anchor.BottomLeft,
- Origin = Anchor.BottomLeft,
- Alpha = 0,
- Action = this.Exit
- },
childModeButtons = new FillFlowContainer
{
Direction = FillDirection.Vertical,
diff --git a/osu.Game/Screens/Select/Footer.cs b/osu.Game/Screens/Select/Footer.cs
index 6ba29751b0..0680711f1c 100644
--- a/osu.Game/Screens/Select/Footer.cs
+++ b/osu.Game/Screens/Select/Footer.cs
@@ -1,7 +1,6 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using System;
using System.Collections.Generic;
using System.Linq;
using osuTK;
@@ -25,8 +24,6 @@ namespace osu.Game.Screens.Select
private const float padding = 80;
- public Action OnBack;
-
private readonly FillFlowContainer buttons;
private readonly List overlays = new List();
@@ -83,12 +80,6 @@ namespace osu.Game.Screens.Select
Height = 3,
Position = new Vector2(0, -3),
},
- new BackButton
- {
- Anchor = Anchor.BottomLeft,
- Origin = Anchor.BottomLeft,
- Action = () => OnBack?.Invoke()
- },
new FillFlowContainer
{
Anchor = Anchor.BottomLeft,
diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs
index f9df8c3a39..c9cc5233aa 100644
--- a/osu.Game/Screens/Select/SongSelect.cs
+++ b/osu.Game/Screens/Select/SongSelect.cs
@@ -186,31 +186,27 @@ namespace osu.Game.Screens.Select
if (ShowFooter)
{
- AddInternal(FooterPanels = new Container
+ AddRangeInternal(new[]
{
- Anchor = Anchor.BottomLeft,
- Origin = Anchor.BottomLeft,
- RelativeSizeAxes = Axes.X,
- AutoSizeAxes = Axes.Y,
- Margin = new MarginPadding
- {
- Bottom = Footer.HEIGHT,
- },
- });
- AddInternal(Footer = new Footer
- {
- OnBack = ExitFromBack,
- });
-
- FooterPanels.AddRange(new Drawable[]
- {
- BeatmapOptions = new BeatmapOptionsOverlay(),
- ModSelect = new ModSelectOverlay
+ FooterPanels = new Container
{
+ Anchor = Anchor.BottomLeft,
+ Origin = Anchor.BottomLeft,
RelativeSizeAxes = Axes.X,
- Origin = Anchor.BottomCentre,
- Anchor = Anchor.BottomCentre,
- }
+ AutoSizeAxes = Axes.Y,
+ Margin = new MarginPadding { Bottom = Footer.HEIGHT },
+ Children = new Drawable[]
+ {
+ BeatmapOptions = new BeatmapOptionsOverlay(),
+ ModSelect = new ModSelectOverlay
+ {
+ RelativeSizeAxes = Axes.X,
+ Origin = Anchor.BottomCentre,
+ Anchor = Anchor.BottomCentre,
+ }
+ }
+ },
+ Footer = new Footer()
});
}