From fae5dd159d63737b4574b81838875deb0b9084e4 Mon Sep 17 00:00:00 2001 From: PANDA-JSR Date: Sat, 23 May 2026 17:11:31 +0800 Subject: [PATCH] fix: center inactive toolbar buttons --- .../MainWindow_cs/MW_FloatingBarIcons.cs | 8 ++++++++ InkCanvas.Controls/ToolbarImageButton.xaml | 8 +++++++- InkCanvas.Controls/ToolbarImageButton.xaml.cs | 20 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 012dd71f..321563cb 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -4814,6 +4814,7 @@ private void AnimateFloatingBarHighlightTo(string mode) System.Windows.Controls.Canvas.SetTop(indicatorBar, nextBarTop); selectionBG.Visibility = Visibility.Visible; + targetButton.SetSelectedVisualOffset(true); _lastHighlightButton = targetButton; return; } @@ -4839,6 +4840,9 @@ private void AnimateFloatingBarHighlightTo(string mode) if (double.IsNaN(prevBarLeft)) prevBarLeft = nextBarLeft; } + if (_lastHighlightButton != null && _lastHighlightButton != targetButton) + _lastHighlightButton.SetSelectedVisualOffset(false); + targetButton.SetSelectedVisualOffset(true); _lastHighlightButton = targetButton; selectionBG.Width = nextWidth; @@ -5094,6 +5098,10 @@ private void DeferFloatingBarHighlightIfLayoutPending(string mode) private void HideAllSelectionHighlights() { + if (_lastHighlightButton != null) + { + _lastHighlightButton.SetSelectedVisualOffset(false); + } if (SelectionBGFloatingBar != null) { SelectionBGFloatingBar.Visibility = Visibility.Hidden; diff --git a/InkCanvas.Controls/ToolbarImageButton.xaml b/InkCanvas.Controls/ToolbarImageButton.xaml index b1e577a5..7f4b898b 100644 --- a/InkCanvas.Controls/ToolbarImageButton.xaml +++ b/InkCanvas.Controls/ToolbarImageButton.xaml @@ -5,12 +5,18 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf" mc:Ignorable="d"> - + diff --git a/InkCanvas.Controls/ToolbarImageButton.xaml.cs b/InkCanvas.Controls/ToolbarImageButton.xaml.cs index c2823c1c..32089645 100644 --- a/InkCanvas.Controls/ToolbarImageButton.xaml.cs +++ b/InkCanvas.Controls/ToolbarImageButton.xaml.cs @@ -1,7 +1,9 @@ +using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; +using System.Windows.Media.Animation; namespace Ink_Canvas.Controls { @@ -87,6 +89,24 @@ public double IconHeight set => ButtonImage.Height = value; } + public void SetSelectedVisualOffset(bool isSelected) + { + var transform = ButtonPanel.RenderTransform as TranslateTransform; + if (transform == null) + { + transform = new TranslateTransform(); + ButtonPanel.RenderTransform = transform; + } + + var animation = new DoubleAnimation + { + To = isSelected ? -3 : 0, + Duration = TimeSpan.FromMilliseconds(120), + EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut } + }; + transform.BeginAnimation(TranslateTransform.YProperty, animation); + } + public event MouseButtonEventHandler ButtonMouseDown; public event MouseEventHandler ButtonMouseLeave; public event MouseButtonEventHandler ButtonMouseUp;