diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs index 354a5ee2..84009390 100644 --- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs +++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs @@ -454,6 +454,13 @@ namespace Ink_Canvas { #endregion private void inkCanvas_TouchMove(object sender, TouchEventArgs e) { + // 如果处于手掌擦状态,继续使用相同的橡皮形状 + if (isLastTouchEraser && currentPalmEraserShape != null) { + inkCanvas.EraserShape = currentPalmEraserShape; + inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; + return; + } + if (isSingleFingerDragMode) return; // 处理形状绘制模式 diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index 545c742d..0f302a29 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -206,6 +206,8 @@ namespace Ink_Canvas { private Point iniP = new Point(0, 0); private bool isLastTouchEraser = false; private bool forcePointEraser = true; + // 用于记录手掌擦的尺寸和形状 + private StylusShape currentPalmEraserShape = null; private void Main_Grid_TouchDown(object sender, TouchEventArgs e) { // 确保触摸时显示自定义光标 @@ -226,6 +228,14 @@ namespace Ink_Canvas { if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position; if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP); inkCanvas.Opacity = 1; + + // 如果已经处于手掌擦状态,保持状态不变 + if (isLastTouchEraser && currentPalmEraserShape != null) { + inkCanvas.EraserShape = currentPalmEraserShape; + inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; + return; + } + double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0; if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen) eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier; @@ -249,34 +259,38 @@ namespace Ink_Canvas { break; } - // 根据EraserShapeType设置合适的橡皮擦形状 + // 根据EraserShapeType设置合适的橡皮擦形状并保存 if (Settings.Canvas.EraserShapeType == 0) { // 圆形擦 - inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier, + currentPalmEraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier, boundsWidth * k * eraserMultiplier); } else if (Settings.Canvas.EraserShapeType == 1) { // 矩形黑板擦 - inkCanvas.EraserShape = new RectangleStylusShape(boundsWidth * k * eraserMultiplier * 0.6, + currentPalmEraserShape = new RectangleStylusShape(boundsWidth * k * eraserMultiplier * 0.6, boundsWidth * k * eraserMultiplier); } + inkCanvas.EraserShape = currentPalmEraserShape; inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; } else { if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 && Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) { isLastTouchEraser = false; + currentPalmEraserShape = null; inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly; inkCanvas.Opacity = 0.1; } else { - inkCanvas.EraserShape = new EllipseStylusShape(5, 5); + currentPalmEraserShape = new EllipseStylusShape(5, 5); + inkCanvas.EraserShape = currentPalmEraserShape; inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke; } } } else { isLastTouchEraser = false; + currentPalmEraserShape = null; // 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮 inkCanvas.EraserShape = new EllipseStylusShape(50, 50); // 修复触屏状态下几何绘制功能不可用的问题:在几何绘制模式下不应该因为forceEraser而直接返回 @@ -328,7 +342,6 @@ namespace Ink_Canvas { } private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) { - inkCanvas.ReleaseAllTouchCaptures(); ViewboxFloatingBar.IsHitTestVisible = true; BlackboardUIGridForInkReplay.IsHitTestVisible = true; @@ -343,6 +356,7 @@ namespace Ink_Canvas { // 如果是手掌触发的面积擦抬起,需要确保橡皮擦形状被正确重置 if (isLastTouchEraser && dec.Count == 0) { isLastTouchEraser = false; + currentPalmEraserShape = null; // 清除保存的手掌擦形状 if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint && forcePointEraser) { // 重新应用当前设置的橡皮擦形状 ApplyCurrentEraserShape(); @@ -370,26 +384,6 @@ namespace Ink_Canvas { inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } - // -- removed -- - // - //private void inkCanvas_ManipulationStarted(object sender, ManipulationStartedEventArgs e) - //{ - // if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture || inkCanvas.Strokes.Count == 0 || dec.Count() < 2) return; - // _currentCommitType = CommitReason.Manipulation; - // StrokeCollection strokes = inkCanvas.GetSelectedStrokes(); - // if (strokes.Count != 0) - // { - // inkCanvas.Strokes.Replace(strokes, strokes.Clone()); - // } - // else - // { - // var originalStrokes = inkCanvas.Strokes; - // var targetStrokes = originalStrokes.Clone(); - // originalStrokes.Replace(originalStrokes, targetStrokes); - // } - // _currentCommitType = CommitReason.UserInput; - //} - private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) { // 手掌擦时禁止移动/缩放 if (isLastTouchEraser || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.ResolveComReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.ResolveComReference.cache index 152b8627..5a7e2243 100644 Binary files a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.ResolveComReference.cache and b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.ResolveComReference.cache differ diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache index c6334c11..0150e04c 100644 --- a/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache +++ b/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache @@ -13,7 +13,7 @@ E:\ICC CE\ICC CE main\ICC-CE\Ink Canvas\App.xaml 13173459795 56-1167124909 -46-47806484 +46-1910739249 MainWindow.xaml;Resources\DrawShapeImageDictionary.xaml;Resources\IconImageDictionary.xaml;Resources\SeewoImageDictionary.xaml;Resources\Styles\Dark.xaml;Resources\Styles\Light.xaml;Windows\CountdownTimerWindow.xaml;Windows\CycleProcessBar.xaml;Windows\HasNewUpdateWindow.xaml;Windows\NamesInputWindow.xaml;Windows\OperatingGuideWindow.xaml;Windows\RandWindow.xaml;Windows\YesOrNoNotificationWindow.xaml; False