// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Input.Bindings; using osu.Framework.Input.Events; using osu.Game.Configuration; using osu.Game.Input.Bindings; using osu.Game.Overlays; namespace osu.Game.Screens.Menu { public class ExitConfirmOverlay : HoldToConfirmOverlay, IKeyBindingHandler { protected override bool AllowMultipleFires => true; public void Abort() => AbortConfirm(); public ExitConfirmOverlay() : base(0.7f) { } public bool OnPressed(KeyBindingPressEvent e) { if (e.Repeat) return false; if (e.Action == GlobalAction.Back) { BeginConfirm(); return true; } return false; } public void OnReleased(KeyBindingReleaseEvent e) { if (e.Action == GlobalAction.Back) { if (!Fired) AbortConfirm(); } } } /// /// An that behaves as if the is always 0. /// /// This is useful for mobile devices using gesture navigation, where holding to confirm is not possible. public class NoHoldExitConfirmOverlay : ExitConfirmOverlay, IKeyBindingHandler { public new bool OnPressed(KeyBindingPressEvent e) { if (e.Repeat) return false; if (e.Action == GlobalAction.Back) { Progress.Value = 1; Confirm(); return true; } return false; } } }