From e9dde822a1c29b5cb160965116b895c4ac3baa93 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 23 Aug 2017 19:25:40 +0900 Subject: [PATCH 1/2] Expose triangles in OsuButton for further customisation --- osu.Game/Graphics/UserInterface/OsuButton.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/OsuButton.cs b/osu.Game/Graphics/UserInterface/OsuButton.cs index 5650fc6f48..abc1b036bc 100644 --- a/osu.Game/Graphics/UserInterface/OsuButton.cs +++ b/osu.Game/Graphics/UserInterface/OsuButton.cs @@ -24,6 +24,8 @@ namespace osu.Game.Graphics.UserInterface private SampleChannel sampleClick; private SampleChannel sampleHover; + protected Triangles Triangles; + public OsuButton() { Height = 40; @@ -52,7 +54,7 @@ namespace osu.Game.Graphics.UserInterface AddRange(new Drawable[] { - new Triangles + Triangles = new Triangles { RelativeSizeAxes = Axes.Both, ColourDark = colours.BlueDarker, @@ -120,4 +122,4 @@ namespace osu.Game.Graphics.UserInterface } } } -} \ No newline at end of file +} From c99ed6fd440fa88906c13757fa9b08f381041083 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 23 Aug 2017 19:26:49 +0900 Subject: [PATCH 2/2] Add reset button Also fixes a regression causing multiple rows to be displayed for a single action --- osu.Game/Overlays/KeyBinding/KeyBindingRow.cs | 13 +++++++ .../KeyBinding/KeyBindingsSubsection.cs | 36 ++++++++++++++++--- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/osu.Game/Overlays/KeyBinding/KeyBindingRow.cs b/osu.Game/Overlays/KeyBinding/KeyBindingRow.cs index c182382d70..ee997a2185 100644 --- a/osu.Game/Overlays/KeyBinding/KeyBindingRow.cs +++ b/osu.Game/Overlays/KeyBinding/KeyBindingRow.cs @@ -109,6 +109,17 @@ namespace osu.Game.Overlays.KeyBinding buttons.Add(new KeyButton(b)); } + public void RestoreDefaults() + { + int i = 0; + foreach (var d in Defaults) + { + var button = buttons[i++]; + button.UpdateKeyCombination(d); + store.Update(button.KeyBinding); + } + } + protected override bool OnHover(InputState state) { this.FadeEdgeEffectTo(1, transition_time, Easing.OutQuint); @@ -129,6 +140,8 @@ namespace osu.Game.Overlays.KeyBinding public bool AllowMainMouseButtons; + public IEnumerable Defaults; + private bool isModifier(Key k) => k < Key.F1; protected override bool OnClick(InputState state) => true; diff --git a/osu.Game/Overlays/KeyBinding/KeyBindingsSubsection.cs b/osu.Game/Overlays/KeyBinding/KeyBindingsSubsection.cs index 38a5b1a171..bd69403831 100644 --- a/osu.Game/Overlays/KeyBinding/KeyBindingsSubsection.cs +++ b/osu.Game/Overlays/KeyBinding/KeyBindingsSubsection.cs @@ -4,10 +4,14 @@ using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; +using osu.Framework.Extensions.IEnumerableExtensions; +using osu.Framework.Graphics; +using osu.Game.Graphics.UserInterface; using osu.Game.Input; using osu.Game.Overlays.Settings; using osu.Game.Rulesets; using OpenTK; +using osu.Game.Graphics; namespace osu.Game.Overlays.KeyBinding { @@ -31,14 +35,38 @@ namespace osu.Game.Overlays.KeyBinding { var bindings = store.Query(Ruleset?.ID, variant); - foreach (var defaultBinding in Defaults) + foreach (var defaultGroup in Defaults.GroupBy(d => d.Action)) { // one row per valid action. - Add(new KeyBindingRow(defaultBinding.Action, bindings.Where(b => b.Action.Equals((int)defaultBinding.Action))) + Add(new KeyBindingRow(defaultGroup.Key, bindings.Where(b => b.Action.Equals((int)defaultGroup.Key))) { - AllowMainMouseButtons = Ruleset != null + AllowMainMouseButtons = Ruleset != null, + Defaults = defaultGroup.Select(d => d.KeyCombination) }); } + + Add(new ResetButton + { + Action = () => Children.OfType().ForEach(k => k.RestoreDefaults()) + }); } } -} \ No newline at end of file + + internal class ResetButton : OsuButton + { + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + Text = "Reset"; + RelativeSizeAxes = Axes.X; + Margin = new MarginPadding { Top = 5 }; + Height = 20; + + Content.CornerRadius = 5; + + BackgroundColour = colours.PinkDark; + Triangles.ColourDark = colours.PinkDarker; + Triangles.ColourLight = colours.Pink; + } + } +}