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);
+ }
}
///