From 6a8cdd0155450a127567ff4d30efad46096ccc86 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Tue, 29 Jul 2025 19:07:59 +0800 Subject: [PATCH] fix:issue #118 --- .../MainWindow_cs/MW_FloatingBarIcons.cs | 4 ++++ Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 11 ++++++++++- Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 19 ++++++++++++++++--- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index bafc0805..0315cdc1 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -1371,6 +1371,10 @@ namespace Ink_Canvas { // 禁用高级橡皮擦系统 DisableAdvancedEraserSystem(); + // 修复:从橡皮擦切换到批注模式时,退出多指书写模式 + // 这解决了从橡皮擦切换为批注时被锁定为多指书写的问题 + ExitMultiTouchModeIfNeeded(); + FloatingbarSelectionBG.Visibility = Visibility.Visible; System.Windows.Controls.Canvas.SetLeft(FloatingbarSelectionBG, 28); diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs index 555f5b9b..72a38995 100644 --- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs +++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs @@ -106,7 +106,11 @@ namespace Ink_Canvas { private void BtnPen_Click(object sender, RoutedEventArgs e) { // 禁用高级橡皮擦系统 DisableAdvancedEraserSystem(); - + + // 修复:从橡皮擦切换到批注模式时,退出多指书写模式 + // 这解决了从橡皮擦切换为批注时被锁定为多指书写的问题 + ExitMultiTouchModeIfNeeded(); + // 如果当前已是批注模式,再次点击弹出批注子面板 if (penType == 0 && inkCanvas.EditingMode == InkCanvasEditingMode.Ink && !drawingAttributes.IsHighlighter) { return; @@ -119,6 +123,11 @@ namespace Ink_Canvas { drawingAttributes.IsHighlighter = false; drawingAttributes.StylusTip = StylusTip.Ellipse; inkCanvas.EditingMode = InkCanvasEditingMode.Ink; + + // 修复:确保从橡皮擦切换到笔时,多指手势功能能正确恢复 + // 更新lastInkCanvasEditingMode以确保多指手势逻辑正确 + lastInkCanvasEditingMode = InkCanvasEditingMode.Ink; + SetCursorBasedOnEditingMode(inkCanvas); } diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index f0b0eeb3..aa2b5074 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -364,13 +364,24 @@ namespace Ink_Canvas { } //手势完成后切回之前的状态 - if (dec.Count > 1) - if (inkCanvas.EditingMode == InkCanvasEditingMode.None) + // 修复:改进多指手势恢复逻辑,确保从橡皮擦切换到笔时多指手势能正确恢复 + if (dec.Count > 1) { + if (inkCanvas.EditingMode == InkCanvasEditingMode.None) { if (lastInkCanvasEditingMode != InkCanvasEditingMode.EraseByPoint) { inkCanvas.EditingMode = lastInkCanvasEditingMode; } + } + } else if (dec.Count == 0) { + // 当所有触摸点都抬起时,确保正确恢复编辑模式 + // 这对于从橡皮擦切换到笔后恢复多指手势功能很重要 + if (inkCanvas.EditingMode == InkCanvasEditingMode.None && + lastInkCanvasEditingMode != InkCanvasEditingMode.None && + lastInkCanvasEditingMode != InkCanvasEditingMode.EraseByPoint) { + inkCanvas.EditingMode = lastInkCanvasEditingMode; + } + } inkCanvas.Opacity = 1; - + if (dec.Count == 0) if (lastTouchDownStrokeCollection.Count() != inkCanvas.Strokes.Count() && !(drawingShapeMode == 9 && !isFirstTouchCuboid)) { @@ -390,6 +401,8 @@ namespace Ink_Canvas { if (e.Manipulators.Count() != 0) return; if (drawingShapeMode == 0 && inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) { inkCanvas.EditingMode = InkCanvasEditingMode.Ink; + // 修复:确保多指手势完成后正确更新lastInkCanvasEditingMode + lastInkCanvasEditingMode = InkCanvasEditingMode.Ink; } }