diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index 6ed5d291..fc352e5e 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -9,6 +9,7 @@ using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using Point = System.Windows.Point; +using System.Diagnostics; namespace Ink_Canvas { public partial class MainWindow : Window { @@ -72,7 +73,8 @@ namespace Ink_Canvas { 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); @@ -82,14 +84,16 @@ namespace Ink_Canvas { 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.None; + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } + Trace.WriteLine($"[PalmEraser] 非手掌擦: TouchId={e.TouchDevice.Id}, boundWidth={boundWidth:F2}, eraserMultiplier={eraserMultiplier:F2}, TouchCount={(dec != null ? dec.Count : 0)}"); } }