From 91aa3380aa87fa403085ea3daba71cea283d7c4b Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sat, 21 Jan 2023 00:40:47 +0800 Subject: [PATCH] feat: add button spinner infra. --- .../Pages/ButtonSpinnerDemo.axaml | 33 ++++++++++++ .../Pages/ButtonSpinnerDemo.axaml.cs | 50 +++++++++++++++++++ demo/Semi.Avalonia.Demo/Views/MainView.axaml | 3 ++ .../Controls/ButtonSpinner.axaml | 5 ++ src/Semi.Avalonia/Controls/Controls.axaml | 1 + .../Themes/Light/ButtonSpinner.axaml | 3 ++ src/Semi.Avalonia/Themes/Light/Light.axaml | 1 + 7 files changed, 96 insertions(+) create mode 100644 demo/Semi.Avalonia.Demo/Pages/ButtonSpinnerDemo.axaml create mode 100644 demo/Semi.Avalonia.Demo/Pages/ButtonSpinnerDemo.axaml.cs create mode 100644 src/Semi.Avalonia/Controls/ButtonSpinner.axaml create mode 100644 src/Semi.Avalonia/Themes/Light/ButtonSpinner.axaml diff --git a/demo/Semi.Avalonia.Demo/Pages/ButtonSpinnerDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/ButtonSpinnerDemo.axaml new file mode 100644 index 0000000..341c66c --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Pages/ButtonSpinnerDemo.axaml @@ -0,0 +1,33 @@ + + + + + + + + + + diff --git a/demo/Semi.Avalonia.Demo/Pages/ButtonSpinnerDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/ButtonSpinnerDemo.axaml.cs new file mode 100644 index 0000000..a6e8f51 --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Pages/ButtonSpinnerDemo.axaml.cs @@ -0,0 +1,50 @@ +using System; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Semi.Avalonia.Demo.Pages; + +public partial class ButtonSpinnerDemo : UserControl +{ + public ButtonSpinnerDemo() + { + InitializeComponent(); + } + + public void OnSpin(object sender, SpinEventArgs e) + { + var spinner = (ButtonSpinner)sender; + + if (spinner.Content is TextBlock txtBox) + { + int value = Array.IndexOf(_mountains, txtBox.Text); + if (e.Direction == SpinDirection.Increase) + value++; + else + value--; + + if (value < 0) + value = _mountains.Length - 1; + else if (value >= _mountains.Length) + value = 0; + + txtBox.Text = _mountains[value]; + } + + } + + private readonly string[] _mountains = new[] + { + "Everest", + "K2 (Mount Godwin Austen)", + "Kangchenjunga", + "Lhotse", + "Makalu", + "Cho Oyu", + "Dhaulagiri", + "Manaslu", + "Nanga Parbat", + "Annapurna" + }; +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.Demo/Views/MainView.axaml b/demo/Semi.Avalonia.Demo/Views/MainView.axaml index d48b234..ab1e725 100644 --- a/demo/Semi.Avalonia.Demo/Views/MainView.axaml +++ b/demo/Semi.Avalonia.Demo/Views/MainView.axaml @@ -24,6 +24,9 @@ + + + diff --git a/src/Semi.Avalonia/Controls/ButtonSpinner.axaml b/src/Semi.Avalonia/Controls/ButtonSpinner.axaml new file mode 100644 index 0000000..55f4811 --- /dev/null +++ b/src/Semi.Avalonia/Controls/ButtonSpinner.axaml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Semi.Avalonia/Controls/Controls.axaml b/src/Semi.Avalonia/Controls/Controls.axaml index 925e022..51a08d1 100644 --- a/src/Semi.Avalonia/Controls/Controls.axaml +++ b/src/Semi.Avalonia/Controls/Controls.axaml @@ -4,6 +4,7 @@ + diff --git a/src/Semi.Avalonia/Themes/Light/ButtonSpinner.axaml b/src/Semi.Avalonia/Themes/Light/ButtonSpinner.axaml new file mode 100644 index 0000000..9017e8d --- /dev/null +++ b/src/Semi.Avalonia/Themes/Light/ButtonSpinner.axaml @@ -0,0 +1,3 @@ + + + diff --git a/src/Semi.Avalonia/Themes/Light/Light.axaml b/src/Semi.Avalonia/Themes/Light/Light.axaml index e3becb9..eb69551 100644 --- a/src/Semi.Avalonia/Themes/Light/Light.axaml +++ b/src/Semi.Avalonia/Themes/Light/Light.axaml @@ -5,6 +5,7 @@ +