improve:光标显示

This commit is contained in:
2025-07-19 10:56:30 +08:00
parent ab5493f8c4
commit 817ade3e34
2 changed files with 24 additions and 20 deletions
+19 -20
View File
@@ -171,16 +171,23 @@ namespace Ink_Canvas {
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;
// 使用辅助方法设置光标 // 使用辅助方法设置光标
SetCursorBasedOnEditingMode(inkCanvas1); SetCursorBasedOnEditingMode(inkCanvas1);
if (Settings.Canvas.IsShowCursor) { if (Settings.Canvas.IsShowCursor) {
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink || drawingShapeMode != 0) if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink ||
inkCanvas1.EditingMode == InkCanvasEditingMode.Select ||
drawingShapeMode != 0)
inkCanvas1.ForceCursor = true; inkCanvas1.ForceCursor = true;
else else
inkCanvas1.ForceCursor = false; inkCanvas1.ForceCursor = false;
} else { } else {
inkCanvas1.ForceCursor = false; // 套索选择模式下始终强制显示光标,即使用户设置不显示光标
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Select) {
inkCanvas1.ForceCursor = true;
} else {
inkCanvas1.ForceCursor = false;
}
} }
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser; if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser;
@@ -579,23 +586,20 @@ namespace Ink_Canvas {
// 添加一个辅助方法,根据当前编辑模式设置光标 // 添加一个辅助方法,根据当前编辑模式设置光标
public void SetCursorBasedOnEditingMode(InkCanvas canvas) public void SetCursorBasedOnEditingMode(InkCanvas canvas)
{ {
// 套索选模式下光标始终显示 // 套索选模式下光标始终显示,无论用户设置如何
if (!Settings.Canvas.IsShowCursor) { if (canvas.EditingMode == InkCanvasEditingMode.Select) {
canvas.UseCustomCursor = true; canvas.UseCustomCursor = true;
canvas.ForceCursor = true; canvas.ForceCursor = true;
canvas.Cursor = Cursors.Cross;
if (canvas.EditingMode == InkCanvasEditingMode.Select) {
canvas.Cursor = Cursors.Cross;
}
System.Windows.Forms.Cursor.Show(); System.Windows.Forms.Cursor.Show();
return; return;
} }
// 其他模式按照用户设置处理
if (Settings.Canvas.IsShowCursor) { if (Settings.Canvas.IsShowCursor) {
canvas.UseCustomCursor = true; canvas.UseCustomCursor = true;
canvas.ForceCursor = true; canvas.ForceCursor = true;
// 根据编辑模式设置不同的光标 // 根据编辑模式设置不同的光标
if (canvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { if (canvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
canvas.Cursor = Cursors.Cross; canvas.Cursor = Cursors.Cross;
@@ -603,16 +607,11 @@ namespace Ink_Canvas {
var sri = Application.GetResourceStream(new Uri("Resources/Cursors/Pen.cur", UriKind.Relative)); var sri = Application.GetResourceStream(new Uri("Resources/Cursors/Pen.cur", UriKind.Relative));
if (sri != null) if (sri != null)
canvas.Cursor = new Cursor(sri.Stream); canvas.Cursor = new Cursor(sri.Stream);
} else if (canvas.EditingMode == InkCanvasEditingMode.Select) {
canvas.Cursor = Cursors.Cross;
} }
// 确保光标可见,无论是鼠标、触控还是手写笔 // 确保光标可见,无论是鼠标、触控还是手写笔
System.Windows.Forms.Cursor.Show(); System.Windows.Forms.Cursor.Show();
// 强制应用光标设置
canvas.ForceCursor = true;
// 确保手写笔模式下也能显示光标 // 确保手写笔模式下也能显示光标
if (Tablet.TabletDevices.Count > 0) { if (Tablet.TabletDevices.Count > 0) {
foreach (TabletDevice device in Tablet.TabletDevices) { foreach (TabletDevice device in Tablet.TabletDevices) {
@@ -634,14 +633,14 @@ namespace Ink_Canvas {
private void inkCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e) private void inkCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{ {
// 使用辅助方法设置光标 // 使用辅助方法设置光标
SetCursorBasedOnEditingMode(inkCanvas); SetCursorBasedOnEditingMode(sender as InkCanvas);
} }
// 手写笔输入 // 手写笔输入
private void inkCanvas_StylusDown(object sender, StylusDownEventArgs e) private void inkCanvas_StylusDown(object sender, StylusDownEventArgs e)
{ {
// 使用辅助方法设置光标 // 使用辅助方法设置光标
SetCursorBasedOnEditingMode(inkCanvas); SetCursorBasedOnEditingMode(sender as InkCanvas);
} }
// 触摸结束,恢复光标 // 触摸结束,恢复光标
@@ -371,6 +371,11 @@ namespace Ink_Canvas {
#endregion #endregion
private void inkCanvas_TouchMove(object sender, TouchEventArgs e) { private void inkCanvas_TouchMove(object sender, TouchEventArgs e) {
// 确保套索选择模式下触摸移动时光标保持可见
if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) {
SetCursorBasedOnEditingMode(inkCanvas);
}
// 如果处于手掌擦状态,继续使用相同的橡皮形状 // 如果处于手掌擦状态,继续使用相同的橡皮形状
if (isLastTouchEraser && currentPalmEraserShape != null) { if (isLastTouchEraser && currentPalmEraserShape != null) {
inkCanvas.EraserShape = currentPalmEraserShape; inkCanvas.EraserShape = currentPalmEraserShape;