This commit is contained in:
CJK_mkp
2025-06-17 18:45:55 +08:00
parent 87f64ccc81
commit b20e4a041f
7 changed files with 84 additions and 18 deletions
+1 -1
View File
@@ -2390,7 +2390,7 @@
<Grid Name="GridTransparencyFakeBackground" Opacity="0" />
<Label Name="Label" Visibility="Collapsed" Foreground="Gray" Content="0" />
<Grid Name="InkCanvasGridForInkReplay">
<InkCanvas x:Name="inkCanvas" ForceCursor="False"
<InkCanvas x:Name="inkCanvas" ForceCursor="True" UseCustomCursor="True"
TouchUp="Main_Grid_TouchUp" TouchDown="Main_Grid_TouchDown"
TouchMove="inkCanvas_TouchMove"
ManipulationDelta="Main_Grid_ManipulationDelta"
+8 -9
View File
@@ -154,16 +154,11 @@ namespace Ink_Canvas {
private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) {
var inkCanvas1 = sender as InkCanvas;
if (inkCanvas1 == null) return;
// 修复显示画笔光标选项不可用的问题
// 修复"显示画笔光标"选项不可用的问题
if (Settings.Canvas.IsShowCursor) {
inkCanvas1.UseCustomCursor = true;
// 修复触屏和数位笔时光标不显示:只要有输入设备悬停、捕获,或有任何Stylus设备连接就显示
if ((inkCanvas1.EditingMode == InkCanvasEditingMode.Ink || drawingShapeMode != 0)
&& (inkCanvas1.IsStylusDirectlyOver || inkCanvas1.IsMouseDirectlyOver || inkCanvas1.IsStylusCaptured || inkCanvas1.IsMouseCaptured
|| Stylus.CurrentStylusDevice != null))
inkCanvas1.ForceCursor = true;
else
inkCanvas1.ForceCursor = false;
// 修复触屏和数位笔时光标不显示:强制显示光标,不再依赖鼠标或触控状态
inkCanvas1.ForceCursor = true;
} else {
inkCanvas1.UseCustomCursor = false;
inkCanvas1.ForceCursor = false;
@@ -368,6 +363,8 @@ namespace Ink_Canvas {
if (Settings.Canvas.IsShowCursor)
{
inkCanvas.ForceCursor = true;
// 确保鼠标光标对触摸可见
System.Windows.Forms.Cursor.Show();
// 新增:当处于套索选择模式时保持光标可见
if (inkCanvas.EditingMode == InkCanvasEditingMode.Select)
inkCanvas.Cursor = Cursors.Cross;
@@ -383,8 +380,10 @@ namespace Ink_Canvas {
private void inkCanvas_TouchUp(object sender, TouchEventArgs e)
{
// 修改:根据当前模式和设置恢复光标状态
if (Settings.Canvas.IsShowCursor && inkCanvas.EditingMode == InkCanvasEditingMode.Ink) {
if (Settings.Canvas.IsShowCursor) {
inkCanvas.ForceCursor = true;
// 确保鼠标光标对触摸可见
System.Windows.Forms.Cursor.Show();
} else {
inkCanvas.ForceCursor = false;
System.Windows.Forms.Cursor.Show();
+68 -6
View File
@@ -56,7 +56,7 @@ namespace Ink_Canvas {
#endregion Floating Bar Control
private int drawingShapeMode = 0;
private bool isLongPressSelected = false; // 用于存是否是选中状态,便于后期抬笔后不做切换到笔的处理
private bool isLongPressSelected = false; // 用于存是否是"选中"状态,便于后期抬笔后不做切换到笔的处理
#region Buttons
@@ -429,6 +429,8 @@ namespace Ink_Canvas {
private void inkCanvas_TouchMove(object sender, TouchEventArgs e) {
if (isSingleFingerDragMode) return;
// 处理形状绘制模式
if (drawingShapeMode != 0) {
if (isLastTouchEraser) return;
//EraserContainer.Background = null;
@@ -443,15 +445,75 @@ namespace Ink_Canvas {
catch {
Trace.WriteLine("lastTempStrokeCollection failed.");
}
return;
}
if (inkCanvas.EditingMode != InkCanvasEditingMode.None)
inkCanvas.EditingMode = InkCanvasEditingMode.None;
}
MouseTouchMove(e.GetTouchPoint(inkCanvas).Position);
// 触摸移动时保持自定义光标显示
if (Settings.Canvas.IsShowCursor) {
inkCanvas.ForceCursor = true;
System.Windows.Forms.Cursor.Show();
}
if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position;
if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP);
inkCanvas.Opacity = 1;
double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0;
if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
if (boundsWidth > BoundsWidth) {
isLastTouchEraser = true;
if (drawingShapeMode == 0 && forceEraser) return;
if (boundsWidth > BoundsWidth * 2.5) {
double k = 1;
switch (Settings.Canvas.EraserSize) {
case 0:
k = 0.5;
break;
case 1:
k = 0.8;
break;
case 3:
k = 1.25;
break;
case 4:
k = 1.8;
break;
}
inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier,
boundsWidth * k * eraserMultiplier);
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
}
else {
if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 &&
Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) {
isLastTouchEraser = false;
inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly;
inkCanvas.Opacity = 0.1;
}
else {
inkCanvas.EraserShape = new EllipseStylusShape(5, 5);
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
}
}
}
else {
isLastTouchEraser = false;
// 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
if (forceEraser) return;
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
if (inkCanvas.EditingMode != InkCanvasEditingMode.None)
return;
if (e.TouchDevice == null) {
System.Windows.Forms.Cursor.Show();
} else {
System.Windows.Forms.Cursor.Hide();
}
}
private int drawMultiStepShapeCurrentStep = 0; //多笔完成的图形 当前所处在的笔画
@@ -183,6 +183,11 @@ namespace Ink_Canvas {
private bool forcePointEraser = true;
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) {
// 确保触摸时显示自定义光标
if (Settings.Canvas.IsShowCursor) {
inkCanvas.ForceCursor = true;
System.Windows.Forms.Cursor.Show();
}
inkCanvas.CaptureTouch(e.TouchDevice);
ViewboxFloatingBar.IsHitTestVisible = false;
+1 -1
View File
@@ -1,4 +1,4 @@
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "467145DD780C5E147BCA6025B5E2B49160B6EF9E"
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "1D11E3F5636ADFC403B4C9CD768CCA9048DA6765"
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
@@ -1,4 +1,4 @@
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "467145DD780C5E147BCA6025B5E2B49160B6EF9E"
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "1D11E3F5636ADFC403B4C9CD768CCA9048DA6765"
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。