From 4d7544eefb41180e286ad3f6d96a816759f2aac6 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Tue, 30 Sep 2025 18:45:57 +0800 Subject: [PATCH] deletefix:issue #210 --- Ink Canvas/MainWindow.xaml | 1 + .../MainWindow_cs/MW_FloatingBarIcons.cs | 5 - Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 105 +----------------- 3 files changed, 3 insertions(+), 108 deletions(-) diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index 3415aded..b614ee5c 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -3670,6 +3670,7 @@ IsManipulationEnabled="True" EditingModeChanged="inkCanvas_EditingModeChanged" PreviewTouchDown="inkCanvas_PreviewTouchDown" + PreviewTouchMove="inkCanvas_PreviewTouchMove" PreviewTouchUp="inkCanvas_PreviewTouchUp" MouseDown="inkCanvas_MouseDown" MouseMove="inkCanvas_MouseMove" diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 38ab4b61..1364a207 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -2900,11 +2900,6 @@ namespace Ink_Canvas ViewboxFloatingBar.IsHitTestVisible = true; BlackboardUIGridForInkReplay.IsHitTestVisible = true; - // 重置书写保护相关状态 - isWritingInProgress = false; - touchDownTimes.Clear(); - touchDownPositions.Clear(); - lastTouchPositions.Clear(); } catch (Exception ex) diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index aa0eb28c..ed6beb7a 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -21,17 +21,7 @@ namespace Ink_Canvas private List dec = new List(); private bool isSingleFingerDragMode; private Point centerPoint = new Point(0, 0); - private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink; - - // 书写保护相关变量 - private bool isWritingInProgress = false; - private DateTime lastTouchDownTime = DateTime.Now; - private const int WRITING_PROTECTION_DELAY_MS = 200; // 书写保护延迟时间(毫秒) - private Dictionary touchDownTimes = new Dictionary(); - private Dictionary touchDownPositions = new Dictionary(); - private Dictionary lastTouchPositions = new Dictionary(); - private const double GESTURE_MOVEMENT_THRESHOLD = 20.0; // 手势移动阈值(像素) - private const double WRITING_MOVEMENT_THRESHOLD = 5.0; // 书写移动阈值(像素) + private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink; /// 保存画布上的非笔画元素(如图片、媒体元素等) /// private List PreserveNonStrokeElements() @@ -346,13 +336,12 @@ namespace Ink_Canvas { var stroke = GetStrokeVisual(e.StylusDevice.Id).Stroke; - // 正常模式:添加到画布并参与墨迹纠正 inkCanvas.Strokes.Add(stroke); await Task.Delay(5); inkCanvas.Children.Remove(GetVisualCanvas(e.StylusDevice.Id)); inkCanvas_StrokeCollected(inkCanvas, - new InkCanvasStrokeCollectedEventArgs(stroke)); + new InkCanvasStrokeCollectedEventArgs(stroke)); } catch (Exception ex) { @@ -577,17 +566,6 @@ namespace Ink_Canvas ViewboxFloatingBar.IsHitTestVisible = false; BlackboardUIGridForInkReplay.IsHitTestVisible = false; dec.Add(e.TouchDevice.Id); - - // 记录触摸按下时间和位置,用于书写保护判断 - touchDownTimes[e.TouchDevice.Id] = DateTime.Now; - touchDownPositions[e.TouchDevice.Id] = e.GetTouchPoint(inkCanvas).Position; - - // 如果是第一个触摸点,标记书写开始 - if (dec.Count == 1) - { - isWritingInProgress = true; - lastTouchDownTime = DateTime.Now; - } // Palm Eraser 逻辑 if (Settings.Canvas.EnablePalmEraser && !isPalmEraserActive) @@ -656,7 +634,6 @@ namespace Ink_Canvas touchPoint = e.GetTouchPoint(inkCanvas); centerPoint = touchPoint.Position; - // 修复:只允许在此处赋值iniP,防止TouchMove等其他地方覆盖,保证几何绘制起点一致 if (drawingShapeMode != 0) { // 对于双曲线绘制,第一笔时记录起点,第二笔时不更新起点 @@ -686,37 +663,18 @@ namespace Ink_Canvas if (inkCanvas.EditingMode == InkCanvasEditingMode.None || inkCanvas.EditingMode == InkCanvasEditingMode.Select) return; - // 书写保护:如果正在书写且时间间隔很短,延迟禁用画笔功能 - if (isWritingInProgress && dec.Count == 2) - { - var timeSinceFirstTouch = DateTime.Now - lastTouchDownTime; - if (timeSinceFirstTouch.TotalMilliseconds < WRITING_PROTECTION_DELAY_MS) - { - return; - } - } - lastInkCanvasEditingMode = inkCanvas.EditingMode; - // 修复:几何绘制模式下禁止切回Ink if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint && inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke && drawingShapeMode == 0) { inkCanvas.EditingMode = InkCanvasEditingMode.None; } - - // 清除书写状态 - isWritingInProgress = false; } } private void inkCanvas_PreviewTouchMove(object sender, TouchEventArgs e) { - // 更新触摸位置记录,用于手势检测 - if (lastTouchPositions.ContainsKey(e.TouchDevice.Id)) - { - lastTouchPositions[e.TouchDevice.Id] = e.GetTouchPoint(inkCanvas).Position; - } // 如果手掌擦激活,更新橡皮擦反馈位置 if (isPalmEraserActive) @@ -740,16 +698,6 @@ namespace Ink_Canvas // Palm Eraser 逻辑 dec.Remove(e.TouchDevice.Id); - // 清理触摸记录 - touchDownTimes.Remove(e.TouchDevice.Id); - touchDownPositions.Remove(e.TouchDevice.Id); - lastTouchPositions.Remove(e.TouchDevice.Id); - - // 如果所有触摸点都抬起,清除书写状态 - if (dec.Count == 0) - { - isWritingInProgress = false; - } // 当手掌擦激活且所有触摸点都抬起时,恢复原编辑模式 if (isPalmEraserActive && dec.Count == 0) @@ -1214,54 +1162,5 @@ namespace Ink_Canvas } - /// - /// 检测是否为手势操作而非书写 - /// - private bool IsGestureOperation() - { - if (dec.Count < 2) return false; - - // 检查触摸点之间的移动模式 - var currentTime = DateTime.Now; - var gestureIndicators = 0; - var totalMovement = 0.0; - - foreach (var touchId in dec) - { - if (touchDownTimes.ContainsKey(touchId) && touchDownPositions.ContainsKey(touchId) && lastTouchPositions.ContainsKey(touchId)) - { - var timeSinceTouch = currentTime - touchDownTimes[touchId]; - var initialPosition = touchDownPositions[touchId]; - var currentPosition = lastTouchPositions[touchId]; - - // 计算移动距离 - var movement = Math.Sqrt(Math.Pow(currentPosition.X - initialPosition.X, 2) + - Math.Pow(currentPosition.Y - initialPosition.Y, 2)); - totalMovement += movement; - - // 综合判断:时间、移动距离和触摸点数量 - if (timeSinceTouch.TotalMilliseconds < WRITING_PROTECTION_DELAY_MS && movement < WRITING_MOVEMENT_THRESHOLD) - { - // 短时间、小移动 - 可能是书写 - gestureIndicators--; - } - else if (timeSinceTouch.TotalMilliseconds > WRITING_PROTECTION_DELAY_MS || movement > GESTURE_MOVEMENT_THRESHOLD) - { - // 长时间或大移动 - 可能是手势 - gestureIndicators++; - } - } - } - - // 如果平均移动距离很大,更可能是手势 - var averageMovement = totalMovement / dec.Count; - if (averageMovement > GESTURE_MOVEMENT_THRESHOLD) - { - gestureIndicators += 2; - } - - // 如果大部分触摸点都满足手势条件,认为是手势操作 - return gestureIndicators > 0; - } } }