9_|Kor!r5d@mQ#Mza;TA#?eX|OHX&x&w2
zhb@x^wHlk3b)x;tmdow;_+aw46?J
Date: Fri, 18 Jul 2025 11:50:44 +0800
Subject: [PATCH 06/33] =?UTF-8?q?=E6=92=A4=E9=94=80=20Commit=20ab88c34?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml.cs | 3 ---
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 3 ---
...vasForClass.csproj.AssemblyReference.cache | Bin 34904 -> 35087 bytes
.../InkCanvasForClass_MarkupCompile.cache | 12 ++++++------
4 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs
index 1c23aaf3..9e71192e 100644
--- a/Ink Canvas/MainWindow.xaml.cs
+++ b/Ink Canvas/MainWindow.xaml.cs
@@ -160,11 +160,9 @@ namespace Ink_Canvas {
private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) {
var inkCanvas1 = sender as InkCanvas;
if (inkCanvas1 == null) return;
-<<<<<<< HEAD
// 使用辅助方法设置光标
SetCursorBasedOnEditingMode(inkCanvas1);
-=======
if (Settings.Canvas.IsShowCursor) {
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink || drawingShapeMode != 0)
inkCanvas1.ForceCursor = true;
@@ -173,7 +171,6 @@ namespace Ink_Canvas {
} else {
inkCanvas1.ForceCursor = false;
}
->>>>>>> parent of ab88c34 (fix:issue #23)
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser;
}
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index acbf9419..e5c26dfa 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -303,17 +303,14 @@ namespace Ink_Canvas {
}
else {
isLastTouchEraser = false;
-<<<<<<< HEAD
currentPalmEraserShape = null;
// 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
// 修复触屏状态下几何绘制功能不可用的问题:在几何绘制模式下不应该因为forceEraser而直接返回
if (forceEraser && drawingShapeMode == 0) return;
-=======
inkCanvas.EraserShape =
forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5);
if (forceEraser) return;
->>>>>>> parent of b46cbcc (fix:issue #23)
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
}
diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache
index 0b5fd9240bff6bb31501ffff0de21a426c46b473..93610cbd1b7b1ad281b4eb72a3828e09cd532b79 100644
GIT binary patch
delta 406
zcmcaHfvJBI(}Z)3rW4PLX(i|9=9cDVmQ==g=4C55C+3wU7RPuxI_DRq>ZRo5FfuYQ
zF#L)v+`nbpWI;wFYew6&%$!s!eSLjbD}7IAX9Z_hD5a2_n3<;!H%=d6oIb?3$%^5c
zn=={Zm?oYR*MqA=wbmy;F(tJKZgEc&$l|*klkYRhPS#@-wPmy?%X)~hAO}p&WbE6#
zg=IP;qZ!cm+BlpMo|)$s0e3~fUa
lfT6)y4ODFcse`lI=jYr=4C55C+3wU7RRJy7MH|$Iy&bUrRt^RRp$$bTU7q5hKH7#d6ij3t0L#8#7H{WVD=kUd#ZeAwKzuDXB$pV-in-jJeA(
zS(;gPvJRst#IVf^SX7x9Er15;;xs5cGtVsoZcg_Huyfeil_qPl2qHO2m*Y_b05!Ep
AoB#j-
diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
index c6334c11..0335c48f 100644
--- a/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
+++ b/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
@@ -4,17 +4,17 @@
winexe
C#
.cs
-E:\ICC CE\ICC CE main\ICC-CE\Ink Canvas\obj\Debug\net472\
+E:\ICC CE\ICC CE main\community\Ink Canvas\obj\Debug\net472\
Ink_Canvas
none
false
TRACE;DEBUG;NETFRAMEWORK;NET472;;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45_OR_GREATER;NET451_OR_GREATER;NET452_OR_GREATER;NET46_OR_GREATER;NET461_OR_GREATER;NET462_OR_GREATER;NET47_OR_GREATER;NET471_OR_GREATER;NET472_OR_GREATER
-E:\ICC CE\ICC CE main\ICC-CE\Ink Canvas\App.xaml
-13173459795
+E:\ICC CE\ICC CE main\community\Ink Canvas\App.xaml
+201780504554
-56-1167124909
-46-47806484
-MainWindow.xaml;Resources\DrawShapeImageDictionary.xaml;Resources\IconImageDictionary.xaml;Resources\SeewoImageDictionary.xaml;Resources\Styles\Dark.xaml;Resources\Styles\Light.xaml;Windows\CountdownTimerWindow.xaml;Windows\CycleProcessBar.xaml;Windows\HasNewUpdateWindow.xaml;Windows\NamesInputWindow.xaml;Windows\OperatingGuideWindow.xaml;Windows\RandWindow.xaml;Windows\YesOrNoNotificationWindow.xaml;
+72875899768
+46-932173576
+Helpers\Plugins\BuiltIn\SuperLauncher\LauncherSettingsControl.xaml;Helpers\Plugins\BuiltIn\SuperLauncher\LauncherWindow.xaml;MainWindow.xaml;Resources\DrawShapeImageDictionary.xaml;Resources\IconImageDictionary.xaml;Resources\SeewoImageDictionary.xaml;Resources\Styles\Dark.xaml;Resources\Styles\Light.xaml;Windows\AddCustomIconWindow.xaml;Windows\AddPickNameBackgroundWindow.xaml;Windows\CountdownTimerWindow.xaml;Windows\CustomIconWindow.xaml;Windows\CycleProcessBar.xaml;Windows\HasNewUpdateWindow.xaml;Windows\ManagePickNameBackgroundsWindow.xaml;Windows\NamesInputWindow.xaml;Windows\OperatingGuideWindow.xaml;Windows\PluginSettingsWindow.xaml;Windows\RandWindow.xaml;Windows\YesOrNoNotificationWindow.xaml;
False
From 938ca648f1bcea64bce8a6001b3cafb01fe51216 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 11:53:55 +0800
Subject: [PATCH 07/33] =?UTF-8?q?=E6=92=A4=E9=94=80=E6=93=8D=E4=BD=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index e5c26dfa..9ffa811d 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -74,6 +74,8 @@ namespace Ink_Canvas {
}
else {
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None;
+ // 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
+ inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
inkCanvas.EditingMode = InkCanvasEditingMode.None;
}
}
From 4feec82b03dc45e0aa217338df28ba3c0ec71572 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 16:12:04 +0800
Subject: [PATCH 08/33] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml | 2 +-
Ink Canvas/MainWindow.xaml.cs | 53 ++--
Ink Canvas/MainWindow_cs/MW_BoardIcons.cs | 30 +-
Ink Canvas/MainWindow_cs/MW_Colors.cs | 20 --
.../MainWindow_cs/MW_FloatingBarIcons.cs | 99 +++----
.../MainWindow_cs/MW_SelectionGestures.cs | 19 ++
Ink Canvas/MainWindow_cs/MW_Settings.cs | 12 +-
Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 264 +++++-------------
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 117 ++------
9 files changed, 191 insertions(+), 425 deletions(-)
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index d6b787e8..67b01802 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -2869,7 +2869,7 @@
CheckIsDrawingShapesInMultiTouchMode() {
@@ -131,323 +131,232 @@ namespace Ink_Canvas {
private async void BtnDrawLine_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- if (lastMouseDownSender == sender) {
- forceEraser = true;
- drawingShapeMode = 1;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
- CancelSingleFingerDragMode();
- }
- else {
- // 即使不是长按,也设置必要的绘图状态
- forceEraser = true;
- drawingShapeMode = 1;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
- isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
- }
-
+ EnterShapeDrawingMode(1);
+ CancelSingleFingerDragMode();
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
ImageDrawLine.BeginAnimation(OpacityProperty, dA);
}
-
DrawShapePromptToPen();
}
private async void BtnDrawDashedLine_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- if (lastMouseDownSender == sender) {
- forceEraser = true;
- drawingShapeMode = 8;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
- CancelSingleFingerDragMode();
- }
-
+ EnterShapeDrawingMode(8);
+ CancelSingleFingerDragMode();
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
ImageDrawDashedLine.BeginAnimation(OpacityProperty, dA);
}
-
DrawShapePromptToPen();
}
private async void BtnDrawDotLine_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- if (lastMouseDownSender == sender) {
- forceEraser = true;
- drawingShapeMode = 18;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
- CancelSingleFingerDragMode();
- }
-
+ EnterShapeDrawingMode(18);
+ CancelSingleFingerDragMode();
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
ImageDrawDotLine.BeginAnimation(OpacityProperty, dA);
}
-
DrawShapePromptToPen();
}
private async void BtnDrawArrow_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- if (lastMouseDownSender == sender) {
- forceEraser = true;
- drawingShapeMode = 2;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
- CancelSingleFingerDragMode();
- }
- else {
- // 即使不是长按,也设置必要的绘图状态
- forceEraser = true;
- drawingShapeMode = 2;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
- isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
- }
-
+ EnterShapeDrawingMode(2);
+ CancelSingleFingerDragMode();
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
ImageDrawArrow.BeginAnimation(OpacityProperty, dA);
}
-
DrawShapePromptToPen();
}
private async void BtnDrawParallelLine_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- if (lastMouseDownSender == sender) {
- forceEraser = true;
- drawingShapeMode = 15;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
- CancelSingleFingerDragMode();
- }
-
+ EnterShapeDrawingMode(15);
+ CancelSingleFingerDragMode();
lastMouseDownSender = null;
if (isLongPressSelected) {
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
ImageDrawParallelLine.BeginAnimation(OpacityProperty, dA);
}
-
DrawShapePromptToPen();
}
private async void BtnDrawCoordinate1_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 11;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(11);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCoordinate2_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 12;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(12);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCoordinate3_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 13;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(13);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCoordinate4_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 14;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(14);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCoordinate5_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 17;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(17);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawRectangle_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 3;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
- isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
+ EnterShapeDrawingMode(3);
CancelSingleFingerDragMode();
+ isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawRectangleCenter_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 19;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(19);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawEllipse_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 4;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(4);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCircle_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 5;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(5);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCenterEllipse_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 16;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(16);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCenterEllipseWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 23;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(23);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawDashedCircle_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 10;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(10);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawHyperbola_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 24;
+ EnterShapeDrawingMode(24);
drawMultiStepShapeCurrentStep = 0;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawHyperbolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 25;
+ EnterShapeDrawingMode(25);
drawMultiStepShapeCurrentStep = 0;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawParabola1_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 20;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(20);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawParabolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 22;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(22);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawParabola2_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 21;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(21);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCylinder_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 6;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(6);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCone_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 7;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
+ EnterShapeDrawingMode(7);
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
private async void BtnDrawCuboid_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
- forceEraser = true;
- drawingShapeMode = 9;
+ EnterShapeDrawingMode(9);
isFirstTouchCuboid = true;
CuboidFrontRectIniP = new Point();
CuboidFrontRectEndP = new Point();
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- inkCanvas.IsManipulationEnabled = true;
CancelSingleFingerDragMode();
+ lastMouseDownSender = null;
DrawShapePromptToPen();
}
@@ -460,20 +369,17 @@ namespace Ink_Canvas {
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
return;
}
-
if (isSingleFingerDragMode) return;
- // 处理形状绘制模式
+ // 处理几何绘制模式
if (drawingShapeMode != 0) {
if (isLastTouchEraser) return;
//EraserContainer.Background = null;
//ImageEraser.Visibility = Visibility.Visible;
-
// 修复触屏状态下几何绘制功能不可用的问题
// 在几何绘制模式下,即使isWaitUntilNextTouchDown为true,也应该处理触摸移动事件
// 只有当多点触控时才需要等待下一次触摸
if (isWaitUntilNextTouchDown && dec.Count > 1) return;
-
if (dec.Count > 1) {
isWaitUntilNextTouchDown = true;
try {
@@ -485,19 +391,19 @@ namespace Ink_Canvas {
}
return;
}
-
// 在几何绘制模式下,确保处理单点触控的移动事件
Point touchPoint = e.GetTouchPoint(inkCanvas).Position;
MouseTouchMove(touchPoint);
return; // 处理完几何绘制后直接返回,不执行后面的代码
}
- // 触摸移动时保持自定义光标显示
- if (inkCanvas.EditingMode != InkCanvasEditingMode.None)
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
-
-
- MouseTouchMove(e.GetTouchPoint(inkCanvas).Position);
+ // 其它模式下,允许橡皮、套索、批注等正常工作,不覆盖EditingMode
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint ||
+ inkCanvas.EditingMode == InkCanvasEditingMode.Select ||
+ inkCanvas.EditingMode == InkCanvasEditingMode.Ink) {
+ // 允许正常橡皮、套索、批注
+ return;
+ }
}
private int drawMultiStepShapeCurrentStep = 0; //多笔完成的图形 当前所处在的笔画
@@ -1317,42 +1223,6 @@ namespace Ink_Canvas {
private Point CuboidFrontRectIniP = new Point();
private Point CuboidFrontRectEndP = new Point();
- private void Main_Grid_TouchUp(object sender, TouchEventArgs e) {
-
- inkCanvas.ReleaseAllTouchCaptures();
- ViewboxFloatingBar.IsHitTestVisible = true;
- BlackboardUIGridForInkReplay.IsHitTestVisible = true;
-
- // 在几何绘制模式下,确保正确处理触摸抬起事件
- if (drawingShapeMode != 0) {
- // 如果是几何绘制模式,确保将临时绘制的图形添加到永久图形中
- if (lastTempStroke != null) {
- // 将临时笔画添加到历史记录中
- var strokes = new StrokeCollection();
- strokes.Add(lastTempStroke);
- timeMachine.CommitStrokeUserInputHistory(strokes);
- // 清除临时笔画引用,以便下次绘制
- lastTempStroke = null;
- }
-
- if (lastTempStrokeCollection != null && lastTempStrokeCollection.Count > 0) {
- // 将临时笔画集合添加到历史记录中
- timeMachine.CommitStrokeUserInputHistory(lastTempStrokeCollection);
- // 清除临时笔画集合引用,以便下次绘制
- lastTempStrokeCollection = new StrokeCollection();
- }
-
- // 如果不是长按选中的状态,则需要在抬起手指后重置isWaitUntilNextTouchDown
- if (!isLongPressSelected && dec.Count == 0) {
- isWaitUntilNextTouchDown = false;
- }
- }
-
- inkCanvas_MouseUp(sender, null);
- // 修改此处逻辑,在长按选择图形模式下保持isWaitUntilNextTouchDown
- if (dec.Count == 0 && !isLongPressSelected) isWaitUntilNextTouchDown = false;
- }
-
private Stroke lastTempStroke = null;
private StrokeCollection lastTempStrokeCollection = new StrokeCollection();
@@ -1735,5 +1605,15 @@ namespace Ink_Canvas {
}
}
}
+
+ // 在MainWindow类中添加:
+ private void EnterShapeDrawingMode(int mode) {
+ forceEraser = true;
+ forcePointEraser = false;
+ isLastTouchEraser = false;
+ drawingShapeMode = mode;
+ inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ SetCursorBasedOnEditingMode(inkCanvas);
+ }
}
}
\ No newline at end of file
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index 9ffa811d..b76cac43 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -15,6 +15,11 @@ namespace Ink_Canvas {
#region Multi-Touch
private bool isInMultiTouchMode = false;
+ private InkCanvasEditingMode prePalmEraserEditingMode = InkCanvasEditingMode.Ink;
+ private List dec = new List();
+ private bool isSingleFingerDragMode = false;
+ private Point centerPoint = new Point(0, 0);
+ private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink;
private void BorderMultiTouchMode_MouseUp(object sender, MouseButtonEventArgs e) {
if (isInMultiTouchMode) {
@@ -81,6 +86,7 @@ namespace Ink_Canvas {
}
private void MainWindow_StylusDown(object sender, StylusDownEventArgs e) {
+ SetCursorBasedOnEditingMode(inkCanvas);
inkCanvas.CaptureStylus();
ViewboxFloatingBar.IsHitTestVisible = false;
@@ -200,7 +206,6 @@ namespace Ink_Canvas {
private Point iniP = new Point(0, 0);
private bool isLastTouchEraser = false;
- private bool forcePointEraser = true;
// 用于记录手掌擦的尺寸和形状
private StylusShape currentPalmEraserShape = null;
@@ -233,111 +238,35 @@ namespace Ink_Canvas {
}
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) {
- // 确保触摸时显示自定义光标
- if (Settings.Canvas.IsShowCursor) {
- inkCanvas.ForceCursor = true;
- System.Windows.Forms.Cursor.Show();
- }
-
+ SetCursorBasedOnEditingMode(inkCanvas);
inkCanvas.CaptureTouch(e.TouchDevice);
- ViewboxFloatingBar.IsHitTestVisible = false;
- BlackboardUIGridForInkReplay.IsHitTestVisible = false;
- if (!isHidingSubPanelsWhenInking) {
- isHidingSubPanelsWhenInking = true;
- HideSubPanels(); // 书写时自动隐藏二级菜单
- }
-
- if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position;
- if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP);
- inkCanvas.Opacity = 1;
-
- // 如果已处于多指书写模式,禁用手掌擦功能
- if (isInMultiTouchMode) {
- isLastTouchEraser = false;
- currentPalmEraserShape = null;
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
+ // 橡皮状态下只return,保证橡皮状态可保持
return;
}
-
- // 如果已经处于手掌擦状态,保持状态不变
- if (isLastTouchEraser && currentPalmEraserShape != null) {
- inkCanvas.EraserShape = currentPalmEraserShape;
- inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) {
+ // 套索选状态下只return,保证套索选可用
return;
}
-
- double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0;
- if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
- eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
-
- // 检查触控点数量,只有大于等于三个触控点时才激活手掌擦功能
- if (dec.Count >= 3 && boundsWidth > BoundsWidth) {
- // 保存当前的编辑模式,以便恢复
- if (!isLastTouchEraser) {
- prePalmEraserEditingMode = inkCanvas.EditingMode;
- // 模拟点击橡皮选项卡
- EraserIcon_Click(null, null);
- }
-
- isLastTouchEraser = true;
- if (drawingShapeMode == 0 && forceEraser) return;
- if (boundsWidth > BoundsWidth * 2.5) {
- // 直接使用固定尺寸的矩形黑板擦形状,不随触控面积动态变化
- currentPalmEraserShape = GetPalmRectangleEraserShape(eraserMultiplier);
- inkCanvas.EraserShape = currentPalmEraserShape;
- TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint;
- }
- else {
- if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 &&
- Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) {
- isLastTouchEraser = false;
- currentPalmEraserShape = null;
- inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly;
- inkCanvas.Opacity = 0.1;
- }
- else {
- // 手掌橡皮固定为矩形黑板擦,大小由设置决定
- currentPalmEraserShape = GetPalmRectangleEraserShape(eraserMultiplier);
- inkCanvas.EraserShape = currentPalmEraserShape;
- TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint;
- }
+ if (drawingShapeMode == 9) {
+ if (isFirstTouchCuboid) {
+ CuboidFrontRectIniP = e.GetTouchPoint(inkCanvas).Position;
}
+ // 允许MouseTouchMove在TouchMove时处理
+ return;
}
- else {
- isLastTouchEraser = false;
- currentPalmEraserShape = null;
- // 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
- inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
- // 修复触屏状态下几何绘制功能不可用的问题:在几何绘制模式下不应该因为forceEraser而直接返回
- if (forceEraser && drawingShapeMode == 0) return;
- inkCanvas.EraserShape =
- forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5);
- if (forceEraser) return;
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ if (drawingShapeMode != 0) {
+ return;
}
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink) {
+ return;
+ }
+ inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
- private double GetTouchBoundWidth(TouchEventArgs e) {
- var args = e.GetTouchPoint(null).Bounds;
- double value;
- if (!Settings.Advanced.IsQuadIR) value = args.Width;
- else value = Math.Sqrt(args.Width * args.Height); //四边红外
- if (Settings.Advanced.IsSpecialScreen) value *= Settings.Advanced.TouchMultiplier;
- return value;
- }
-
- //记录触摸设备ID
- private List dec = new List();
-
- //中心点
- private Point centerPoint;
- private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink;
- private bool isSingleFingerDragMode = false;
-
- // 保存触发手掌擦前的编辑模式,用于手掌擦结束后恢复
- private InkCanvasEditingMode prePalmEraserEditingMode = InkCanvasEditingMode.Ink;
-
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) {
+ SetCursorBasedOnEditingMode(inkCanvas);
inkCanvas.CaptureTouch(e.TouchDevice);
ViewboxFloatingBar.IsHitTestVisible = false;
From 02e143217e4af5a57af5ff8fe29d23e8c9750a1a Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 16:21:39 +0800
Subject: [PATCH 09/33] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
index e36f7675..db468872 100644
--- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
+++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
@@ -103,10 +103,18 @@ namespace Ink_Canvas {
}
private void BtnPen_Click(object sender, RoutedEventArgs e) {
+ // 如果当前已是批注模式,再次点击弹出批注子面板
+ if (penType == 0 && inkCanvas.EditingMode == InkCanvasEditingMode.Ink && !drawingAttributes.IsHighlighter) {
+ return;
+ }
+ // 否则只切换到批注模式,不弹出子面板
forceEraser = false;
forcePointEraser = false;
isLastTouchEraser = false;
drawingShapeMode = 0;
+ penType = 0;
+ drawingAttributes.IsHighlighter = false;
+ drawingAttributes.StylusTip = StylusTip.Ellipse;
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
SetCursorBasedOnEditingMode(inkCanvas);
}
From 854be23cfb06e245ef0c1ef5c6ab54141ef41804 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 16:28:50 +0800
Subject: [PATCH 10/33] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 40 +++++++++++++++++-----
1 file changed, 32 insertions(+), 8 deletions(-)
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index b76cac43..817ecdbe 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -28,7 +28,9 @@ namespace Ink_Canvas {
inkCanvas.StylusUp -= MainWindow_StylusUp;
inkCanvas.TouchDown -= MainWindow_TouchDown;
inkCanvas.TouchDown += Main_Grid_TouchDown;
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ }
inkCanvas.Children.Clear();
isInMultiTouchMode = false;
@@ -48,7 +50,9 @@ namespace Ink_Canvas {
inkCanvas.StylusUp += MainWindow_StylusUp;
inkCanvas.TouchDown += MainWindow_TouchDown;
inkCanvas.TouchDown -= Main_Grid_TouchDown;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ }
inkCanvas.Children.Clear();
isInMultiTouchMode = true;
}
@@ -75,13 +79,17 @@ namespace Ink_Canvas {
inkCanvas.EraserShape = currentPalmEraserShape;
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint;
isLastTouchEraser = true;
- inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
+ }
}
else {
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None;
// 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ }
}
}
@@ -262,10 +270,16 @@ namespace Ink_Canvas {
if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink) {
return;
}
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ }
}
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) {
+ // 橡皮状态下不做任何切换,直接return,保证橡皮可持续
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
+ return;
+ }
SetCursorBasedOnEditingMode(inkCanvas);
inkCanvas.CaptureTouch(e.TouchDevice);
@@ -287,11 +301,17 @@ namespace Ink_Canvas {
if (inkCanvas.EditingMode == InkCanvasEditingMode.None ||
inkCanvas.EditingMode == InkCanvasEditingMode.Select) return;
lastInkCanvasEditingMode = inkCanvas.EditingMode;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ }
}
}
private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) {
+ // 橡皮状态下不做任何切换,直接return,保证橡皮可持续
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
+ return;
+ }
inkCanvas.ReleaseAllTouchCaptures();
ViewboxFloatingBar.IsHitTestVisible = true;
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
@@ -299,7 +319,9 @@ namespace Ink_Canvas {
//手势完成后切回之前的状态
if (dec.Count > 1)
if (inkCanvas.EditingMode == InkCanvasEditingMode.None)
- inkCanvas.EditingMode = lastInkCanvasEditingMode;
+ if (lastInkCanvasEditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = lastInkCanvasEditingMode;
+ }
dec.Remove(e.TouchDevice.Id);
inkCanvas.Opacity = 1;
@@ -347,7 +369,9 @@ namespace Ink_Canvas {
private void Main_Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) {
if (e.Manipulators.Count() != 0) return;
if (forceEraser) return;
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ }
}
private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) {
From 69ae0ffc71c050c05a0efc69a85e2b8043a3461f Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 17:01:18 +0800
Subject: [PATCH 11/33] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index 817ecdbe..d25e621f 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -316,6 +316,16 @@ namespace Ink_Canvas {
ViewboxFloatingBar.IsHitTestVisible = true;
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
+ // 新增:几何绘制模式下,触摸抬手时自动落笔
+ if (drawingShapeMode != 0) {
+ var mouseArgs = new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
+ {
+ RoutedEvent = UIElement.MouseLeftButtonUpEvent,
+ Source = inkCanvas
+ };
+ inkCanvas_MouseUp(inkCanvas, mouseArgs);
+ }
+
//手势完成后切回之前的状态
if (dec.Count > 1)
if (inkCanvas.EditingMode == InkCanvasEditingMode.None)
From 64128929852af29060c14c377347fa0a5f1dc94c Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 17:02:17 +0800
Subject: [PATCH 12/33] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index d25e621f..e15f3725 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -292,6 +292,11 @@ namespace Ink_Canvas {
var touchPoint = e.GetTouchPoint(inkCanvas);
centerPoint = touchPoint.Position;
+ // 新增:几何绘制模式下,记录初始点
+ if (drawingShapeMode != 0) {
+ iniP = touchPoint.Position;
+ }
+
//记录第一根手指点击时的 StrokeCollection
lastTouchDownStrokeCollection = inkCanvas.Strokes.Clone();
}
From 2d7eff820531a38599a6493bb9ca291f67eb3a06 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 17:59:17 +0800
Subject: [PATCH 13/33] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../MainWindow_cs/MW_FloatingBarIcons.cs | 3 ++
.../MainWindow_cs/MW_SelectionGestures.cs | 3 ++
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 38 +++++++++++++++++++
3 files changed, 44 insertions(+)
diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
index 095a99a7..5c236158 100644
--- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
+++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
@@ -1440,6 +1440,7 @@ namespace Ink_Canvas {
}
private void EraserIcon_Click(object sender, RoutedEventArgs e) {
+ EnterMultiTouchModeIfNeeded();
bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint;
forceEraser = false;
forcePointEraser = true;
@@ -1464,6 +1465,7 @@ namespace Ink_Canvas {
}
private void BoardEraserIcon_Click(object sender, RoutedEventArgs e) {
+ EnterMultiTouchModeIfNeeded();
bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint;
forceEraser = false;
forcePointEraser = true;
@@ -1487,6 +1489,7 @@ namespace Ink_Canvas {
}
private void EraserIconByStrokes_Click(object sender, RoutedEventArgs e) {
+ EnterMultiTouchModeIfNeeded();
if (lastBorderMouseDownObject != null && lastBorderMouseDownObject is Panel)
((Panel)lastBorderMouseDownObject).Background = new SolidColorBrush(Colors.Transparent);
diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
index 134621c2..1f666345 100644
--- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
@@ -244,6 +244,7 @@ namespace Ink_Canvas {
}
private void BtnSelect_Click(object sender, RoutedEventArgs e) {
+ ExitMultiTouchModeIfNeeded();
forceEraser = true;
drawingShapeMode = 0;
inkCanvas.IsManipulationEnabled = false;
@@ -424,6 +425,7 @@ namespace Ink_Canvas {
}
private void LassoSelect_Click(object sender, RoutedEventArgs e) {
+ ExitMultiTouchModeIfNeeded();
forceEraser = false;
forcePointEraser = false;
isLastTouchEraser = false;
@@ -433,6 +435,7 @@ namespace Ink_Canvas {
}
private void BtnLassoSelect_Click(object sender, RoutedEventArgs e) {
+ ExitMultiTouchModeIfNeeded();
forceEraser = false;
forcePointEraser = false;
isLastTouchEraser = false;
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index e15f3725..eba66daf 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -479,5 +479,43 @@ namespace Ink_Canvas {
}
}
}
+
+ // 退出多指书写模式,恢复InkCanvas的TouchDown事件绑定
+ private void ExitMultiTouchModeIfNeeded()
+ {
+ if (isInMultiTouchMode)
+ {
+ inkCanvas.StylusDown -= MainWindow_StylusDown;
+ inkCanvas.StylusMove -= MainWindow_StylusMove;
+ inkCanvas.StylusUp -= MainWindow_StylusUp;
+ inkCanvas.TouchDown -= MainWindow_TouchDown;
+ inkCanvas.TouchDown += Main_Grid_TouchDown;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint)
+ {
+ inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ }
+ inkCanvas.Children.Clear();
+ isInMultiTouchMode = false;
+ }
+ }
+
+ // 进入多指书写模式,绑定Main_Grid_TouchDown
+ private void EnterMultiTouchModeIfNeeded()
+ {
+ if (!isInMultiTouchMode)
+ {
+ inkCanvas.StylusDown += MainWindow_StylusDown;
+ inkCanvas.StylusMove += MainWindow_StylusMove;
+ inkCanvas.StylusUp += MainWindow_StylusUp;
+ inkCanvas.TouchDown += MainWindow_TouchDown;
+ inkCanvas.TouchDown -= Main_Grid_TouchDown;
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint)
+ {
+ inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ }
+ inkCanvas.Children.Clear();
+ isInMultiTouchMode = true;
+ }
+ }
}
}
From e8f0793feb94140e76aff35dc7a805499919c016 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 18:52:01 +0800
Subject: [PATCH 14/33] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/AssemblyInfo.cs | 4 ++--
Ink Canvas/Properties/AssemblyInfo.cs | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/Ink Canvas/AssemblyInfo.cs b/Ink Canvas/AssemblyInfo.cs
index 83f0988b..b54137ea 100644
--- a/Ink Canvas/AssemblyInfo.cs
+++ b/Ink Canvas/AssemblyInfo.cs
@@ -49,5 +49,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.7.1.0")]
-[assembly: AssemblyFileVersion("1.7.1.0")]
+[assembly: AssemblyVersion("1.7.1.1")]
+[assembly: AssemblyFileVersion("1.7.1.1")]
diff --git a/Ink Canvas/Properties/AssemblyInfo.cs b/Ink Canvas/Properties/AssemblyInfo.cs
index f3175786..b13a892c 100644
--- a/Ink Canvas/Properties/AssemblyInfo.cs
+++ b/Ink Canvas/Properties/AssemblyInfo.cs
@@ -49,5 +49,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.7.1.0")]
-[assembly: AssemblyFileVersion("1.7.1.0")]
+[assembly: AssemblyVersion("1.7.1.1")]
+[assembly: AssemblyFileVersion("1.7.1.1")]
From a92e58abf1cffb354ace9ea6e01e64a37b7f4bc3 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 19:20:06 +0800
Subject: [PATCH 15/33] =?UTF-8?q?improve:=E7=99=BD=E6=9D=BF=E7=94=BB?=
=?UTF-8?q?=E5=B8=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml.cs | 44 +++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs
index 4bb247bc..31cd090d 100644
--- a/Ink Canvas/MainWindow.xaml.cs
+++ b/Ink Canvas/MainWindow.xaml.cs
@@ -24,9 +24,15 @@ using System.Windows.Media.Animation;
using System.Reflection;
using Brushes = System.Windows.Media.Brushes;
using Point = System.Windows.Point;
+using System.Collections.Generic;
namespace Ink_Canvas {
public partial class MainWindow : Window {
+ // 新增:每一页一个Canvas对象
+ private List whiteboardPages = new List();
+ private int currentPageIndex = 0;
+ private System.Windows.Controls.Canvas currentCanvas = null;
+
#region Window Initialization
public MainWindow() {
@@ -109,6 +115,13 @@ namespace Ink_Canvas {
// 注册输入事件
inkCanvas.PreviewMouseDown += inkCanvas_PreviewMouseDown;
inkCanvas.StylusDown += inkCanvas_StylusDown;
+
+ // 初始化第一页Canvas
+ var firstCanvas = new System.Windows.Controls.Canvas();
+ whiteboardPages.Add(firstCanvas);
+ InkCanvasGridForInkReplay.Children.Add(firstCanvas);
+ currentPageIndex = 0;
+ ShowPage(currentPageIndex);
}
#endregion
@@ -1123,5 +1136,36 @@ namespace Ink_Canvas {
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
}
}
+
+ // 显示指定页
+ private void ShowPage(int index)
+ {
+ if (index < 0 || index >= whiteboardPages.Count) return;
+ // 只切换可见性
+ for (int i = 0; i < whiteboardPages.Count; i++)
+ {
+ whiteboardPages[i].Visibility = (i == index) ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
+ }
+ currentCanvas = whiteboardPages[index];
+ currentPageIndex = index;
+ }
+ // 新建页面
+ private void AddNewPage()
+ {
+ var newCanvas = new System.Windows.Controls.Canvas();
+ whiteboardPages.Add(newCanvas);
+ InkCanvasGridForInkReplay.Children.Add(newCanvas);
+ ShowPage(whiteboardPages.Count - 1);
+ }
+ // 删除当前页面
+ private void DeleteCurrentPage()
+ {
+ if (whiteboardPages.Count <= 1) return;
+ InkCanvasGridForInkReplay.Children.Remove(currentCanvas);
+ whiteboardPages.RemoveAt(currentPageIndex);
+ if (currentPageIndex >= whiteboardPages.Count)
+ currentPageIndex = whiteboardPages.Count - 1;
+ ShowPage(currentPageIndex);
+ }
}
}
\ No newline at end of file
From a0dc60a403c1f806cf9e29f9efa0301b8a384f22 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 21:29:55 +0800
Subject: [PATCH 16/33] =?UTF-8?q?improve:=E8=81=94=E5=8A=A8=E6=A8=A1?=
=?UTF-8?q?=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_PPT.cs | 88 +++++++++++++++++++++++++++++-
1 file changed, 87 insertions(+), 1 deletion(-)
diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs
index b94529ac..3f9c08ff 100644
--- a/Ink Canvas/MainWindow_cs/MW_PPT.cs
+++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs
@@ -194,7 +194,7 @@ namespace Ink_Canvas {
var pptProcesses = Process.GetProcessesByName("POWERPNT");
// 根据设置和进程状态决定模式
- isWPSMode = isWPSSupportOn && wpsRunning;
+ isWPSMode = isWPSSupportOn;
LogHelper.WriteLogToFile($"初始化模式: {(isWPSMode ? "WPS" : "PowerPoint")}", LogHelper.LogType.Info);
@@ -490,6 +490,18 @@ namespace Ink_Canvas {
catch (Exception ex) {
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error);
}
+ // ========== 新增:WPS进程清理调用 ==========
+ if (isWPSMode && pptApplication != null)
+ {
+ try
+ {
+ if (pptApplication.Presentations.Count == 0)
+ {
+ TryCloseExtraWpsProcesses();
+ }
+ }
+ catch { }
+ }
}
private bool isPresentationHaveBlackSpace = false;
@@ -872,6 +884,18 @@ namespace Ink_Canvas {
await Application.Current.Dispatcher.InvokeAsync(() => {
ViewboxFloatingBarMarginAnimation(100, true);
});
+ // ========== 新增:WPS进程清理调用 ==========
+ if (isWPSMode && pptApplication != null)
+ {
+ try
+ {
+ if (pptApplication.Presentations.Count == 0)
+ {
+ TryCloseExtraWpsProcesses();
+ }
+ }
+ catch { }
+ }
}
catch (Exception ex) {
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error);
@@ -1311,5 +1335,67 @@ namespace Ink_Canvas {
base.OnClosed(e);
}
+
+ // ========== 新增:安全关闭多余WPS进程的方法 ==========
+ ///
+ /// 检查并安全关闭多余的WPS进程(仅当所有WPS都未打开PPT时)
+ ///
+ private void TryCloseExtraWpsProcesses()
+ {
+ try
+ {
+ // 检查所有WPS进程是否都没有打开PPT
+ bool allWpsNoPpt = true;
+ foreach (var processName in GetPossibleWPSProcessNames())
+ {
+ foreach (var process in Process.GetProcessesByName(processName))
+ {
+ try
+ {
+ dynamic wpsApp = null;
+ try
+ {
+ wpsApp = Marshal.GetActiveObject(processName + ".Application");
+ }
+ catch { }
+ if (wpsApp != null)
+ {
+ if (wpsApp.Presentations.Count > 0)
+ {
+ allWpsNoPpt = false;
+ break;
+ }
+ }
+ }
+ catch { }
+ }
+ if (!allWpsNoPpt) break;
+ }
+
+ if (allWpsNoPpt)
+ {
+ // 所有WPS都没有打开PPT,可以安全关闭
+ foreach (var processName in GetPossibleWPSProcessNames())
+ {
+ foreach (var process in Process.GetProcessesByName(processName))
+ {
+ try
+ {
+ process.Kill();
+ LogHelper.WriteLogToFile($"已终止WPS进程: {process.ProcessName}({process.Id})", LogHelper.LogType.Info);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"终止WPS进程失败: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"WPS进程清理异常: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
}
}
From 796bd99377254bf16b2fd6952af3ed905b740ad8 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Fri, 18 Jul 2025 21:51:32 +0800
Subject: [PATCH 17/33] =?UTF-8?q?improve:=E6=8F=92=E4=BB=B6=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/Helpers/Plugins/ICCPPPluginAdapter.cs | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/Ink Canvas/Helpers/Plugins/ICCPPPluginAdapter.cs b/Ink Canvas/Helpers/Plugins/ICCPPPluginAdapter.cs
index 1d28d50f..c48ae3f3 100644
--- a/Ink Canvas/Helpers/Plugins/ICCPPPluginAdapter.cs
+++ b/Ink Canvas/Helpers/Plugins/ICCPPPluginAdapter.cs
@@ -33,6 +33,16 @@ namespace Ink_Canvas.Helpers.Plugins
// 尝试从插件数据中读取更多信息
TryReadPluginMetadata();
}
+
+ public ICCPPPluginAdapter()
+ {
+ _pluginPath = string.Empty;
+ _pluginData = new byte[0];
+ PluginPath = string.Empty;
+ _pluginName = "ICCPPPlugin";
+ _pluginVersion = new Version(1, 0, 0);
+ // 可选:初始化其他字段
+ }
///
/// 尝试从插件数据中读取元数据
From ab5493f8c4ef5ac47633d0c2a29e5663d7d92e95 Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Sat, 19 Jul 2025 10:18:16 +0800
Subject: [PATCH 18/33] =?UTF-8?q?improve:=E5=85=89=E6=A0=87=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml | 4 ++--
Ink Canvas/MainWindow.xaml.cs | 13 +++++++++++++
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index 67b01802..5616713a 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -5730,7 +5730,7 @@
-
@@ -5759,7 +5759,7 @@
-
+
Date: Sat, 19 Jul 2025 10:56:30 +0800
Subject: [PATCH 19/33] =?UTF-8?q?improve:=E5=85=89=E6=A0=87=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml.cs | 39 ++++++++++-----------
Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 5 +++
2 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs
index 415e126b..b0beabcd 100644
--- a/Ink Canvas/MainWindow.xaml.cs
+++ b/Ink Canvas/MainWindow.xaml.cs
@@ -171,16 +171,23 @@ namespace Ink_Canvas {
private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) {
var inkCanvas1 = sender as InkCanvas;
if (inkCanvas1 == null) return;
-
+
// 使用辅助方法设置光标
SetCursorBasedOnEditingMode(inkCanvas1);
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;
else
inkCanvas1.ForceCursor = false;
} else {
- inkCanvas1.ForceCursor = false;
+ // 套索选择模式下始终强制显示光标,即使用户设置不显示光标
+ if (inkCanvas1.EditingMode == InkCanvasEditingMode.Select) {
+ inkCanvas1.ForceCursor = true;
+ } else {
+ inkCanvas1.ForceCursor = false;
+ }
}
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser;
@@ -579,23 +586,20 @@ namespace Ink_Canvas {
// 添加一个辅助方法,根据当前编辑模式设置光标
public void SetCursorBasedOnEditingMode(InkCanvas canvas)
{
- // 套索选模式下光标始终显示
- if (!Settings.Canvas.IsShowCursor) {
+ // 套索选择模式下光标始终显示,无论用户设置如何
+ if (canvas.EditingMode == InkCanvasEditingMode.Select) {
canvas.UseCustomCursor = true;
canvas.ForceCursor = true;
-
- if (canvas.EditingMode == InkCanvasEditingMode.Select) {
- canvas.Cursor = Cursors.Cross;
- }
-
+ canvas.Cursor = Cursors.Cross;
System.Windows.Forms.Cursor.Show();
return;
}
+ // 其他模式按照用户设置处理
if (Settings.Canvas.IsShowCursor) {
canvas.UseCustomCursor = true;
canvas.ForceCursor = true;
-
+
// 根据编辑模式设置不同的光标
if (canvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
canvas.Cursor = Cursors.Cross;
@@ -603,16 +607,11 @@ namespace Ink_Canvas {
var sri = Application.GetResourceStream(new Uri("Resources/Cursors/Pen.cur", UriKind.Relative));
if (sri != null)
canvas.Cursor = new Cursor(sri.Stream);
- } else if (canvas.EditingMode == InkCanvasEditingMode.Select) {
- canvas.Cursor = Cursors.Cross;
}
-
+
// 确保光标可见,无论是鼠标、触控还是手写笔
System.Windows.Forms.Cursor.Show();
-
- // 强制应用光标设置
- canvas.ForceCursor = true;
-
+
// 确保手写笔模式下也能显示光标
if (Tablet.TabletDevices.Count > 0) {
foreach (TabletDevice device in Tablet.TabletDevices) {
@@ -634,14 +633,14 @@ namespace Ink_Canvas {
private void inkCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
// 使用辅助方法设置光标
- SetCursorBasedOnEditingMode(inkCanvas);
+ SetCursorBasedOnEditingMode(sender as InkCanvas);
}
// 手写笔输入
private void inkCanvas_StylusDown(object sender, StylusDownEventArgs e)
{
// 使用辅助方法设置光标
- SetCursorBasedOnEditingMode(inkCanvas);
+ SetCursorBasedOnEditingMode(sender as InkCanvas);
}
// 触摸结束,恢复光标
diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
index db468872..863ba1ff 100644
--- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
+++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
@@ -371,6 +371,11 @@ namespace Ink_Canvas {
#endregion
private void inkCanvas_TouchMove(object sender, TouchEventArgs e) {
+ // 确保套索选择模式下触摸移动时光标保持可见
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) {
+ SetCursorBasedOnEditingMode(inkCanvas);
+ }
+
// 如果处于手掌擦状态,继续使用相同的橡皮形状
if (isLastTouchEraser && currentPalmEraserShape != null) {
inkCanvas.EraserShape = currentPalmEraserShape;
From 98175152db810e170bba3e165b2be446ee501bbc Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Sat, 19 Jul 2025 13:35:28 +0800
Subject: [PATCH 20/33] =?UTF-8?q?improve:=E5=85=89=E6=A0=87=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml | 16 +-
Ink Canvas/MainWindow.xaml.cs | 16 +
Ink Canvas/MainWindow_cs/MW_Eraser.cs | 634 ++++++++++++++++++
Ink Canvas/MainWindow_cs/MW_Eraser.xaml | 140 ++++
.../MainWindow_cs/MW_FloatingBarIcons.cs | 30 +-
Ink Canvas/MainWindow_cs/MW_Settings.cs | 26 +-
Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 3 +
.../InkCanvasForClass_MarkupCompile.cache | 6 +-
8 files changed, 855 insertions(+), 16 deletions(-)
create mode 100644 Ink Canvas/MainWindow_cs/MW_Eraser.cs
create mode 100644 Ink Canvas/MainWindow_cs/MW_Eraser.xaml
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index 5616713a..af843d29 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -33,7 +33,13 @@
Stylus.IsTouchFeedbackEnabled="False">
-
+
+
+
+
+
+
+
@@ -121,6 +127,7 @@
+
@@ -2884,6 +2891,13 @@
ManipulationStarting="inkCanvas_ManipulationStarting"
SelectionChanged="inkCanvas_SelectionChanged"
StrokeCollected="inkCanvas_StrokeCollected" ClipToBounds="False" Background="Transparent" />
+
+
+
private void RestorePPTStrokesFromZip(string tempDir, Dictionary metadata) {
try {
+ // 确保当前处于PPT放映模式
+ if (BtnPPTSlideShowEnd.Visibility != Visibility.Visible || pptApplication == null) {
+ throw new InvalidOperationException("当前不在PPT放映模式,无法恢复PPT墨迹");
+ }
+
// 清空当前墨迹
ClearStrokes(true);
timeMachine.ClearStrokeHistory();
@@ -448,7 +459,7 @@ namespace Ink_Canvas {
}
// 恢复当前页面的墨迹
- if (pptApplication != null && pptApplication.SlideShowWindows.Count > 0) {
+ if (pptApplication.SlideShowWindows.Count > 0) {
int currentSlide = pptApplication.SlideShowWindows[1].View.CurrentShowPosition;
if (memoryStreams[currentSlide] != null && memoryStreams[currentSlide].Length > 0) {
memoryStreams[currentSlide].Position = 0;
@@ -470,6 +481,11 @@ namespace Ink_Canvas {
///
private void RestoreWhiteboardStrokesFromZip(string tempDir, Dictionary metadata) {
try {
+ // 确保当前处于白板模式
+ if (currentMode == 0) {
+ throw new InvalidOperationException("当前不在白板模式,无法恢复白板墨迹");
+ }
+
// 清空当前墨迹
ClearStrokes(true);
timeMachine.ClearStrokeHistory();
@@ -525,27 +541,27 @@ namespace Ink_Canvas {
/// 打开单个墨迹文件
///
private void OpenSingleStrokeFile(string filePath) {
- var fileStreamHasNoStroke = false;
+ var fileStreamHasNoStroke = false;
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) {
- var strokes = new StrokeCollection(fs);
- fileStreamHasNoStroke = strokes.Count == 0;
- if (!fileStreamHasNoStroke) {
- ClearStrokes(true);
- timeMachine.ClearStrokeHistory();
- inkCanvas.Strokes.Add(strokes);
- LogHelper.NewLog($"Strokes Insert: Strokes Count: {inkCanvas.Strokes.Count.ToString()}");
+ var strokes = new StrokeCollection(fs);
+ fileStreamHasNoStroke = strokes.Count == 0;
+ if (!fileStreamHasNoStroke) {
+ ClearStrokes(true);
+ timeMachine.ClearStrokeHistory();
+ inkCanvas.Strokes.Add(strokes);
+ LogHelper.NewLog($"Strokes Insert: Strokes Count: {inkCanvas.Strokes.Count.ToString()}");
+ }
}
- }
- if (fileStreamHasNoStroke)
+ if (fileStreamHasNoStroke)
using (var ms = new MemoryStream(File.ReadAllBytes(filePath))) {
- ms.Seek(0, SeekOrigin.Begin);
- var strokes = new StrokeCollection(ms);
- ClearStrokes(true);
- timeMachine.ClearStrokeHistory();
- inkCanvas.Strokes.Add(strokes);
- LogHelper.NewLog($"Strokes Insert (2): Strokes Count: {strokes.Count.ToString()}");
- }
+ ms.Seek(0, SeekOrigin.Begin);
+ var strokes = new StrokeCollection(ms);
+ ClearStrokes(true);
+ timeMachine.ClearStrokeHistory();
+ inkCanvas.Strokes.Add(strokes);
+ LogHelper.NewLog($"Strokes Insert (2): Strokes Count: {strokes.Count.ToString()}");
+ }
}
}
}
From fd8d13447c0b165d057dec0984df5271f012392c Mon Sep 17 00:00:00 2001
From: unknown <2564608840@qq.com>
Date: Sat, 19 Jul 2025 17:31:08 +0800
Subject: [PATCH 33/33] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?=
=?UTF-8?q?=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/AssemblyInfo.cs | 4 ++--
Ink Canvas/MainWindow.xaml | 2 +-
Ink Canvas/Properties/AssemblyInfo.cs | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/Ink Canvas/AssemblyInfo.cs b/Ink Canvas/AssemblyInfo.cs
index 3f0ced2e..0f179263 100644
--- a/Ink Canvas/AssemblyInfo.cs
+++ b/Ink Canvas/AssemblyInfo.cs
@@ -49,5 +49,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.7.1.2")]
-[assembly: AssemblyFileVersion("1.7.1.2")]
+[assembly: AssemblyVersion("1.7.1.3")]
+[assembly: AssemblyFileVersion("1.7.1.3")]
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index 23e01666..1b5bb979 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -2323,7 +2323,7 @@
FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchSaveFullPageStrokes_Toggled" />
-
+
diff --git a/Ink Canvas/Properties/AssemblyInfo.cs b/Ink Canvas/Properties/AssemblyInfo.cs
index 214974d7..cd7e451f 100644
--- a/Ink Canvas/Properties/AssemblyInfo.cs
+++ b/Ink Canvas/Properties/AssemblyInfo.cs
@@ -49,5 +49,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.7.1.2")]
-[assembly: AssemblyFileVersion("1.7.1.2")]
+[assembly: AssemblyVersion("1.7.1.3")]
+[assembly: AssemblyFileVersion("1.7.1.3")]