From 605ede79945df03ff6efb7a50304e5d0dd09381e Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Tue, 26 May 2020 12:07:31 +0200 Subject: [PATCH 01/35] Fix invalid navigation direction for Tab. --- src/Avalonia.Input/NavigationDirection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Input/NavigationDirection.cs b/src/Avalonia.Input/NavigationDirection.cs index 34bedac141..9b9af0b0a6 100644 --- a/src/Avalonia.Input/NavigationDirection.cs +++ b/src/Avalonia.Input/NavigationDirection.cs @@ -102,7 +102,7 @@ namespace Avalonia.Input switch (key) { case Key.Tab: - return (modifiers & KeyModifiers.Shift) != 0 ? + return (modifiers & KeyModifiers.Shift) == 0 ? NavigationDirection.Next : NavigationDirection.Previous; case Key.Up: return NavigationDirection.Up; From 817476ef77401cf42980147def0aa0067f658647 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 29 May 2020 13:31:03 -0300 Subject: [PATCH 02/35] implement a pressed mixin. --- src/Avalonia.Controls/Mixins/PressedMixin.cs | 33 +++++++++++++++++ .../Mixins/PressedMixinTests.cs | 37 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/Avalonia.Controls/Mixins/PressedMixin.cs create mode 100644 tests/Avalonia.Controls.UnitTests/Mixins/PressedMixinTests.cs diff --git a/src/Avalonia.Controls/Mixins/PressedMixin.cs b/src/Avalonia.Controls/Mixins/PressedMixin.cs new file mode 100644 index 0000000000..01b0a8564f --- /dev/null +++ b/src/Avalonia.Controls/Mixins/PressedMixin.cs @@ -0,0 +1,33 @@ +using Avalonia.Interactivity; +using Avalonia.Input; + +namespace Avalonia.Controls.Mixins +{ + /// + /// Adds pressed functionality to control classes. + /// + /// Adds the ':pressed' class when the item is pressed. + /// + public static class PressedMixin + { + private static void HandlePointerPressed(TControl sender, PointerPressedEventArgs e) where TControl : Control + { + if (e.GetCurrentPoint(sender).Properties.IsLeftButtonPressed) + { + ((IPseudoClasses)sender.Classes).Set(":pressed", true); + } + } + + private static void HandlePointerReleased(TControl sender) where TControl : Control + { + ((IPseudoClasses)sender.Classes).Set(":pressed", false); + } + + public static void Attach() where TControl : Control + { + InputElement.PointerPressedEvent.AddClassHandler((x, e) => HandlePointerPressed(x, e), RoutingStrategies.Tunnel, true); + InputElement.PointerReleasedEvent.AddClassHandler((x, e) => HandlePointerReleased(x), RoutingStrategies.Tunnel, true); + InputElement.PointerCaptureLostEvent.AddClassHandler((x, e) => HandlePointerReleased(x), RoutingStrategies.Tunnel, true); + } + } +} diff --git a/tests/Avalonia.Controls.UnitTests/Mixins/PressedMixinTests.cs b/tests/Avalonia.Controls.UnitTests/Mixins/PressedMixinTests.cs new file mode 100644 index 0000000000..0ff1f40121 --- /dev/null +++ b/tests/Avalonia.Controls.UnitTests/Mixins/PressedMixinTests.cs @@ -0,0 +1,37 @@ +using Avalonia.Controls.Mixins; +using Avalonia.UnitTests; +using Xunit; + +namespace Avalonia.Controls.UnitTests.Mixins +{ + public class PressedMixinTests + { + private MouseTestHelper _mouse = new MouseTestHelper(); + + [Fact] + public void Selected_Class_Should_Not_Initially_Be_Added() + { + var target = new TestControl(); + + Assert.Empty(target.Classes); + } + + [Fact] + public void Setting_IsSelected_Should_Add_Selected_Class() + { + var target = new TestControl(); + + _mouse.Down(target); + + Assert.Equal(new[] { ":pressed" }, target.Classes); + } + + private class TestControl : Control + { + static TestControl() + { + PressedMixin.Attach(); + } + } + } +} From 852d24c713d3e00e7aea0f881a7e2065826c818b Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 29 May 2020 13:31:20 -0300 Subject: [PATCH 03/35] listbox item gets pressed mixin. --- src/Avalonia.Controls/ListBoxItem.cs | 30 +--------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/src/Avalonia.Controls/ListBoxItem.cs b/src/Avalonia.Controls/ListBoxItem.cs index 46a7ccec0b..e04c79987f 100644 --- a/src/Avalonia.Controls/ListBoxItem.cs +++ b/src/Avalonia.Controls/ListBoxItem.cs @@ -20,6 +20,7 @@ namespace Avalonia.Controls static ListBoxItem() { SelectableMixin.Attach(IsSelectedProperty); + PressedMixin.Attach(); FocusableProperty.OverrideDefaultValue(true); } @@ -31,34 +32,5 @@ namespace Avalonia.Controls get { return GetValue(IsSelectedProperty); } set { SetValue(IsSelectedProperty, value); } } - - protected override void OnPointerPressed(PointerPressedEventArgs e) - { - base.OnPointerPressed(e); - - if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed) - { - UpdatePseudoClasses(true); - } - } - - protected override void OnPointerReleased(PointerReleasedEventArgs e) - { - base.OnPointerReleased(e); - - UpdatePseudoClasses(false); - } - - protected override void OnPointerCaptureLost(PointerCaptureLostEventArgs e) - { - base.OnPointerCaptureLost(e); - - UpdatePseudoClasses(false); - } - - private void UpdatePseudoClasses(bool isPressed) - { - PseudoClasses.Set(":pressed", isPressed); - } } } From 4bd7d4d7a5b74a1ffbff289c3416bbfd86df0020 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 29 May 2020 13:42:56 -0300 Subject: [PATCH 04/35] tidy pressed mixin. --- src/Avalonia.Controls/Mixins/PressedMixin.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.Controls/Mixins/PressedMixin.cs b/src/Avalonia.Controls/Mixins/PressedMixin.cs index 01b0a8564f..4c5792b4a0 100644 --- a/src/Avalonia.Controls/Mixins/PressedMixin.cs +++ b/src/Avalonia.Controls/Mixins/PressedMixin.cs @@ -10,6 +10,17 @@ namespace Avalonia.Controls.Mixins /// public static class PressedMixin { + /// + /// Initializes a new instance of the class. + /// + /// The control type. + public static void Attach() where TControl : Control + { + InputElement.PointerPressedEvent.AddClassHandler((x, e) => HandlePointerPressed(x, e), RoutingStrategies.Tunnel); + InputElement.PointerReleasedEvent.AddClassHandler((x, e) => HandlePointerReleased(x), RoutingStrategies.Tunnel); + InputElement.PointerCaptureLostEvent.AddClassHandler((x, e) => HandlePointerReleased(x), RoutingStrategies.Tunnel); + } + private static void HandlePointerPressed(TControl sender, PointerPressedEventArgs e) where TControl : Control { if (e.GetCurrentPoint(sender).Properties.IsLeftButtonPressed) @@ -22,12 +33,5 @@ namespace Avalonia.Controls.Mixins { ((IPseudoClasses)sender.Classes).Set(":pressed", false); } - - public static void Attach() where TControl : Control - { - InputElement.PointerPressedEvent.AddClassHandler((x, e) => HandlePointerPressed(x, e), RoutingStrategies.Tunnel, true); - InputElement.PointerReleasedEvent.AddClassHandler((x, e) => HandlePointerReleased(x), RoutingStrategies.Tunnel, true); - InputElement.PointerCaptureLostEvent.AddClassHandler((x, e) => HandlePointerReleased(x), RoutingStrategies.Tunnel, true); - } } } From 0750db0df854bd00be93afcaa290e4edff9bb43a Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Fri, 29 May 2020 17:41:45 +0800 Subject: [PATCH 05/35] tryin' to port fluent radiobutton --- .../Accents/FluentBaseDark.xaml | 45 +++++- .../Accents/FluentBaseLight.xaml | 45 +++++- .../Accents/FluentControlResourcesDark.xaml | 54 +++++++ .../Accents/FluentControlResourcesLight.xaml | 54 +++++++ src/Avalonia.Themes.Fluent/RadioButton.xaml | 136 ++++++++++++------ 5 files changed, 273 insertions(+), 61 deletions(-) diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml index 292870c3cf..43abb34eb9 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml @@ -1,6 +1,4 @@ - diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml index f734e1eff8..c2897e4a65 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml @@ -1,6 +1,4 @@ - diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml index 3f9dc68383..f09569e613 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml @@ -171,5 +171,59 @@ + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml index 46b8f4422c..97497495be 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml @@ -171,5 +171,59 @@ + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia.Themes.Fluent/RadioButton.xaml b/src/Avalonia.Themes.Fluent/RadioButton.xaml index 4cdb116cdd..fa2077f222 100644 --- a/src/Avalonia.Themes.Fluent/RadioButton.xaml +++ b/src/Avalonia.Themes.Fluent/RadioButton.xaml @@ -1,60 +1,102 @@ - - - - - - - + + + + + + + + + + + + + + From dea12ed7bce0aeab077303b8ffcb56717cc304e2 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 29 May 2020 09:51:28 -0300 Subject: [PATCH 06/35] tidy radio button --- .../Accents/FluentBaseDark.xaml | 8 +++ .../Accents/FluentBaseLight.xaml | 7 +++ src/Avalonia.Themes.Fluent/RadioButton.xaml | 59 ++++++++++++++++--- 3 files changed, 66 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml index 43abb34eb9..9fe9f5389e 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml @@ -31,9 +31,11 @@ #FF1D1D1D #FF333333 + 2,2,2,2 4,4,4,4 + 1,1,1,1 1,1,1,1 @@ -59,6 +61,7 @@ 1,1,1,1 1,1,1,1 1 + #FF005A9E #FF004275 @@ -68,6 +71,7 @@ #FFA6D8FF #FF000000 + @@ -81,6 +85,7 @@ + 0 @@ -98,6 +103,7 @@ + @@ -129,6 +135,7 @@ + @@ -202,6 +209,7 @@ + diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml index c2897e4a65..87cc0d38a0 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml @@ -31,9 +31,11 @@ #FFE6E6E6 #FFCCCCCC + 2,2,2,2 4,4,4,4 + 1,1,1,1 1,1,1,1 @@ -59,6 +61,7 @@ 1,1,1,1 1,1,1,1 1 + #FF005A9E #FF004275 @@ -69,6 +72,7 @@ #FFFFFFFF + @@ -99,6 +103,7 @@ + @@ -130,6 +135,7 @@ + @@ -203,6 +209,7 @@ + diff --git a/src/Avalonia.Themes.Fluent/RadioButton.xaml b/src/Avalonia.Themes.Fluent/RadioButton.xaml index fa2077f222..f425a98864 100644 --- a/src/Avalonia.Themes.Fluent/RadioButton.xaml +++ b/src/Avalonia.Themes.Fluent/RadioButton.xaml @@ -1,4 +1,11 @@ + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + From 8abf6aae705cfa3df8065ab59782f292beac8260 Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Thu, 28 May 2020 11:39:59 +0800 Subject: [PATCH 09/35] Porting resources --- .../Accents/FluentBaseDark.xaml | 26 ++++++++- .../Accents/FluentBaseLight.xaml | 26 ++++++++- .../Accents/FluentControlResourcesDark.xaml | 55 ++++++++++++++++++- .../Accents/FluentControlResourcesLight.xaml | 55 ++++++++++++++++++- 4 files changed, 154 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml index 9fe9f5389e..d9487ea39e 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentBaseDark.xaml @@ -1,4 +1,6 @@ - diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml index 87cc0d38a0..ba765dcb74 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentBaseLight.xaml @@ -1,4 +1,6 @@ - diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml index f09569e613..70a9fcacef 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml @@ -1,6 +1,6 @@ - diff --git a/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml b/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml index 97497495be..90179184f5 100644 --- a/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml +++ b/src/Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml @@ -1,6 +1,6 @@ - From 6005d3fdbfaaa6fab47cf471faff348d72420dd4 Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Thu, 28 May 2020 12:04:45 +0800 Subject: [PATCH 10/35] WIP --- src/Avalonia.Themes.Default/Slider.xaml | 329 ++++++++++++++++++------ 1 file changed, 246 insertions(+), 83 deletions(-) diff --git a/src/Avalonia.Themes.Default/Slider.xaml b/src/Avalonia.Themes.Default/Slider.xaml index b21cbf3650..f9857be906 100644 --- a/src/Avalonia.Themes.Default/Slider.xaml +++ b/src/Avalonia.Themes.Default/Slider.xaml @@ -1,93 +1,256 @@ - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + From 703ff980949fe896284e5dbdf5e163719a6f6a31 Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Thu, 28 May 2020 12:12:26 +0800 Subject: [PATCH 11/35] swap --- src/Avalonia.Themes.Default/Slider.xaml | 331 ++++++------------------ src/Avalonia.Themes.Fluent/Slider.xaml | 329 +++++++++++++++++------ 2 files changed, 330 insertions(+), 330 deletions(-) diff --git a/src/Avalonia.Themes.Default/Slider.xaml b/src/Avalonia.Themes.Default/Slider.xaml index f9857be906..9196663dd0 100644 --- a/src/Avalonia.Themes.Default/Slider.xaml +++ b/src/Avalonia.Themes.Default/Slider.xaml @@ -1,256 +1,93 @@ - - - 0,0,0,4 - 15 - 15 - 32 - 32 - 10 - 20 - 20 - 20 - 20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + + \ No newline at end of file diff --git a/src/Avalonia.Themes.Fluent/Slider.xaml b/src/Avalonia.Themes.Fluent/Slider.xaml index b21cbf3650..f9857be906 100644 --- a/src/Avalonia.Themes.Fluent/Slider.xaml +++ b/src/Avalonia.Themes.Fluent/Slider.xaml @@ -1,93 +1,256 @@ - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + From 4c7bcc09cfa542d974230d7e45bcc6bdca74ee62 Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Thu, 28 May 2020 14:21:04 +0800 Subject: [PATCH 12/35] port visual states --- src/Avalonia.Themes.Fluent/Slider.xaml | 266 +++++++++++-------------- 1 file changed, 116 insertions(+), 150 deletions(-) diff --git a/src/Avalonia.Themes.Fluent/Slider.xaml b/src/Avalonia.Themes.Fluent/Slider.xaml index f9857be906..014095b924 100644 --- a/src/Avalonia.Themes.Fluent/Slider.xaml +++ b/src/Avalonia.Themes.Fluent/Slider.xaml @@ -1,5 +1,4 @@ - + 0,0,0,4 15 @@ -12,8 +11,7 @@ 20 20 - - + - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + - - - - - + + - + - - - - - + + - - + + - - - - - - - - - - - From c577f6a5bdc613662ee5909b689921ebcb774129 Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Thu, 28 May 2020 15:13:32 +0800 Subject: [PATCH 13/35] try making slider work --- src/Avalonia.Controls/Slider.cs | 15 +- src/Avalonia.Themes.Fluent/Slider.xaml | 207 +++++++++--------- src/Avalonia.Visuals/Media/Color.cs | 2 + .../Media/ColorToSolidColorBrushConverter.cs | 36 +++ 4 files changed, 148 insertions(+), 112 deletions(-) create mode 100644 src/Avalonia.Visuals/Media/ColorToSolidColorBrushConverter.cs diff --git a/src/Avalonia.Controls/Slider.cs b/src/Avalonia.Controls/Slider.cs index e92c8faf20..9faf77d445 100644 --- a/src/Avalonia.Controls/Slider.cs +++ b/src/Avalonia.Controls/Slider.cs @@ -94,9 +94,18 @@ namespace Avalonia.Controls _increaseButton.Click -= IncreaseClick; } - _decreaseButton = e.NameScope.Find