From a9265026f5dba7c2536945076b9a4618528d3df0 Mon Sep 17 00:00:00 2001 From: Diederik Krols Date: Tue, 11 Jan 2022 19:51:08 +0100 Subject: [PATCH 1/4] Update RadialGauge to use KeyboardAccelerators Replace KeyDown event handling by KeyboardAccelerators. This does not change the behavior. It improves performance by not reacting to just any key stroke. I also removes the call to CoreWindow.GetKeyState - an API that doesn't exist in WinUI 3. --- .../RadialGauge/RadialGauge.cs | 105 +++++++++++++----- 1 file changed, 79 insertions(+), 26 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs b/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs index b32faaa77e9..dc7bfc5ec0c 100644 --- a/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs +++ b/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs @@ -193,34 +193,10 @@ private void ThemeListener_ThemeChanged(ThemeListener sender) OnColorsChanged(); } - private void RadialGauge_KeyDown(object sender, KeyRoutedEventArgs e) - { - double step = SmallChange; - var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control); - if (ctrl.HasFlag(CoreVirtualKeyStates.Down)) - { - step = LargeChange; - } - - step = Math.Max(StepSize, step); - if ((e.Key == VirtualKey.Left) || (e.Key == VirtualKey.Down)) - { - Value = Math.Max(Minimum, Value - step); - e.Handled = true; - return; - } - - if ((e.Key == VirtualKey.Right) || (e.Key == VirtualKey.Up)) - { - Value = Math.Min(Maximum, Value + step); - e.Handled = true; - } - } - private void RadialGauge_Unloaded(object sender, RoutedEventArgs e) { // Unregister event handlers. - KeyDown -= RadialGauge_KeyDown; + KeyboardAccelerators.Clear(); ThemeListener.ThemeChanged -= ThemeListener_ThemeChanged; PointerReleased -= RadialGauge_PointerReleased; Unloaded -= RadialGauge_Unloaded; @@ -440,9 +416,73 @@ protected override void OnApplyTemplate() _foreground = ReadLocalValue(ForegroundProperty) as SolidColorBrush; // Register event handlers. + AddKeyboardAccelerator( + VirtualKeyModifiers.Control, + VirtualKey.Left, + (ka, kaea) => + { + Value = Math.Max(Minimum, Value - LargeChange); + kaea.Handled = true; + }); + AddKeyboardAccelerator( + VirtualKeyModifiers.None, + VirtualKey.Left, + (ka, kaea) => + { + Value = Math.Max(Minimum, Value - SmallChange); + kaea.Handled = true; + }); + AddKeyboardAccelerator( + VirtualKeyModifiers.Control, + VirtualKey.Down, + (ka, kaea) => + { + Value = Math.Max(Minimum, Value - LargeChange); + kaea.Handled = true; + }); + + AddKeyboardAccelerator( + VirtualKeyModifiers.None, + VirtualKey.Down, + (ka, kaea) => + { + Value = Math.Max(Minimum, Value - SmallChange); + kaea.Handled = true; + }); + AddKeyboardAccelerator( + VirtualKeyModifiers.Control, + VirtualKey.Right, + (ka, kaea) => + { + Value = Math.Min(Maximum, Value + LargeChange); + kaea.Handled = true; + }); + AddKeyboardAccelerator( + VirtualKeyModifiers.None, + VirtualKey.Right, + (ka, kaea) => + { + Value = Math.Min(Maximum, Value + SmallChange); + kaea.Handled = true; + }); + AddKeyboardAccelerator( + VirtualKeyModifiers.Control, + VirtualKey.Up, + (ka, kaea) => + { + Value = Math.Min(Maximum, Value + LargeChange); + kaea.Handled = true; + }); + AddKeyboardAccelerator( + VirtualKeyModifiers.None, + VirtualKey.Up, + (ka, kaea) => + { + Value = Math.Min(Maximum, Value + SmallChange); + kaea.Handled = true; + }); PointerReleased += RadialGauge_PointerReleased; ThemeListener.ThemeChanged += ThemeListener_ThemeChanged; - KeyDown += RadialGauge_KeyDown; // Apply color scheme. OnColorsChanged(); @@ -830,5 +870,18 @@ private double RoundToMultiple(double number, double multiple) return number + modulo; } + + private void AddKeyboardAccelerator(VirtualKeyModifiers keyModifiers, + VirtualKey key, + TypedEventHandler handler) + { + var accelerator = new KeyboardAccelerator() + { + Modifiers = keyModifiers, + Key = key + }; + accelerator.Invoked += handler; + KeyboardAccelerators.Add(accelerator); + } } } From d66478afae67961bbe85fa565dbec8d0dbd2cb50 Mon Sep 17 00:00:00 2001 From: Diederik Krols Date: Sun, 16 Jan 2022 14:33:22 +0100 Subject: [PATCH 2/4] Update RadialGauge.cs Fixed StyleCop issues --- .../RadialGauge/RadialGauge.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs b/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs index dc7bfc5ec0c..209867bc1bd 100644 --- a/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs +++ b/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs @@ -870,10 +870,11 @@ private double RoundToMultiple(double number, double multiple) return number + modulo; } - - private void AddKeyboardAccelerator(VirtualKeyModifiers keyModifiers, - VirtualKey key, - TypedEventHandler handler) + + private void AddKeyboardAccelerator( + VirtualKeyModifiers keyModifiers, + VirtualKey key, + TypedEventHandler handler) { var accelerator = new KeyboardAccelerator() { From edb4d14401b30a65c3964c025e5697832ee2555b Mon Sep 17 00:00:00 2001 From: Arlo Godfrey Date: Fri, 7 Oct 2022 16:24:09 -0500 Subject: [PATCH 3/4] Formatted code, fixed remaining regressions --- .../RadialGauge/RadialGauge.cs | 116 ++++++++---------- 1 file changed, 50 insertions(+), 66 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs b/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs index 209867bc1bd..48da911d05b 100644 --- a/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs +++ b/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs @@ -415,72 +415,56 @@ protected override void OnApplyTemplate() _tickBrush = ReadLocalValue(TickBrushProperty) as SolidColorBrush; _foreground = ReadLocalValue(ForegroundProperty) as SolidColorBrush; - // Register event handlers. - AddKeyboardAccelerator( - VirtualKeyModifiers.Control, - VirtualKey.Left, - (ka, kaea) => - { - Value = Math.Max(Minimum, Value - LargeChange); - kaea.Handled = true; - }); - AddKeyboardAccelerator( - VirtualKeyModifiers.None, - VirtualKey.Left, - (ka, kaea) => - { - Value = Math.Max(Minimum, Value - SmallChange); - kaea.Handled = true; - }); - AddKeyboardAccelerator( - VirtualKeyModifiers.Control, - VirtualKey.Down, - (ka, kaea) => - { - Value = Math.Max(Minimum, Value - LargeChange); - kaea.Handled = true; - }); - - AddKeyboardAccelerator( - VirtualKeyModifiers.None, - VirtualKey.Down, - (ka, kaea) => - { - Value = Math.Max(Minimum, Value - SmallChange); - kaea.Handled = true; - }); - AddKeyboardAccelerator( - VirtualKeyModifiers.Control, - VirtualKey.Right, - (ka, kaea) => - { - Value = Math.Min(Maximum, Value + LargeChange); - kaea.Handled = true; - }); - AddKeyboardAccelerator( - VirtualKeyModifiers.None, - VirtualKey.Right, - (ka, kaea) => - { - Value = Math.Min(Maximum, Value + SmallChange); - kaea.Handled = true; - }); - AddKeyboardAccelerator( - VirtualKeyModifiers.Control, - VirtualKey.Up, - (ka, kaea) => - { - Value = Math.Min(Maximum, Value + LargeChange); - kaea.Handled = true; - }); - AddKeyboardAccelerator( - VirtualKeyModifiers.None, - VirtualKey.Up, - (ka, kaea) => - { - Value = Math.Min(Maximum, Value + SmallChange); - kaea.Handled = true; - }); + // Small step + AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Left, (_, kaea) => + { + Value = Math.Max(Minimum, Value - Math.Max(StepSize, SmallChange)); + kaea.Handled = true; + }); + + AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Up, (_, kaea) => + { + Value = Math.Min(Maximum, Value + Math.Max(StepSize, SmallChange)); + kaea.Handled = true; + }); + + AddKeyboardAccelerator(VirtualKeyModifiers.None,VirtualKey.Right, (_, kaea) => + { + Value = Math.Min(Maximum, Value + Math.Max(StepSize, SmallChange)); + kaea.Handled = true; + }); + + AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Down, (_, kaea) => + { + Value = Math.Max(Minimum, Value - Math.Max(StepSize, SmallChange)); + kaea.Handled = true; + }); + + // Large step + AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Left, (_, kaea) => + { + Value = Math.Max(Minimum, Value - Math.Max(StepSize, LargeChange)); + kaea.Handled = true; + }); + + AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Up, (_, kaea) => + { + Value = Math.Min(Maximum, Value + Math.Max(StepSize, LargeChange)); + kaea.Handled = true; + }); + + AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Right, (_, kaea) => + { + Value = Math.Min(Maximum, Value + Math.Max(StepSize, LargeChange)); + kaea.Handled = true; + }); + + AddKeyboardAccelerator(VirtualKeyModifiers.Control, VirtualKey.Down, (_, kaea) => + { + Value = Math.Max(Minimum, Value - Math.Max(StepSize, LargeChange)); + kaea.Handled = true; + }); + PointerReleased += RadialGauge_PointerReleased; ThemeListener.ThemeChanged += ThemeListener_ThemeChanged; From de155286616c4de6d830ef5385ecb06ef05247aa Mon Sep 17 00:00:00 2001 From: Arlo Date: Mon, 10 Oct 2022 15:32:57 -0500 Subject: [PATCH 4/4] Update Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs --- .../RadialGauge/RadialGauge.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs b/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs index 48da911d05b..c807f042a02 100644 --- a/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs +++ b/Microsoft.Toolkit.Uwp.UI.Controls.Input/RadialGauge/RadialGauge.cs @@ -428,7 +428,7 @@ protected override void OnApplyTemplate() kaea.Handled = true; }); - AddKeyboardAccelerator(VirtualKeyModifiers.None,VirtualKey.Right, (_, kaea) => + AddKeyboardAccelerator(VirtualKeyModifiers.None, VirtualKey.Right, (_, kaea) => { Value = Math.Min(Maximum, Value + Math.Max(StepSize, SmallChange)); kaea.Handled = true;