From 044df3f09ca7faa1a0da782e6fe2f824749f41bc Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Wed, 23 Jul 2025 22:57:16 +0800 Subject: [PATCH] =?UTF-8?q?delete:=E6=89=8B=E6=8E=8C=E6=93=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/MainWindow_cs/MW_BoardIcons.cs | 1 - .../MainWindow_cs/MW_FloatingBarIcons.cs | 2 - .../MainWindow_cs/MW_SelectionGestures.cs | 8 +- Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 17 --- Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 103 +----------------- 5 files changed, 7 insertions(+), 124 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs b/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs index b8a6753c..100a6421 100644 --- a/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs @@ -689,7 +689,6 @@ namespace Ink_Canvas { private void BoardLassoIcon_Click(object sender, RoutedEventArgs e) { forceEraser = false; forcePointEraser = false; - isLastTouchEraser = false; drawingShapeMode = 0; inkCanvas.EditingMode = InkCanvasEditingMode.Select; SetCursorBasedOnEditingMode(inkCanvas); diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 2171f885..37fcd6cf 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -1449,7 +1449,6 @@ namespace Ink_Canvas { bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint; forceEraser = false; forcePointEraser = true; - isLastTouchEraser = false; drawingShapeMode = 0; // 切换到橡皮擦模式时,确保保存当前图片信息 @@ -1489,7 +1488,6 @@ namespace Ink_Canvas { bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint; forceEraser = false; forcePointEraser = true; - isLastTouchEraser = false; drawingShapeMode = 0; // 启用新的高级橡皮擦系统 diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs index d80c1266..ea33faef 100644 --- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs +++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs @@ -322,13 +322,9 @@ namespace Ink_Canvas { } private void GridInkCanvasSelectionCover_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) { - // 手掌擦时禁止移动/缩放 - if (isLastTouchEraser || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) - return; - // 三指及以上禁止缩放 - bool disableScale = dec.Count >= 3; try { if (dec.Count >= 1) { + bool disableScale = dec.Count >= 3; var md = e.DeltaManipulation; var trans = md.Translation; // 获得位移矢量 var rotate = md.Rotation; // 获得旋转角度 @@ -426,7 +422,6 @@ namespace Ink_Canvas { ExitMultiTouchModeIfNeeded(); forceEraser = false; forcePointEraser = false; - isLastTouchEraser = false; drawingShapeMode = 0; inkCanvas.EditingMode = InkCanvasEditingMode.Select; SetCursorBasedOnEditingMode(inkCanvas); @@ -436,7 +431,6 @@ namespace Ink_Canvas { ExitMultiTouchModeIfNeeded(); forceEraser = false; forcePointEraser = false; - isLastTouchEraser = false; drawingShapeMode = 0; inkCanvas.EditingMode = InkCanvasEditingMode.Select; inkCanvas.IsManipulationEnabled = true; diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs index 24bfc805..b971ccd9 100644 --- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs +++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs @@ -113,7 +113,6 @@ namespace Ink_Canvas { // 否则只切换到批注模式,不弹出子面板 forceEraser = false; forcePointEraser = false; - isLastTouchEraser = false; drawingShapeMode = 0; penType = 0; drawingAttributes.IsHighlighter = false; @@ -379,25 +378,10 @@ namespace Ink_Canvas { SetCursorBasedOnEditingMode(inkCanvas); } - // 如果处于手掌擦状态,继续使用相同的橡皮形状 - if (isLastTouchEraser && currentPalmEraserShape != null) { - inkCanvas.EraserShape = currentPalmEraserShape; - inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; - return; - } - if (isSingleFingerDragMode) return; - // 处理几何绘制模式 if (drawingShapeMode != 0) { - if (isLastTouchEraser) return; - //EraserContainer.Background = null; - //ImageEraser.Visibility = Visibility.Visible; - // 修复触屏状态下几何绘制功能不可用的问题 - // 在几何绘制模式下,即使isWaitUntilNextTouchDown为true,也应该处理触摸移动事件 - // 只有当多点触控时才需要等待下一次触摸 if (isWaitUntilNextTouchDown && dec.Count > 1) return; if (dec.Count > 1) { - isWaitUntilNextTouchDown = true; try { inkCanvas.Strokes.Remove(lastTempStroke); inkCanvas.Strokes.Remove(lastTempStrokeCollection); @@ -1653,7 +1637,6 @@ namespace Ink_Canvas { private void EnterShapeDrawingMode(int mode) { forceEraser = true; forcePointEraser = false; - isLastTouchEraser = false; drawingShapeMode = mode; inkCanvas.EditingMode = InkCanvasEditingMode.None; SetCursorBasedOnEditingMode(inkCanvas); diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index 21e376f1..f2ac48c9 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -16,7 +16,6 @@ namespace Ink_Canvas { #region Multi-Touch private bool isInMultiTouchMode = false; - private InkCanvasEditingMode prePalmEraserEditingMode = InkCanvasEditingMode.Ink; private List dec = new List(); private bool isSingleFingerDragMode = false; private Point centerPoint = new Point(0, 0); @@ -35,16 +34,8 @@ namespace Ink_Canvas { inkCanvas.Children.Clear(); isInMultiTouchMode = false; - // 退出多指书写模式后,恢复手掌擦功能 - // 这里不需要特别操作,因为设置了isInMultiTouchMode = false后, - // 下次触发Main_Grid_TouchDown时会自动判断并启用手掌擦功能 } else { - // 进入多指书写模式前,如果当前处于手掌擦状态,先关闭手掌擦 - if (isLastTouchEraser) { - isLastTouchEraser = false; - currentPalmEraserShape = null; - } inkCanvas.StylusDown += MainWindow_StylusDown; inkCanvas.StylusMove += MainWindow_StylusMove; @@ -69,33 +60,11 @@ namespace Ink_Canvas { HideSubPanels(); // 书写时自动隐藏二级菜单 } - double boundWidth = e.GetTouchPoint(null).Bounds.Width, eraserMultiplier = 1.0; - if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen) - eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier; - if ((Settings.Advanced.TouchMultiplier != 0 || !Settings.Advanced.IsSpecialScreen)) //启用特殊屏幕且触摸倍数为 0 时禁用橡皮 - - - // 修复:只有多指且面积大时才允许手掌擦,单指始终为批注 - if (dec != null && dec.Count >= 2 && (Settings.Advanced.TouchMultiplier != 0 || !Settings.Advanced.IsSpecialScreen) - && boundWidth > BoundsWidth * 2.5) { - if (drawingShapeMode == 0 && forceEraser) return; - currentPalmEraserShape = GetPalmRectangleEraserShape(eraserMultiplier); - inkCanvas.EraserShape = currentPalmEraserShape; - TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint; - isLastTouchEraser = true; - if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) { - inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; - } - Trace.WriteLine($"[PalmEraser] 触发手掌擦: TouchId={e.TouchDevice.Id}, boundWidth={boundWidth:F2}, eraserMultiplier={eraserMultiplier:F2}, EraserShape={currentPalmEraserShape?.GetType().Name}, TouchCount={dec.Count}"); - } - else { - TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None; - // 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮 - inkCanvas.EraserShape = new EllipseStylusShape(50, 50); - if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) { - inkCanvas.EditingMode = InkCanvasEditingMode.Ink; - } - Trace.WriteLine($"[PalmEraser] 非手掌擦: TouchId={e.TouchDevice.Id}, boundWidth={boundWidth:F2}, eraserMultiplier={eraserMultiplier:F2}, TouchCount={(dec != null ? dec.Count : 0)}"); + // 只保留普通橡皮逻辑 + TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None; + inkCanvas.EraserShape = new EllipseStylusShape(50, 50); + if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) { + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } } @@ -219,37 +188,6 @@ namespace Ink_Canvas { private int lastTouchDownTime = 0, lastTouchUpTime = 0; private Point iniP = new Point(0, 0); - private bool isLastTouchEraser = false; - // 用于记录手掌擦的尺寸和形状 - private StylusShape currentPalmEraserShape = null; - - /// - /// 根据用户在设置面板中选择的橡皮大小,生成"手掌橡皮"默认的矩形黑板擦形状。 - /// 该形状大小不随触控面积等实时变化,仅受设置的橡皮大小影响。 - /// - /// 特殊屏幕触摸倍数修正系数 - /// RectangleStylusShape - private StylusShape GetPalmRectangleEraserShape(double multiplier = 1.0) { - double k = 1; - switch (Settings.Canvas.EraserSize) { - case 0: - k = 0.5; - break; - case 1: - k = 0.8; - break; - case 3: - k = 1.25; - break; - case 4: - k = 1.5; - break; - } - - // 参照圆形橡皮 k*90 的基准,将矩形宽度压缩到 0.6,保持高度一致 - double baseLen = k * 90 * multiplier; - return new RectangleStylusShape(baseLen * 0.6, baseLen); - } private void Main_Grid_TouchDown(object sender, TouchEventArgs e) { SetCursorBasedOnEditingMode(inkCanvas); @@ -346,34 +284,6 @@ namespace Ink_Canvas { dec.Remove(e.TouchDevice.Id); inkCanvas.Opacity = 1; - // 如果是手掌触发的面积擦抬起,需要确保橡皮擦形状被正确重置 - if (isLastTouchEraser && dec.Count == 0) { - isLastTouchEraser = false; - currentPalmEraserShape = null; // 清除保存的手掌擦形状 - - // 当手掌擦消失时,恢复到之前的编辑模式 - if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { - // 根据之前的编辑模式模拟点击相应的选项卡 - if (prePalmEraserEditingMode == InkCanvasEditingMode.Ink) { - // 模拟点击批注选项卡 - PenIcon_Click(null, null); - HideSubPanels("pen", true); // 新增:确保高光切换 - } else if (prePalmEraserEditingMode == InkCanvasEditingMode.None || - prePalmEraserEditingMode == InkCanvasEditingMode.Select) { - // 模拟点击光标选项卡 - CursorIcon_Click(null, null); - HideSubPanels("cursor", true); // 新增:确保高光切换 - } else { - // 其他编辑模式时恢复之前的模式 - inkCanvas.EditingMode = prePalmEraserEditingMode; - if (forcePointEraser) { - // 重新应用当前设置的橡皮擦形状 - ApplyCurrentEraserShape(); - } - } - } - } - if (dec.Count == 0) if (lastTouchDownStrokeCollection.Count() != inkCanvas.Strokes.Count() && !(drawingShapeMode == 9 && !isFirstTouchCuboid)) { @@ -391,7 +301,6 @@ namespace Ink_Canvas { private void Main_Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { if (e.Manipulators.Count() != 0) return; - if (forceEraser) return; if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) { inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } @@ -399,7 +308,7 @@ namespace Ink_Canvas { private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) { // 手掌擦时禁止移动/缩放 - if (isLastTouchEraser || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) + if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) return; // 三指及以上禁止缩放 bool disableScale = dec.Count >= 3;