@@ -851,15 +851,6 @@
|
|||||||
</ui:SimpleStackPanel>
|
</ui:SimpleStackPanel>
|
||||||
<TextBlock Text="# 允许选中墨迹后对墨迹进行双指或多指缩放操作(此设置不受“允许双指旋转”设置的影响)" TextWrapping="Wrap"
|
<TextBlock Text="# 允许选中墨迹后对墨迹进行双指或多指缩放操作(此设置不受“允许双指旋转”设置的影响)" TextWrapping="Wrap"
|
||||||
Foreground="#a1a1aa" />
|
Foreground="#a1a1aa" />
|
||||||
<Line HorizontalAlignment="Center" X1="0" Y1="0" X2="400" Y2="0" Stroke="#3f3f46"
|
|
||||||
StrokeThickness="1" Margin="0,4,0,4" />
|
|
||||||
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
|
|
||||||
<TextBlock Foreground="#fafafa" Text="启用手掌擦" VerticalAlignment="Center" FontSize="14" Margin="0,0,16,0" />
|
|
||||||
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchEnablePalmEraser" IsOn="True"
|
|
||||||
FontFamily="Microsoft YaHei UI" FontWeight="Bold"
|
|
||||||
Toggled="ToggleSwitchEnablePalmEraser_Toggled" />
|
|
||||||
</ui:SimpleStackPanel>
|
|
||||||
<TextBlock Text="# 关闭后,手掌将无法触发橡皮擦功能" TextWrapping="Wrap" Foreground="#a1a1aa" />
|
|
||||||
</ui:SimpleStackPanel>
|
</ui:SimpleStackPanel>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
<GroupBox Name="GroupBoxInkRecognition">
|
<GroupBox Name="GroupBoxInkRecognition">
|
||||||
|
|||||||
@@ -265,25 +265,10 @@ namespace Ink_Canvas {
|
|||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增:记录上一个模式
|
|
||||||
private InkCanvasEditingMode lastEditingMode = InkCanvasEditingMode.Ink;
|
|
||||||
|
|
||||||
private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) {
|
private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) {
|
||||||
var inkCanvas1 = sender as InkCanvas;
|
var inkCanvas1 = sender as InkCanvas;
|
||||||
if (inkCanvas1 == null) return;
|
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);
|
SetCursorBasedOnEditingMode(inkCanvas1);
|
||||||
if (Settings.Canvas.IsShowCursor) {
|
if (Settings.Canvas.IsShowCursor) {
|
||||||
@@ -294,13 +279,31 @@ namespace Ink_Canvas {
|
|||||||
else
|
else
|
||||||
inkCanvas1.ForceCursor = false;
|
inkCanvas1.ForceCursor = false;
|
||||||
} else {
|
} else {
|
||||||
|
// 套索选择模式下始终强制显示光标,即使用户设置不显示光标
|
||||||
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Select) {
|
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Select) {
|
||||||
inkCanvas1.ForceCursor = true;
|
inkCanvas1.ForceCursor = true;
|
||||||
} else {
|
} else {
|
||||||
inkCanvas1.ForceCursor = false;
|
inkCanvas1.ForceCursor = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser;
|
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
|
#endregion Ink Canvas
|
||||||
@@ -311,16 +314,11 @@ namespace Ink_Canvas {
|
|||||||
public static string settingsFileName = "Settings.json";
|
public static string settingsFileName = "Settings.json";
|
||||||
private bool isLoaded = false;
|
private bool isLoaded = false;
|
||||||
private bool forcePointEraser = false;
|
private bool forcePointEraser = false;
|
||||||
public static bool EnablePalmEraser = true;
|
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs e) {
|
private void Window_Loaded(object sender, RoutedEventArgs e) {
|
||||||
loadPenCanvas();
|
loadPenCanvas();
|
||||||
//加载设置
|
//加载设置
|
||||||
LoadSettings(true);
|
LoadSettings(true);
|
||||||
// 同步手掌擦开关
|
|
||||||
EnablePalmEraser = Settings.Canvas.EnablePalmEraser;
|
|
||||||
if (ToggleSwitchEnablePalmEraser != null)
|
|
||||||
ToggleSwitchEnablePalmEraser.IsOn = EnablePalmEraser;
|
|
||||||
|
|
||||||
// 加载自定义背景颜色
|
// 加载自定义背景颜色
|
||||||
LoadCustomBackgroundColor();
|
LoadCustomBackgroundColor();
|
||||||
@@ -400,14 +398,6 @@ namespace Ink_Canvas {
|
|||||||
|
|
||||||
// 初始化插件系统
|
// 初始化插件系统
|
||||||
InitializePluginSystem();
|
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) {
|
private void SystemEventsOnDisplaySettingsChanged(object sender, EventArgs e) {
|
||||||
@@ -1351,13 +1341,5 @@ namespace Ink_Canvas {
|
|||||||
BorderSettings.Visibility = Visibility.Visible;
|
BorderSettings.Visibility = Visibility.Visible;
|
||||||
BorderSettingsMask.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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -634,68 +634,52 @@ namespace Ink_Canvas {
|
|||||||
|
|
||||||
// 绑定事件处理
|
// 绑定事件处理
|
||||||
overlay.MouseDown += (sender, e) => {
|
overlay.MouseDown += (sender, e) => {
|
||||||
if (!MainWindow.EnablePalmEraser) return;
|
|
||||||
var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
|
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
lastEditingMode = inkCanvas.EditingMode;
|
|
||||||
overlay.CaptureMouse();
|
overlay.CaptureMouse();
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
StartAdvancedEraserOperation(sender);
|
StartAdvancedEraserOperation(sender);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
overlay.MouseUp += (sender, e) => {
|
overlay.MouseUp += (sender, e) => {
|
||||||
if (!MainWindow.EnablePalmEraser) return;
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
|
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.None) {
|
|
||||||
overlay.ReleaseMouseCapture();
|
overlay.ReleaseMouseCapture();
|
||||||
EndAdvancedEraserOperation(sender);
|
EndAdvancedEraserOperation(sender);
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink; // 抬手后自动回到画笔
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
overlay.MouseMove += (sender, e) => {
|
overlay.MouseMove += (sender, e) => {
|
||||||
if (!MainWindow.EnablePalmEraser) return;
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
|
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.None) {
|
|
||||||
var position = e.GetPosition((UIElement)this.FindName("inkCanvas"));
|
var position = e.GetPosition((UIElement)this.FindName("inkCanvas"));
|
||||||
Trace.WriteLine($"Advanced Eraser: Mouse move event triggered at ({position.X:F1}, {position.Y:F1})");
|
Trace.WriteLine($"Advanced Eraser: Mouse move event triggered at ({position.X:F1}, {position.Y:F1})");
|
||||||
UpdateAdvancedEraserPosition(sender, position);
|
UpdateAdvancedEraserPosition(sender, position);
|
||||||
|
} else {
|
||||||
|
Trace.WriteLine($"Advanced Eraser: Mouse move ignored - not in eraser mode, current mode: {inkCanvas.EditingMode}");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 触控笔事件
|
// 触控笔事件
|
||||||
overlay.StylusDown += (sender, e) => {
|
overlay.StylusDown += (sender, e) => {
|
||||||
if (!MainWindow.EnablePalmEraser) return;
|
|
||||||
var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
|
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
|
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
|
||||||
overlay.CaptureStylus();
|
overlay.CaptureStylus();
|
||||||
}
|
}
|
||||||
lastEditingMode = inkCanvas.EditingMode;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
StartAdvancedEraserOperation(sender);
|
StartAdvancedEraserOperation(sender);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
overlay.StylusUp += (sender, e) => {
|
overlay.StylusUp += (sender, e) => {
|
||||||
if (!MainWindow.EnablePalmEraser) return;
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
|
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.None) {
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
|
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
|
||||||
overlay.ReleaseStylusCapture();
|
overlay.ReleaseStylusCapture();
|
||||||
}
|
}
|
||||||
EndAdvancedEraserOperation(sender);
|
EndAdvancedEraserOperation(sender);
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink; // 抬手后自动回到画笔
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
overlay.StylusMove += (sender, e) => {
|
overlay.StylusMove += (sender, e) => {
|
||||||
if (!MainWindow.EnablePalmEraser) return;
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
|
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.None) {
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
var position = e.GetPosition((UIElement)this.FindName("inkCanvas"));
|
var position = e.GetPosition((UIElement)this.FindName("inkCanvas"));
|
||||||
UpdateAdvancedEraserPosition(sender, position);
|
UpdateAdvancedEraserPosition(sender, position);
|
||||||
|
|||||||
@@ -77,8 +77,6 @@ namespace Ink_Canvas
|
|||||||
public OptionalOperation HyperbolaAsymptoteOption { get; set; } = OptionalOperation.Ask;
|
public OptionalOperation HyperbolaAsymptoteOption { get; set; } = OptionalOperation.Ask;
|
||||||
[JsonProperty("isCompressPicturesUploaded")]
|
[JsonProperty("isCompressPicturesUploaded")]
|
||||||
public bool IsCompressPicturesUploaded { get; set; } = false;
|
public bool IsCompressPicturesUploaded { get; set; } = false;
|
||||||
[JsonProperty("enablePalmEraser")]
|
|
||||||
public bool EnablePalmEraser { get; set; } = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum OptionalOperation
|
public enum OptionalOperation
|
||||||
|
|||||||
Reference in New Issue
Block a user