From b1640f44c2b01d3364c2a8326626b939cfd3865f Mon Sep 17 00:00:00 2001 From: PrefacedCorg <1876568293@qq.com> Date: Sat, 25 Apr 2026 13:56:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=BE=E7=BD=AE):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=A2=A8=E8=BF=B9=E7=BA=A0=E6=AD=A3=E8=AE=BE=E7=BD=AE=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=B9=B6=E9=87=8D=E6=9E=84=E8=AE=BE=E7=BD=AE=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构设置界面,将墨迹纠正相关功能从画板设置中分离出来,新增独立的墨迹纠正设置页面。主要变更包括: - 新增 InkRecognitionPage 用于集中管理墨迹纠正功能 - 调整设置窗口导航结构,将墨迹纠正设为画板设置的子页面 - 优化设置项布局,使用折叠面板组织复杂选项 - 移除主窗口中冗余的崩溃处理和手势设置 - 修复多指手势时橡皮擦状态保存问题 - 新增笔尖模式相关字符串资源 --- Ink Canvas/MainWindow.xaml | 58 +---- Ink Canvas/MainWindow.xaml.cs | 30 --- .../MainWindow_cs/MW_FloatingBarIcons.cs | 2 +- Ink Canvas/MainWindow_cs/MW_Settings.cs | 39 +--- Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs | 26 +-- Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 6 +- Ink Canvas/Properties/Strings.en-US.resx | 8 +- Ink Canvas/Properties/Strings.resx | 8 +- .../SettingsViews/Pages/CanvasPage.xaml | 206 ++++++------------ .../SettingsViews/Pages/CanvasPage.xaml.cs | 124 ++--------- .../Windows/SettingsViews/Pages/HomePage.xaml | 9 +- .../Pages/InkRecognitionPage.xaml | 174 +++++++++++++++ .../Pages/InkRecognitionPage.xaml.cs | 166 ++++++++++++++ .../SettingsViews/Pages/StartupPage.xaml | 30 +++ .../SettingsViews/Pages/StartupPage.xaml.cs | 79 +++++++ .../Windows/SettingsViews/SettingsWindow.xaml | 21 ++ .../SettingsViews/SettingsWindow.xaml.cs | 1 + 17 files changed, 588 insertions(+), 399 deletions(-) create mode 100644 Ink Canvas/Windows/SettingsViews/Pages/InkRecognitionPage.xaml create mode 100644 Ink Canvas/Windows/SettingsViews/Pages/InkRecognitionPage.xaml.cs diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index 10a77f89..7c44f0fb 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -640,63 +640,7 @@ Padding="15,5" Margin="0,10,0,0"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - /// 处理笔尖模式开关状态更改事件 - /// - /// 事件发送者 - /// 路由事件参数 - /// - /// 当笔尖模式开关状态更改时: - /// 1. 同步更新两个笔尖模式开关的状态 - /// 2. 保存笔尖模式设置 - /// 3. 根据笔尖模式设置更新边界宽度 - /// private void ToggleSwitchEnableNibMode_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; @@ -2653,13 +2642,6 @@ namespace Ink_Canvas SaveSettingsToFile(); } - private void ToggleSwitchAutoSwitchTwoFingerGesture_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - Settings.Gesture.AutoSwitchTwoFingerGesture = ToggleSwitchAutoSwitchTwoFingerGesture.IsOn; - SaveSettingsToFile(); - } - private void ToggleSwitchEnableTwoFingerZoom_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; @@ -2718,8 +2700,7 @@ namespace Ink_Canvas palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser; Settings.Canvas.EnablePalmEraser = false; - if (ToggleSwitchEnablePalmEraser != null) - ToggleSwitchEnablePalmEraser.IsOn = false; + SaveSettingsToFile(); // 恢复到之前的编辑状态 inkCanvas.EditingMode = currentEditingMode; @@ -2754,8 +2735,7 @@ namespace Ink_Canvas if (palmEraserWasEnabledBeforeMultiTouch) { Settings.Canvas.EnablePalmEraser = true; - if (ToggleSwitchEnablePalmEraser != null) - ToggleSwitchEnablePalmEraser.IsOn = true; + SaveSettingsToFile(); } // 恢复到之前的编辑状态 @@ -2840,7 +2820,6 @@ namespace Ink_Canvas else ToggleSwitchEnableTwoFingerRotation.IsOn = BoardToggleSwitchEnableTwoFingerRotation.IsOn; Settings.Gesture.IsEnableTwoFingerRotation = ToggleSwitchEnableTwoFingerRotation.IsOn; - Settings.Gesture.IsEnableTwoFingerRotationOnSelection = ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); } @@ -4247,13 +4226,6 @@ namespace Ink_Canvas SaveSettingsToFile(); } - private void ToggleSwitchEnablePalmEraser_Toggled(object sender, RoutedEventArgs e) - { - if (!isLoaded) return; - Settings.Canvas.EnablePalmEraser = ToggleSwitchEnablePalmEraser.IsOn; - SaveSettingsToFile(); - } - #region 底部按钮水平位置控制 private void PPTButtonLBPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e) @@ -4357,13 +4329,6 @@ namespace Ink_Canvas #endregion - private void ComboBoxPalmEraserSensitivity_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - if (!isLoaded) return; - Settings.Canvas.PalmEraserSensitivity = ComboBoxPalmEraserSensitivity.SelectedIndex; - SaveSettingsToFile(); - } - #region 文件关联管理 private void BtnUnregisterFileAssociation_Click(object sender, RoutedEventArgs e) diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index 402f042a..1ed3fcd9 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -231,25 +231,21 @@ namespace Ink_Canvas else { Settings.Startup = new Startup(); - Settings.Startup.IsEnableNibMode = false; // 默认关闭笔尖模式 - ToggleSwitchEnableNibMode.IsOn = false; // 默认关闭笔尖模式 - BoardToggleSwitchEnableNibMode.IsOn = false; // 默认关闭笔尖模式 - BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; // 使用手指模式边界宽度 + Settings.Startup.IsEnableNibMode = false; + ToggleSwitchEnableNibMode.IsOn = false; + BoardToggleSwitchEnableNibMode.IsOn = false; + BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; } - // 恢复崩溃后操作设置 if (Settings.Startup != null) { - // 恢复崩溃后操作选项 if (Settings.Startup.CrashAction == 0) { App.CrashAction = App.CrashActionType.SilentRestart; - if (RadioCrashSilentRestart != null) RadioCrashSilentRestart.IsChecked = true; } else { App.CrashAction = App.CrashActionType.NoAction; - if (RadioCrashNoAction != null) RadioCrashNoAction.IsChecked = true; } } @@ -658,13 +654,6 @@ namespace Ink_Canvas ToggleSwitchEnableTwoFingerRotation.IsOn = Settings.Gesture.IsEnableTwoFingerRotation; BoardToggleSwitchEnableTwoFingerRotation.IsOn = Settings.Gesture.IsEnableTwoFingerRotation; - ToggleSwitchAutoSwitchTwoFingerGesture.IsOn = Settings.Gesture.AutoSwitchTwoFingerGesture; - - ToggleSwitchEnableTwoFingerRotation.IsOn = Settings.Gesture.IsEnableTwoFingerRotation; - - ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn = - Settings.Gesture.IsEnableTwoFingerRotationOnSelection; - if (Settings.Gesture.AutoSwitchTwoFingerGesture) { if (Topmost) @@ -855,13 +844,6 @@ namespace Ink_Canvas Settings.Canvas = new Canvas(); } - // Palm Eraser - if (Settings.Canvas != null) - { - ToggleSwitchEnablePalmEraser.IsOn = Settings.Canvas.EnablePalmEraser; - ComboBoxPalmEraserSensitivity.SelectedIndex = Settings.Canvas.PalmEraserSensitivity; - } - // Advanced if (Settings.Advanced != null) { diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index dc70ea42..824325a8 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -233,8 +233,7 @@ namespace Ink_Canvas if (palmEraserWasEnabledBeforeMultiTouch) { Settings.Canvas.EnablePalmEraser = true; - if (ToggleSwitchEnablePalmEraser != null) - ToggleSwitchEnablePalmEraser.IsOn = true; + SaveSettingsToFile(); } } else @@ -259,8 +258,7 @@ namespace Ink_Canvas palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser; Settings.Canvas.EnablePalmEraser = false; - if (ToggleSwitchEnablePalmEraser != null) - ToggleSwitchEnablePalmEraser.IsOn = false; + SaveSettingsToFile(); } } diff --git a/Ink Canvas/Properties/Strings.en-US.resx b/Ink Canvas/Properties/Strings.en-US.resx index b3925094..7aecff4a 100644 --- a/Ink Canvas/Properties/Strings.en-US.resx +++ b/Ink Canvas/Properties/Strings.en-US.resx @@ -987,8 +987,14 @@ Control via icc:// protocol + + Nib Mode + + + Only respond to pen tip touch, ignore palm and finger + - Canvas and ink + Canvas Show pen cursor diff --git a/Ink Canvas/Properties/Strings.resx b/Ink Canvas/Properties/Strings.resx index 06222a0f..b1d1e256 100644 --- a/Ink Canvas/Properties/Strings.resx +++ b/Ink Canvas/Properties/Strings.resx @@ -1029,8 +1029,14 @@ 通过 icc:// 协议从外部控制软件 + + 笔尖模式 + + + 启用后仅响应笔尖触摸,忽略手掌和手指 + - 画板和墨迹 + 画板 显示画笔光标 diff --git a/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml index 3a5107e6..2f7ddf46 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml +++ b/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml @@ -140,20 +140,25 @@ SwitchName="ToggleSwitchEnableInkFade" Toggled="ToggleSwitchEnableInkFade_Toggled" /> - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml.cs index fa4e1be8..fa60d7a7 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/Pages/CanvasPage.xaml.cs @@ -1,4 +1,3 @@ -using Ink_Canvas.Helpers; using Ink_Canvas.Windows.SettingsViews.Helpers; using System; using System.Diagnostics; @@ -57,26 +56,18 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages BrushAutoRestoreAlphaSlider.Value = settings.Canvas.BrushAutoRestoreAlpha; CardEnableEraserAutoSwitchBack.IsOn = settings.Canvas.EnableEraserAutoSwitchBack; EraserAutoSwitchBackDelaySlider.Value = settings.Canvas.EraserAutoSwitchBackDelaySeconds; - CardAutoStraightenLine.IsOn = settings.Canvas.AutoStraightenLine; - AutoStraightenLineThresholdSlider.Value = settings.Canvas.AutoStraightenLineThreshold; - CardHighPrecisionLineStraighten.IsOn = settings.Canvas.HighPrecisionLineStraighten; - CardLineEndpointSnapping.IsOn = settings.Canvas.LineEndpointSnapping; } - if (settings.InkToShape != null) + if (settings.Gesture != null) { - CardEnableInkToShape.IsOn = settings.InkToShape.IsInkToShapeEnabled; - int eng = settings.InkToShape.ShapeRecognitionEngine; - if (eng < 0) eng = 0; - if (eng > 2) eng = 2; - ComboBoxShapeRecognitionEngine.SelectedIndex = eng; - CardEnableWinRtHandwritingStrokeBeautify.IsOn = settings.InkToShape.EnableWinRtHandwritingStrokeBeautify; - CardEnableInkToShapeNoFakePressureRectangle.IsOn = settings.InkToShape.IsInkToShapeNoFakePressureRectangle; - CardEnableInkToShapeNoFakePressureTriangle.IsOn = settings.InkToShape.IsInkToShapeNoFakePressureTriangle; - ToggleCheckboxEnableInkToShapeTriangle.IsChecked = settings.InkToShape.IsInkToShapeTriangle; - ToggleCheckboxEnableInkToShapeRectangle.IsChecked = settings.InkToShape.IsInkToShapeRectangle; - ToggleCheckboxEnableInkToShapeRounded.IsChecked = settings.InkToShape.IsInkToShapeRounded; - LineStraightenSensitivitySlider.Value = settings.InkToShape.LineStraightenSensitivity; + CardAutoSwitchTwoFingerGesture.IsOn = settings.Gesture.AutoSwitchTwoFingerGesture; + CardEnableTwoFingerRotationOnSelection.IsOn = settings.Gesture.IsEnableTwoFingerRotationOnSelection; + } + + if (settings.Canvas != null) + { + CardEnablePalmEraser.IsOn = settings.Canvas.EnablePalmEraser; + ComboBoxPalmEraserSensitivity.SelectedIndex = settings.Canvas.PalmEraserSensitivity; } } catch (Exception ex) @@ -108,8 +99,6 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages } } - #region 画板设置事件处理 - private void ToggleSwitchShowCursor_Toggled(object sender, RoutedEventArgs e) { if (!_isLoaded) return; @@ -295,111 +284,32 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages SettingsManager.SaveSettingsToFile(); } - #endregion - - #region 墨迹识别事件处理 - - private void ToggleSwitchEnableInkToShape_Toggled(object sender, RoutedEventArgs e) + private void ToggleSwitchAutoSwitchTwoFingerGesture_Toggled(object sender, RoutedEventArgs e) { if (!_isLoaded) return; - SettingsManager.Settings.InkToShape.IsInkToShapeEnabled = CardEnableInkToShape.IsOn; + SettingsManager.Settings.Gesture.AutoSwitchTwoFingerGesture = CardAutoSwitchTwoFingerGesture.IsOn; SettingsManager.SaveSettingsToFile(); } - private void ComboBoxShapeRecognitionEngine_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - if (!_isLoaded || ComboBoxShapeRecognitionEngine == null) return; - int idx = ComboBoxShapeRecognitionEngine.SelectedIndex; - if (idx < 0) idx = 0; - if (idx > 2) idx = 2; - SettingsManager.Settings.InkToShape.ShapeRecognitionEngine = idx; - SettingsManager.SaveSettingsToFile(); - } - - private void ToggleSwitchEnableWinRtHandwritingStrokeBeautify_Toggled(object sender, RoutedEventArgs e) + private void ToggleSwitchEnableTwoFingerRotationOnSelection_Toggled(object sender, RoutedEventArgs e) { if (!_isLoaded) return; - SettingsManager.Settings.InkToShape.EnableWinRtHandwritingStrokeBeautify = CardEnableWinRtHandwritingStrokeBeautify.IsOn; + SettingsManager.Settings.Gesture.IsEnableTwoFingerRotationOnSelection = CardEnableTwoFingerRotationOnSelection.IsOn; SettingsManager.SaveSettingsToFile(); } - private void ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled(object sender, RoutedEventArgs e) + private void ToggleSwitchEnablePalmEraser_Toggled(object sender, RoutedEventArgs e) { if (!_isLoaded) return; - SettingsManager.Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = CardEnableInkToShapeNoFakePressureRectangle.IsOn; + SettingsManager.Settings.Canvas.EnablePalmEraser = CardEnablePalmEraser.IsOn; SettingsManager.SaveSettingsToFile(); } - private void ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled(object sender, RoutedEventArgs e) + private void ComboBoxPalmEraserSensitivity_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!_isLoaded) return; - SettingsManager.Settings.InkToShape.IsInkToShapeNoFakePressureTriangle = CardEnableInkToShapeNoFakePressureTriangle.IsOn; + SettingsManager.Settings.Canvas.PalmEraserSensitivity = ComboBoxPalmEraserSensitivity.SelectedIndex; SettingsManager.SaveSettingsToFile(); } - - private void ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged(object sender, RoutedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.InkToShape.IsInkToShapeTriangle = (bool)ToggleCheckboxEnableInkToShapeTriangle.IsChecked; - SettingsManager.SaveSettingsToFile(); - } - - private void ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged(object sender, RoutedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.InkToShape.IsInkToShapeRectangle = (bool)ToggleCheckboxEnableInkToShapeRectangle.IsChecked; - SettingsManager.SaveSettingsToFile(); - } - - private void ToggleCheckboxEnableInkToShapeRounded_CheckedChanged(object sender, RoutedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.InkToShape.IsInkToShapeRounded = (bool)ToggleCheckboxEnableInkToShapeRounded.IsChecked; - SettingsManager.SaveSettingsToFile(); - } - - private void ToggleSwitchAutoStraightenLine_Toggled(object sender, RoutedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.Canvas.AutoStraightenLine = CardAutoStraightenLine.IsOn; - SettingsManager.SaveSettingsToFile(); - } - - private void AutoStraightenLineThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.Canvas.AutoStraightenLineThreshold = (int)e.NewValue; - SettingsManager.SaveSettingsToFile(); - } - - private void LineStraightenSensitivitySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.InkToShape.LineStraightenSensitivity = e.NewValue; - SettingsManager.SaveSettingsToFile(); - } - - private void ToggleSwitchHighPrecisionLineStraighten_Toggled(object sender, RoutedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.Canvas.HighPrecisionLineStraighten = CardHighPrecisionLineStraighten.IsOn; - SettingsManager.SaveSettingsToFile(); - } - - private void ToggleSwitchLineEndpointSnapping_Toggled(object sender, RoutedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.Canvas.LineEndpointSnapping = CardLineEndpointSnapping.IsOn; - SettingsManager.SaveSettingsToFile(); - } - - private void LineEndpointSnappingThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { - if (!_isLoaded) return; - SettingsManager.Settings.Canvas.LineEndpointSnappingThreshold = (int)e.NewValue; - SettingsManager.SaveSettingsToFile(); - } - - #endregion } } diff --git a/Ink Canvas/Windows/SettingsViews/Pages/HomePage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/HomePage.xaml index 90bf28f8..55eb9e80 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/HomePage.xaml +++ b/Ink Canvas/Windows/SettingsViews/Pages/HomePage.xaml @@ -71,13 +71,20 @@ - + + + + + + diff --git a/Ink Canvas/Windows/SettingsViews/Pages/InkRecognitionPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/InkRecognitionPage.xaml new file mode 100644 index 00000000..a061cd42 --- /dev/null +++ b/Ink Canvas/Windows/SettingsViews/Pages/InkRecognitionPage.xaml @@ -0,0 +1,174 @@ + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ink Canvas/Windows/SettingsViews/Pages/InkRecognitionPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/InkRecognitionPage.xaml.cs new file mode 100644 index 00000000..029cef07 --- /dev/null +++ b/Ink Canvas/Windows/SettingsViews/Pages/InkRecognitionPage.xaml.cs @@ -0,0 +1,166 @@ +using Ink_Canvas.Windows.SettingsViews.Helpers; +using System; +using System.Diagnostics; +using System.Windows; +using System.Windows.Controls; + +namespace Ink_Canvas.Windows.SettingsViews.Pages +{ + public partial class InkRecognitionPage : iNKORE.UI.WPF.Modern.Controls.Page + { + private bool _isLoaded = false; + + public InkRecognitionPage() + { + InitializeComponent(); + Loaded += InkRecognitionPage_Loaded; + } + + private void InkRecognitionPage_Loaded(object sender, RoutedEventArgs e) + { + LoadSettings(); + _isLoaded = true; + } + + private void LoadSettings() + { + _isLoaded = false; + + try + { + var settings = SettingsManager.Settings; + + if (settings.InkToShape != null) + { + CardEnableInkToShape.IsOn = settings.InkToShape.IsInkToShapeEnabled; + int eng = settings.InkToShape.ShapeRecognitionEngine; + if (eng < 0) eng = 0; + if (eng > 2) eng = 2; + ComboBoxShapeRecognitionEngine.SelectedIndex = eng; + CardEnableWinRtHandwritingStrokeBeautify.IsOn = settings.InkToShape.EnableWinRtHandwritingStrokeBeautify; + CardEnableInkToShapeNoFakePressureRectangle.IsOn = settings.InkToShape.IsInkToShapeNoFakePressureRectangle; + CardEnableInkToShapeNoFakePressureTriangle.IsOn = settings.InkToShape.IsInkToShapeNoFakePressureTriangle; + ToggleCheckboxEnableInkToShapeTriangle.IsChecked = settings.InkToShape.IsInkToShapeTriangle; + ToggleCheckboxEnableInkToShapeRectangle.IsChecked = settings.InkToShape.IsInkToShapeRectangle; + ToggleCheckboxEnableInkToShapeRounded.IsChecked = settings.InkToShape.IsInkToShapeRounded; + LineStraightenSensitivitySlider.Value = settings.InkToShape.LineStraightenSensitivity; + } + + if (settings.Canvas != null) + { + CardAutoStraightenLine.IsOn = settings.Canvas.AutoStraightenLine; + AutoStraightenLineThresholdSlider.Value = settings.Canvas.AutoStraightenLineThreshold; + CheckboxHighPrecisionLineStraighten.IsChecked = settings.Canvas.HighPrecisionLineStraighten; + CardLineEndpointSnapping.IsOn = settings.Canvas.LineEndpointSnapping; + } + } + catch (Exception ex) + { + Debug.WriteLine($"加载墨迹纠正设置时出错: {ex.Message}"); + } + + _isLoaded = true; + } + + private void ToggleSwitchEnableInkToShape_Toggled(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.InkToShape.IsInkToShapeEnabled = CardEnableInkToShape.IsOn; + SettingsManager.SaveSettingsToFile(); + } + + private void ComboBoxShapeRecognitionEngine_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (!_isLoaded || ComboBoxShapeRecognitionEngine == null) return; + int idx = ComboBoxShapeRecognitionEngine.SelectedIndex; + if (idx < 0) idx = 0; + if (idx > 2) idx = 2; + SettingsManager.Settings.InkToShape.ShapeRecognitionEngine = idx; + SettingsManager.SaveSettingsToFile(); + } + + private void ToggleSwitchEnableWinRtHandwritingStrokeBeautify_Toggled(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.InkToShape.EnableWinRtHandwritingStrokeBeautify = CardEnableWinRtHandwritingStrokeBeautify.IsOn; + SettingsManager.SaveSettingsToFile(); + } + + private void ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = CardEnableInkToShapeNoFakePressureRectangle.IsOn; + SettingsManager.SaveSettingsToFile(); + } + + private void ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.InkToShape.IsInkToShapeNoFakePressureTriangle = CardEnableInkToShapeNoFakePressureTriangle.IsOn; + SettingsManager.SaveSettingsToFile(); + } + + private void ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.InkToShape.IsInkToShapeTriangle = (bool)ToggleCheckboxEnableInkToShapeTriangle.IsChecked; + SettingsManager.SaveSettingsToFile(); + } + + private void ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.InkToShape.IsInkToShapeRectangle = (bool)ToggleCheckboxEnableInkToShapeRectangle.IsChecked; + SettingsManager.SaveSettingsToFile(); + } + + private void ToggleCheckboxEnableInkToShapeRounded_CheckedChanged(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.InkToShape.IsInkToShapeRounded = (bool)ToggleCheckboxEnableInkToShapeRounded.IsChecked; + SettingsManager.SaveSettingsToFile(); + } + + private void ToggleSwitchAutoStraightenLine_Toggled(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.Canvas.AutoStraightenLine = CardAutoStraightenLine.IsOn; + SettingsManager.SaveSettingsToFile(); + } + + private void AutoStraightenLineThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.Canvas.AutoStraightenLineThreshold = (int)e.NewValue; + SettingsManager.SaveSettingsToFile(); + } + + private void LineStraightenSensitivitySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.InkToShape.LineStraightenSensitivity = e.NewValue; + SettingsManager.SaveSettingsToFile(); + } + + private void CheckboxHighPrecisionLineStraighten_CheckedChanged(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.Canvas.HighPrecisionLineStraighten = (bool)CheckboxHighPrecisionLineStraighten.IsChecked; + SettingsManager.SaveSettingsToFile(); + } + + private void ToggleSwitchLineEndpointSnapping_Toggled(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.Canvas.LineEndpointSnapping = CardLineEndpointSnapping.IsOn; + SettingsManager.SaveSettingsToFile(); + } + + private void LineEndpointSnappingThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + if (!_isLoaded) return; + SettingsManager.Settings.Canvas.LineEndpointSnappingThreshold = (int)e.NewValue; + SettingsManager.SaveSettingsToFile(); + } + } +} diff --git a/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml index 96b262e4..71e5765c 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml +++ b/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml @@ -69,6 +69,36 @@ SwitchName="ToggleSwitchPPTOnlyMode" Toggled="ToggleSwitchPPTOnlyMode_Toggled" /> + + + + + + + + + + + + + + + + + + diff --git a/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml.cs index e24f70cc..5b582560 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/Pages/StartupPage.xaml.cs @@ -3,6 +3,7 @@ using Ink_Canvas.Windows.SettingsViews.Helpers; using System; using System.Diagnostics; using System.Windows; +using System.Windows.Controls; namespace Ink_Canvas.Windows.SettingsViews.Pages { @@ -44,6 +45,20 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages } CardExternalProtocol.IsOn = settings.Advanced.IsEnableUriScheme; + + if (settings.Startup != null) + { + CardEnableNibMode.IsOn = settings.Startup.IsEnableNibMode; + + if (settings.Startup.CrashAction == 0) + { + RadioCrashSilentRestart.IsChecked = true; + } + else + { + RadioCrashNoAction.IsChecked = true; + } + } } catch (Exception ex) { @@ -151,6 +166,70 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages #endregion + #region 笔尖模式事件处理 + + private void ToggleSwitchEnableNibMode_Toggled(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + + try + { + bool newState = CardEnableNibMode.IsOn; + SettingsManager.Settings.Startup.IsEnableNibMode = newState; + + var window = Application.Current.MainWindow; + if (window is MainWindow mw) + { + if (mw.ToggleSwitchEnableNibMode != null) + mw.ToggleSwitchEnableNibMode.IsOn = newState; + if (mw.BoardToggleSwitchEnableNibMode != null) + mw.BoardToggleSwitchEnableNibMode.IsOn = newState; + + if (newState) + mw.BoundsWidth = SettingsManager.Settings.Advanced.NibModeBoundsWidth; + else + mw.BoundsWidth = SettingsManager.Settings.Advanced.FingerModeBoundsWidth; + } + + SettingsManager.SaveSettingsToFile(); + } + catch (Exception ex) + { + Debug.WriteLine($"设置笔尖模式时出错: {ex.Message}"); + } + } + + #endregion + + #region 崩溃后操作事件处理 + + private void RadioCrashAction_Checked(object sender, RoutedEventArgs e) + { + if (!_isLoaded) return; + + try + { + if (RadioCrashSilentRestart != null && RadioCrashSilentRestart.IsChecked == true) + { + App.CrashAction = App.CrashActionType.SilentRestart; + SettingsManager.Settings.Startup.CrashAction = 0; + } + else if (RadioCrashNoAction != null && RadioCrashNoAction.IsChecked == true) + { + App.CrashAction = App.CrashActionType.NoAction; + SettingsManager.Settings.Startup.CrashAction = 1; + } + SettingsManager.SaveSettingsToFile(); + App.SyncCrashActionFromSettings(); + } + catch (Exception ex) + { + Debug.WriteLine($"设置崩溃操作时出错: {ex.Message}"); + } + } + + #endregion + #region 模式设置事件处理 private void ToggleSwitchPPTOnlyMode_Toggled(object sender, RoutedEventArgs e) diff --git a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml index 4e152651..1d8c4941 100644 --- a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml +++ b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml @@ -205,10 +205,31 @@ x:Name="CanvasPageItem" Content="画板" Tag="CanvasPage" + SelectsOnInvoked="True" ToolTipService.ToolTip="画板与墨迹设置"> + + + + + + + + + + + + diff --git a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs index c4530740..de50c779 100644 --- a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs @@ -43,6 +43,7 @@ namespace Ink_Canvas.Windows.SettingsViews { "UpdatePage", typeof(UpdatePage) }, { "ExperimentalPage", typeof(ExperimentalPage) }, { "CanvasPage", typeof(CanvasPage) }, + { "InkRecognitionPage", typeof(InkRecognitionPage) }, { "DebugPage", typeof(IconographyPage) }, { "AboutPage", typeof(AboutPage) }, { "Settings", typeof(SettingsPage) },