From 17f137af0983f858e22df8708af5dad3e27f53be Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 20 Sep 2025 11:55:50 +0800 Subject: [PATCH] fix:issue #210 --- .../MainWindow_cs/MW_FloatingBarIcons.cs | 40 ++++++++++-- Ink Canvas/MainWindow_cs/MW_Settings.cs | 62 +++++++++++++++++++ Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 36 ++++++++++- 3 files changed, 133 insertions(+), 5 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 2fbcf730..2c0c8c30 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -91,6 +91,9 @@ namespace Ink_Canvas BoardGesture.BorderBrush = new SolidColorBrush(Color.FromRgb(161, 161, 170)); BoardGestureGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.DisabledGestureIcon); BoardGestureGeometry2.Geometry = Geometry.Parse("F0 M24,24z M0,0z"); + + // 强制禁用所有双指手势功能 + ForceDisableTwoFingerGestures(); } else { @@ -1887,8 +1890,6 @@ namespace Ink_Canvas // 禁用高级橡皮擦系统 DisableAdvancedEraserSystem(); - // 修复:从橡皮擦切换到批注模式时,退出多指书写模式 - // 这解决了从橡皮擦切换为批注时被锁定为多指书写的问题 ExitMultiTouchModeIfNeeded(); SetFloatingBarHighlightPosition("pen"); @@ -1897,14 +1898,20 @@ namespace Ink_Canvas bool wasInInkMode = inkCanvas.EditingMode == InkCanvasEditingMode.Ink; bool wasHighlighter = drawingAttributes.IsHighlighter; - // 禁止几何绘制模式下切换到Ink - if (drawingShapeMode != 0) + if (drawingShapeMode != 0 && !isLongPressSelected) { return; } if (Pen_Icon.Background == null || StackPanelCanvasControls.Visibility == Visibility.Collapsed) { + if (isLongPressSelected) + { + drawingShapeMode = 0; + isLongPressSelected = false; + ResetAllShapeButtonsOpacity(); + } + // 使用集中化的工具模式切换方法 SetCurrentToolMode(InkCanvasEditingMode.Ink); @@ -3724,7 +3731,32 @@ namespace Ink_Canvas } } + /// + /// 强制禁用所有双指手势功能(当多指书写模式启用时) + /// + private void ForceDisableTwoFingerGestures() + { + // 强制关闭所有双指手势设置 + Settings.Gesture.IsEnableTwoFingerTranslate = false; + Settings.Gesture.IsEnableTwoFingerZoom = false; + Settings.Gesture.IsEnableTwoFingerRotation = false; + // 更新UI开关状态 + if (ToggleSwitchEnableTwoFingerTranslate != null) + ToggleSwitchEnableTwoFingerTranslate.IsOn = false; + if (ToggleSwitchEnableTwoFingerZoom != null) + ToggleSwitchEnableTwoFingerZoom.IsOn = false; + if (ToggleSwitchEnableTwoFingerRotation != null) + ToggleSwitchEnableTwoFingerRotation.IsOn = false; + + // 更新设置窗口中的开关状态 + if (BoardToggleSwitchEnableTwoFingerTranslate != null) + BoardToggleSwitchEnableTwoFingerTranslate.IsOn = false; + if (BoardToggleSwitchEnableTwoFingerZoom != null) + BoardToggleSwitchEnableTwoFingerZoom.IsOn = false; + if (BoardToggleSwitchEnableTwoFingerRotation != null) + BoardToggleSwitchEnableTwoFingerRotation.IsOn = false; + } #endregion diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index 0d488220..7bbf2d4d 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -1787,6 +1787,18 @@ namespace Ink_Canvas private void ToggleSwitchEnableTwoFingerZoom_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; + + // 如果多指书写模式启用,强制禁用双指手势 + if (ToggleSwitchEnableMultiTouchMode.IsOn) + { + ToggleSwitchEnableTwoFingerZoom.IsOn = false; + BoardToggleSwitchEnableTwoFingerZoom.IsOn = false; + Settings.Gesture.IsEnableTwoFingerZoom = false; + CheckEnableTwoFingerGestureBtnColorPrompt(); + SaveSettingsToFile(); + return; + } + if (sender == ToggleSwitchEnableTwoFingerZoom) BoardToggleSwitchEnableTwoFingerZoom.IsOn = ToggleSwitchEnableTwoFingerZoom.IsOn; else @@ -1866,6 +1878,32 @@ namespace Ink_Canvas } Settings.Gesture.IsEnableMultiTouchMode = ToggleSwitchEnableMultiTouchMode.IsOn; + + // 如果启用多指书写模式,强制禁用所有双指手势 + if (ToggleSwitchEnableMultiTouchMode.IsOn) + { + // 强制关闭所有双指手势设置 + Settings.Gesture.IsEnableTwoFingerTranslate = false; + Settings.Gesture.IsEnableTwoFingerZoom = false; + Settings.Gesture.IsEnableTwoFingerRotation = false; + + // 更新UI开关状态 + if (ToggleSwitchEnableTwoFingerTranslate != null) + ToggleSwitchEnableTwoFingerTranslate.IsOn = false; + if (ToggleSwitchEnableTwoFingerZoom != null) + ToggleSwitchEnableTwoFingerZoom.IsOn = false; + if (ToggleSwitchEnableTwoFingerRotation != null) + ToggleSwitchEnableTwoFingerRotation.IsOn = false; + + // 更新设置窗口中的开关状态 + if (BoardToggleSwitchEnableTwoFingerTranslate != null) + BoardToggleSwitchEnableTwoFingerTranslate.IsOn = false; + if (BoardToggleSwitchEnableTwoFingerZoom != null) + BoardToggleSwitchEnableTwoFingerZoom.IsOn = false; + if (BoardToggleSwitchEnableTwoFingerRotation != null) + BoardToggleSwitchEnableTwoFingerRotation.IsOn = false; + } + CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); } @@ -1873,6 +1911,18 @@ namespace Ink_Canvas private void ToggleSwitchEnableTwoFingerTranslate_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; + + // 如果多指书写模式启用,强制禁用双指手势 + if (ToggleSwitchEnableMultiTouchMode.IsOn) + { + ToggleSwitchEnableTwoFingerTranslate.IsOn = false; + BoardToggleSwitchEnableTwoFingerTranslate.IsOn = false; + Settings.Gesture.IsEnableTwoFingerTranslate = false; + CheckEnableTwoFingerGestureBtnColorPrompt(); + SaveSettingsToFile(); + return; + } + if (sender == ToggleSwitchEnableTwoFingerTranslate) BoardToggleSwitchEnableTwoFingerTranslate.IsOn = ToggleSwitchEnableTwoFingerTranslate.IsOn; else @@ -1886,6 +1936,17 @@ namespace Ink_Canvas { if (!isLoaded) return; + // 如果多指书写模式启用,强制禁用双指手势 + if (ToggleSwitchEnableMultiTouchMode.IsOn) + { + ToggleSwitchEnableTwoFingerRotation.IsOn = false; + BoardToggleSwitchEnableTwoFingerRotation.IsOn = false; + Settings.Gesture.IsEnableTwoFingerRotation = false; + CheckEnableTwoFingerGestureBtnColorPrompt(); + SaveSettingsToFile(); + return; + } + if (sender == ToggleSwitchEnableTwoFingerRotation) BoardToggleSwitchEnableTwoFingerRotation.IsOn = ToggleSwitchEnableTwoFingerRotation.IsOn; else @@ -1904,6 +1965,7 @@ namespace Ink_Canvas SaveSettingsToFile(); } + #endregion #region Reset diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs index 357afd2a..f3b0c256 100644 --- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs +++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs @@ -151,10 +151,12 @@ namespace Ink_Canvas } inkCanvas.EditingMode = InkCanvasEditingMode.Ink; - // 修复:确保从橡皮擦切换到笔时,多指手势功能能正确恢复 + // 更新lastInkCanvasEditingMode以确保多指手势逻辑正确 lastInkCanvasEditingMode = InkCanvasEditingMode.Ink; + ResetAllShapeButtonsOpacity(); + SetCursorBasedOnEditingMode(inkCanvas); } @@ -1987,6 +1989,38 @@ namespace Ink_Canvas drawingShapeMode = mode; inkCanvas.EditingMode = InkCanvasEditingMode.None; SetCursorBasedOnEditingMode(inkCanvas); + ResetAllShapeButtonsOpacity(); + } + + /// + /// 重置所有几何绘制按钮的透明度状态 + /// + private void ResetAllShapeButtonsOpacity() + { + try + { + // 重置所有几何绘制按钮的透明度为1(完全不透明) + var buttons = new UIElement[] { + ImageDrawLine, BoardImageDrawLine, + ImageDrawDashedLine, BoardImageDrawDashedLine, + ImageDrawDotLine, BoardImageDrawDotLine, + ImageDrawArrow, BoardImageDrawArrow, + ImageDrawParallelLine, BoardImageDrawParallelLine, + }; + + foreach (var button in buttons) + { + if (button != null) + { + var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0))); + button.BeginAnimation(OpacityProperty, dA); + } + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"重置几何绘制按钮透明度失败: {ex.Message}", LogHelper.LogType.Error); + } } ///