diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index 7882364b..7df138b9 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -851,15 +851,6 @@ - - - - - - diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index bf93374e..eae06189 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -265,25 +265,10 @@ namespace Ink_Canvas { catch { } } - // 新增:记录上一个模式 - private InkCanvasEditingMode lastEditingMode = InkCanvasEditingMode.Ink; - private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) { var inkCanvas1 = sender as InkCanvas; if (inkCanvas1 == null) return; - // 只负责显示/隐藏覆盖层,不再强制切换模式 - var eraserOverlay = this.FindName("AdvancedEraserOverlay") as Border; - if (eraserOverlay != null) { - if (inkCanvas1.EditingMode == InkCanvasEditingMode.EraseByPoint) { - eraserOverlay.IsHitTestVisible = true; - Trace.WriteLine("Advanced Eraser: Overlay enabled in eraser mode"); - } else { - eraserOverlay.IsHitTestVisible = false; - DisableAdvancedEraserSystem(); - Trace.WriteLine("Advanced Eraser: Overlay disabled in non-eraser mode"); - } - } // 使用辅助方法设置光标 SetCursorBasedOnEditingMode(inkCanvas1); if (Settings.Canvas.IsShowCursor) { @@ -294,13 +279,31 @@ namespace Ink_Canvas { else inkCanvas1.ForceCursor = false; } else { + // 套索选择模式下始终强制显示光标,即使用户设置不显示光标 if (inkCanvas1.EditingMode == InkCanvasEditingMode.Select) { inkCanvas1.ForceCursor = true; } else { inkCanvas1.ForceCursor = false; } } + if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser; + + // 处理高级橡皮擦覆盖层的启用/禁用 + var eraserOverlay = this.FindName("AdvancedEraserOverlay") as Border; + if (eraserOverlay != null) { + if (inkCanvas1.EditingMode == InkCanvasEditingMode.EraseByPoint) { + // 橡皮擦模式下启用覆盖层 + eraserOverlay.IsHitTestVisible = true; + Trace.WriteLine("Advanced Eraser: Overlay enabled in eraser mode"); + } else { + // 其他模式下禁用覆盖层 + eraserOverlay.IsHitTestVisible = false; + // 同时禁用高级橡皮擦系统 + DisableAdvancedEraserSystem(); + Trace.WriteLine("Advanced Eraser: Overlay disabled in non-eraser mode"); + } + } } #endregion Ink Canvas @@ -311,16 +314,11 @@ namespace Ink_Canvas { public static string settingsFileName = "Settings.json"; private bool isLoaded = false; private bool forcePointEraser = false; - public static bool EnablePalmEraser = true; private void Window_Loaded(object sender, RoutedEventArgs e) { loadPenCanvas(); //加载设置 LoadSettings(true); - // 同步手掌擦开关 - EnablePalmEraser = Settings.Canvas.EnablePalmEraser; - if (ToggleSwitchEnablePalmEraser != null) - ToggleSwitchEnablePalmEraser.IsOn = EnablePalmEraser; // 加载自定义背景颜色 LoadCustomBackgroundColor(); @@ -400,14 +398,6 @@ namespace Ink_Canvas { // 初始化插件系统 InitializePluginSystem(); - - // 新增:确保EditingModeChanged事件已绑定 - var inkCanvas = this.FindName("inkCanvas") as InkCanvas; - if (inkCanvas != null) - { - inkCanvas.EditingModeChanged -= inkCanvas_EditingModeChanged; - inkCanvas.EditingModeChanged += inkCanvas_EditingModeChanged; - } } private void SystemEventsOnDisplaySettingsChanged(object sender, EventArgs e) { @@ -1351,13 +1341,5 @@ namespace Ink_Canvas { BorderSettings.Visibility = Visibility.Visible; BorderSettingsMask.Visibility = Visibility.Visible; } - - private void ToggleSwitchEnablePalmEraser_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - EnablePalmEraser = ToggleSwitchEnablePalmEraser.IsOn; - Settings.Canvas.EnablePalmEraser = EnablePalmEraser; - SaveSettingsToFile(); - } } } \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Eraser.cs b/Ink Canvas/MainWindow_cs/MW_Eraser.cs index d80b1a41..0a16cb5c 100644 --- a/Ink Canvas/MainWindow_cs/MW_Eraser.cs +++ b/Ink Canvas/MainWindow_cs/MW_Eraser.cs @@ -634,68 +634,52 @@ namespace Ink_Canvas { // 绑定事件处理 overlay.MouseDown += (sender, e) => { - if (!MainWindow.EnablePalmEraser) return; - var inkCanvas = this.FindName("inkCanvas") as InkCanvas; if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { - lastEditingMode = inkCanvas.EditingMode; overlay.CaptureMouse(); - inkCanvas.EditingMode = InkCanvasEditingMode.None; StartAdvancedEraserOperation(sender); } }; overlay.MouseUp += (sender, e) => { - if (!MainWindow.EnablePalmEraser) return; - var inkCanvas = this.FindName("inkCanvas") as InkCanvas; - if (inkCanvas.EditingMode == InkCanvasEditingMode.None) { + if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { overlay.ReleaseMouseCapture(); EndAdvancedEraserOperation(sender); - inkCanvas.EditingMode = InkCanvasEditingMode.Ink; // 抬手后自动回到画笔 } }; overlay.MouseMove += (sender, e) => { - if (!MainWindow.EnablePalmEraser) return; - var inkCanvas = this.FindName("inkCanvas") as InkCanvas; - if (inkCanvas.EditingMode == InkCanvasEditingMode.None) { + if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { var position = e.GetPosition((UIElement)this.FindName("inkCanvas")); Trace.WriteLine($"Advanced Eraser: Mouse move event triggered at ({position.X:F1}, {position.Y:F1})"); UpdateAdvancedEraserPosition(sender, position); + } else { + Trace.WriteLine($"Advanced Eraser: Mouse move ignored - not in eraser mode, current mode: {inkCanvas.EditingMode}"); } }; // 触控笔事件 overlay.StylusDown += (sender, e) => { - if (!MainWindow.EnablePalmEraser) return; - var inkCanvas = this.FindName("inkCanvas") as InkCanvas; if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { e.Handled = true; if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) { overlay.CaptureStylus(); } - lastEditingMode = inkCanvas.EditingMode; - inkCanvas.EditingMode = InkCanvasEditingMode.None; StartAdvancedEraserOperation(sender); } }; overlay.StylusUp += (sender, e) => { - if (!MainWindow.EnablePalmEraser) return; - var inkCanvas = this.FindName("inkCanvas") as InkCanvas; - if (inkCanvas.EditingMode == InkCanvasEditingMode.None) { + if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { e.Handled = true; if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) { overlay.ReleaseStylusCapture(); } EndAdvancedEraserOperation(sender); - inkCanvas.EditingMode = InkCanvasEditingMode.Ink; // 抬手后自动回到画笔 } }; overlay.StylusMove += (sender, e) => { - if (!MainWindow.EnablePalmEraser) return; - var inkCanvas = this.FindName("inkCanvas") as InkCanvas; - if (inkCanvas.EditingMode == InkCanvasEditingMode.None) { + if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { e.Handled = true; var position = e.GetPosition((UIElement)this.FindName("inkCanvas")); UpdateAdvancedEraserPosition(sender, position); diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index f55bc913..32a6a9eb 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -77,8 +77,6 @@ namespace Ink_Canvas public OptionalOperation HyperbolaAsymptoteOption { get; set; } = OptionalOperation.Ask; [JsonProperty("isCompressPicturesUploaded")] public bool IsCompressPicturesUploaded { get; set; } = false; - [JsonProperty("enablePalmEraser")] - public bool EnablePalmEraser { get; set; } = true; } public enum OptionalOperation