From 13625b37a87f7b9e14df10c0d2b80ecaff57df4c Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 21:45:29 +0800
Subject: [PATCH 01/16] =?UTF-8?q?improve:=E8=87=AA=E5=8A=A8=E6=9B=B4?=
=?UTF-8?q?=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/Helpers/AutoUpdateHelper.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Ink Canvas/Helpers/AutoUpdateHelper.cs b/Ink Canvas/Helpers/AutoUpdateHelper.cs
index 5ed1aec1..6783821c 100644
--- a/Ink Canvas/Helpers/AutoUpdateHelper.cs
+++ b/Ink Canvas/Helpers/AutoUpdateHelper.cs
@@ -792,7 +792,6 @@ namespace Ink_Canvas.Helpers
string updateBatPath = Path.Combine(Path.GetTempPath(), "ICCUpdate_" + Guid.NewGuid().ToString().Substring(0, 8) + ".bat");
batchContent.AppendLine($"echo @echo off > \"{updateBatPath}\"");
-
batchContent.AppendLine($"echo set PROC_ID={currentProcessId} >> \"{updateBatPath}\"");
batchContent.AppendLine($"echo :CHECK_PROCESS >> \"{updateBatPath}\"");
batchContent.AppendLine($"echo tasklist /fi \"PID eq %PROC_ID%\" ^| find \"%PROC_ID%\" ^> nul >> \"{updateBatPath}\"");
@@ -833,8 +832,9 @@ namespace Ink_Canvas.Helpers
}
else
{
+ batchContent.AppendLine($"echo taskkill /F /IM \"InkCanvasForClass.exe\" >nul 2>nul >> \"{updateBatPath}\"");
batchContent.AppendLine($"echo :: 检查应用程序是否已经在运行 >> \"{updateBatPath}\"");
- batchContent.AppendLine($"echo tasklist /FI \"IMAGENAME eq Ink Canvas.exe\" | find /i \"Ink Canvas.exe\" > nul >> \"{updateBatPath}\"");
+ batchContent.AppendLine($"echo tasklist /FI \"IMAGENAME eq InkCanvasForClass.exe\" | find /i \"InkCanvasForClass.exe\" > nul >> \"{updateBatPath}\"");
batchContent.AppendLine($"echo if %%ERRORLEVEL%% neq 0 ( >> \"{updateBatPath}\"");
batchContent.AppendLine($"echo echo 启动应用程序... >> \"{updateBatPath}\"");
batchContent.AppendLine($"echo start \"\" \"{appPath}\" >> \"{updateBatPath}\"");
From 271829f9c1a4985b92af73d937245fde958c0c3e Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 22:16:43 +0800
Subject: [PATCH 02/16] =?UTF-8?q?Revert=20"improve:=E6=89=8B=E6=8E=8C?=
=?UTF-8?q?=E6=93=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit eb0cf272187f246b87046290c26d6e3c441eaa68.
---
Ink Canvas/MainWindow.xaml | 9 -----
Ink Canvas/MainWindow.xaml.cs | 54 +++++++++------------------
Ink Canvas/MainWindow_cs/MW_Eraser.cs | 28 +++-----------
Ink Canvas/Resources/Settings.cs | 2 -
4 files changed, 24 insertions(+), 69 deletions(-)
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index 7882364b..7df138b9 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -851,15 +851,6 @@
-
-
-
-
-
-
diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs
index bf93374e..eae06189 100644
--- a/Ink Canvas/MainWindow.xaml.cs
+++ b/Ink Canvas/MainWindow.xaml.cs
@@ -265,25 +265,10 @@ namespace Ink_Canvas {
catch { }
}
- // 新增:记录上一个模式
- private InkCanvasEditingMode lastEditingMode = InkCanvasEditingMode.Ink;
-
private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) {
var inkCanvas1 = sender as InkCanvas;
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);
if (Settings.Canvas.IsShowCursor) {
@@ -294,13 +279,31 @@ namespace Ink_Canvas {
else
inkCanvas1.ForceCursor = false;
} else {
+ // 套索选择模式下始终强制显示光标,即使用户设置不显示光标
if (inkCanvas1.EditingMode == InkCanvasEditingMode.Select) {
inkCanvas1.ForceCursor = true;
} else {
inkCanvas1.ForceCursor = false;
}
}
+
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
@@ -311,16 +314,11 @@ namespace Ink_Canvas {
public static string settingsFileName = "Settings.json";
private bool isLoaded = false;
private bool forcePointEraser = false;
- public static bool EnablePalmEraser = true;
private void Window_Loaded(object sender, RoutedEventArgs e) {
loadPenCanvas();
//加载设置
LoadSettings(true);
- // 同步手掌擦开关
- EnablePalmEraser = Settings.Canvas.EnablePalmEraser;
- if (ToggleSwitchEnablePalmEraser != null)
- ToggleSwitchEnablePalmEraser.IsOn = EnablePalmEraser;
// 加载自定义背景颜色
LoadCustomBackgroundColor();
@@ -400,14 +398,6 @@ namespace Ink_Canvas {
// 初始化插件系统
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) {
@@ -1351,13 +1341,5 @@ namespace Ink_Canvas {
BorderSettings.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();
- }
}
}
\ No newline at end of file
diff --git a/Ink Canvas/MainWindow_cs/MW_Eraser.cs b/Ink Canvas/MainWindow_cs/MW_Eraser.cs
index d80b1a41..0a16cb5c 100644
--- a/Ink Canvas/MainWindow_cs/MW_Eraser.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Eraser.cs
@@ -634,68 +634,52 @@ namespace Ink_Canvas {
// 绑定事件处理
overlay.MouseDown += (sender, e) => {
- if (!MainWindow.EnablePalmEraser) return;
- var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
- lastEditingMode = inkCanvas.EditingMode;
overlay.CaptureMouse();
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
StartAdvancedEraserOperation(sender);
}
};
overlay.MouseUp += (sender, e) => {
- if (!MainWindow.EnablePalmEraser) return;
- var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
- if (inkCanvas.EditingMode == InkCanvasEditingMode.None) {
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
overlay.ReleaseMouseCapture();
EndAdvancedEraserOperation(sender);
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink; // 抬手后自动回到画笔
}
};
overlay.MouseMove += (sender, e) => {
- if (!MainWindow.EnablePalmEraser) return;
- var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
- if (inkCanvas.EditingMode == InkCanvasEditingMode.None) {
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
var position = e.GetPosition((UIElement)this.FindName("inkCanvas"));
Trace.WriteLine($"Advanced Eraser: Mouse move event triggered at ({position.X:F1}, {position.Y:F1})");
UpdateAdvancedEraserPosition(sender, position);
+ } else {
+ Trace.WriteLine($"Advanced Eraser: Mouse move ignored - not in eraser mode, current mode: {inkCanvas.EditingMode}");
}
};
// 触控笔事件
overlay.StylusDown += (sender, e) => {
- if (!MainWindow.EnablePalmEraser) return;
- var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
e.Handled = true;
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
overlay.CaptureStylus();
}
- lastEditingMode = inkCanvas.EditingMode;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
StartAdvancedEraserOperation(sender);
}
};
overlay.StylusUp += (sender, e) => {
- if (!MainWindow.EnablePalmEraser) return;
- var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
- if (inkCanvas.EditingMode == InkCanvasEditingMode.None) {
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
e.Handled = true;
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
overlay.ReleaseStylusCapture();
}
EndAdvancedEraserOperation(sender);
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink; // 抬手后自动回到画笔
}
};
overlay.StylusMove += (sender, e) => {
- if (!MainWindow.EnablePalmEraser) return;
- var inkCanvas = this.FindName("inkCanvas") as InkCanvas;
- if (inkCanvas.EditingMode == InkCanvasEditingMode.None) {
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
e.Handled = true;
var position = e.GetPosition((UIElement)this.FindName("inkCanvas"));
UpdateAdvancedEraserPosition(sender, position);
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index f55bc913..32a6a9eb 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -77,8 +77,6 @@ namespace Ink_Canvas
public OptionalOperation HyperbolaAsymptoteOption { get; set; } = OptionalOperation.Ask;
[JsonProperty("isCompressPicturesUploaded")]
public bool IsCompressPicturesUploaded { get; set; } = false;
- [JsonProperty("enablePalmEraser")]
- public bool EnablePalmEraser { get; set; } = true;
}
public enum OptionalOperation
From 044df3f09ca7faa1a0da782e6fe2f824749f41bc Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 22:57:16 +0800
Subject: [PATCH 03/16] =?UTF-8?q?delete:=E6=89=8B=E6=8E=8C=E6=93=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_BoardIcons.cs | 1 -
.../MainWindow_cs/MW_FloatingBarIcons.cs | 2 -
.../MainWindow_cs/MW_SelectionGestures.cs | 8 +-
Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 17 ---
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 103 +-----------------
5 files changed, 7 insertions(+), 124 deletions(-)
diff --git a/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs b/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs
index b8a6753c..100a6421 100644
--- a/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs
+++ b/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs
@@ -689,7 +689,6 @@ namespace Ink_Canvas {
private void BoardLassoIcon_Click(object sender, RoutedEventArgs e) {
forceEraser = false;
forcePointEraser = false;
- isLastTouchEraser = false;
drawingShapeMode = 0;
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
SetCursorBasedOnEditingMode(inkCanvas);
diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
index 2171f885..37fcd6cf 100644
--- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
+++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
@@ -1449,7 +1449,6 @@ namespace Ink_Canvas {
bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint;
forceEraser = false;
forcePointEraser = true;
- isLastTouchEraser = false;
drawingShapeMode = 0;
// 切换到橡皮擦模式时,确保保存当前图片信息
@@ -1489,7 +1488,6 @@ namespace Ink_Canvas {
bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint;
forceEraser = false;
forcePointEraser = true;
- isLastTouchEraser = false;
drawingShapeMode = 0;
// 启用新的高级橡皮擦系统
diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
index d80c1266..ea33faef 100644
--- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs
@@ -322,13 +322,9 @@ namespace Ink_Canvas {
}
private void GridInkCanvasSelectionCover_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) {
- // 手掌擦时禁止移动/缩放
- if (isLastTouchEraser || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
- return;
- // 三指及以上禁止缩放
- bool disableScale = dec.Count >= 3;
try {
if (dec.Count >= 1) {
+ bool disableScale = dec.Count >= 3;
var md = e.DeltaManipulation;
var trans = md.Translation; // 获得位移矢量
var rotate = md.Rotation; // 获得旋转角度
@@ -426,7 +422,6 @@ namespace Ink_Canvas {
ExitMultiTouchModeIfNeeded();
forceEraser = false;
forcePointEraser = false;
- isLastTouchEraser = false;
drawingShapeMode = 0;
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
SetCursorBasedOnEditingMode(inkCanvas);
@@ -436,7 +431,6 @@ namespace Ink_Canvas {
ExitMultiTouchModeIfNeeded();
forceEraser = false;
forcePointEraser = false;
- isLastTouchEraser = false;
drawingShapeMode = 0;
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
inkCanvas.IsManipulationEnabled = true;
diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
index 24bfc805..b971ccd9 100644
--- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
+++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs
@@ -113,7 +113,6 @@ namespace Ink_Canvas {
// 否则只切换到批注模式,不弹出子面板
forceEraser = false;
forcePointEraser = false;
- isLastTouchEraser = false;
drawingShapeMode = 0;
penType = 0;
drawingAttributes.IsHighlighter = false;
@@ -379,25 +378,10 @@ namespace Ink_Canvas {
SetCursorBasedOnEditingMode(inkCanvas);
}
- // 如果处于手掌擦状态,继续使用相同的橡皮形状
- if (isLastTouchEraser && currentPalmEraserShape != null) {
- inkCanvas.EraserShape = currentPalmEraserShape;
- 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 {
inkCanvas.Strokes.Remove(lastTempStroke);
inkCanvas.Strokes.Remove(lastTempStrokeCollection);
@@ -1653,7 +1637,6 @@ namespace Ink_Canvas {
private void EnterShapeDrawingMode(int mode) {
forceEraser = true;
forcePointEraser = false;
- isLastTouchEraser = false;
drawingShapeMode = mode;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
SetCursorBasedOnEditingMode(inkCanvas);
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index 21e376f1..f2ac48c9 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -16,7 +16,6 @@ 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);
@@ -35,16 +34,8 @@ namespace Ink_Canvas {
inkCanvas.Children.Clear();
isInMultiTouchMode = false;
- // 退出多指书写模式后,恢复手掌擦功能
- // 这里不需要特别操作,因为设置了isInMultiTouchMode = false后,
- // 下次触发Main_Grid_TouchDown时会自动判断并启用手掌擦功能
}
else {
- // 进入多指书写模式前,如果当前处于手掌擦状态,先关闭手掌擦
- if (isLastTouchEraser) {
- isLastTouchEraser = false;
- currentPalmEraserShape = null;
- }
inkCanvas.StylusDown += MainWindow_StylusDown;
inkCanvas.StylusMove += MainWindow_StylusMove;
@@ -69,33 +60,11 @@ namespace Ink_Canvas {
HideSubPanels(); // 书写时自动隐藏二级菜单
}
- double boundWidth = e.GetTouchPoint(null).Bounds.Width, eraserMultiplier = 1.0;
- if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
- eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
- if ((Settings.Advanced.TouchMultiplier != 0 || !Settings.Advanced.IsSpecialScreen)) //启用特殊屏幕且触摸倍数为 0 时禁用橡皮
-
-
- // 修复:只有多指且面积大时才允许手掌擦,单指始终为批注
- if (dec != null && dec.Count >= 2 && (Settings.Advanced.TouchMultiplier != 0 || !Settings.Advanced.IsSpecialScreen)
- && boundWidth > BoundsWidth * 2.5) {
- if (drawingShapeMode == 0 && forceEraser) return;
- currentPalmEraserShape = GetPalmRectangleEraserShape(eraserMultiplier);
- inkCanvas.EraserShape = currentPalmEraserShape;
- TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint;
- isLastTouchEraser = true;
- if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
- inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
- }
- Trace.WriteLine($"[PalmEraser] 触发手掌擦: TouchId={e.TouchDevice.Id}, boundWidth={boundWidth:F2}, eraserMultiplier={eraserMultiplier:F2}, EraserShape={currentPalmEraserShape?.GetType().Name}, TouchCount={dec.Count}");
- }
- else {
- TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None;
- // 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
- inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
- if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
- }
- Trace.WriteLine($"[PalmEraser] 非手掌擦: TouchId={e.TouchDevice.Id}, boundWidth={boundWidth:F2}, eraserMultiplier={eraserMultiplier:F2}, TouchCount={(dec != null ? dec.Count : 0)}");
+ // 只保留普通橡皮逻辑
+ TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None;
+ inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
+ if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
}
@@ -219,37 +188,6 @@ namespace Ink_Canvas {
private int lastTouchDownTime = 0, lastTouchUpTime = 0;
private Point iniP = new Point(0, 0);
- private bool isLastTouchEraser = false;
- // 用于记录手掌擦的尺寸和形状
- private StylusShape currentPalmEraserShape = null;
-
- ///
- /// 根据用户在设置面板中选择的橡皮大小,生成"手掌橡皮"默认的矩形黑板擦形状。
- /// 该形状大小不随触控面积等实时变化,仅受设置的橡皮大小影响。
- ///
- /// 特殊屏幕触摸倍数修正系数
- /// RectangleStylusShape
- private StylusShape GetPalmRectangleEraserShape(double multiplier = 1.0) {
- 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.5;
- break;
- }
-
- // 参照圆形橡皮 k*90 的基准,将矩形宽度压缩到 0.6,保持高度一致
- double baseLen = k * 90 * multiplier;
- return new RectangleStylusShape(baseLen * 0.6, baseLen);
- }
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) {
SetCursorBasedOnEditingMode(inkCanvas);
@@ -346,34 +284,6 @@ namespace Ink_Canvas {
dec.Remove(e.TouchDevice.Id);
inkCanvas.Opacity = 1;
- // 如果是手掌触发的面积擦抬起,需要确保橡皮擦形状被正确重置
- if (isLastTouchEraser && dec.Count == 0) {
- isLastTouchEraser = false;
- currentPalmEraserShape = null; // 清除保存的手掌擦形状
-
- // 当手掌擦消失时,恢复到之前的编辑模式
- if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
- // 根据之前的编辑模式模拟点击相应的选项卡
- if (prePalmEraserEditingMode == InkCanvasEditingMode.Ink) {
- // 模拟点击批注选项卡
- PenIcon_Click(null, null);
- HideSubPanels("pen", true); // 新增:确保高光切换
- } else if (prePalmEraserEditingMode == InkCanvasEditingMode.None ||
- prePalmEraserEditingMode == InkCanvasEditingMode.Select) {
- // 模拟点击光标选项卡
- CursorIcon_Click(null, null);
- HideSubPanels("cursor", true); // 新增:确保高光切换
- } else {
- // 其他编辑模式时恢复之前的模式
- inkCanvas.EditingMode = prePalmEraserEditingMode;
- if (forcePointEraser) {
- // 重新应用当前设置的橡皮擦形状
- ApplyCurrentEraserShape();
- }
- }
- }
- }
-
if (dec.Count == 0)
if (lastTouchDownStrokeCollection.Count() != inkCanvas.Strokes.Count() &&
!(drawingShapeMode == 9 && !isFirstTouchCuboid)) {
@@ -391,7 +301,6 @@ namespace Ink_Canvas {
private void Main_Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) {
if (e.Manipulators.Count() != 0) return;
- if (forceEraser) return;
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
@@ -399,7 +308,7 @@ namespace Ink_Canvas {
private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) {
// 手掌擦时禁止移动/缩放
- if (isLastTouchEraser || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
return;
// 三指及以上禁止缩放
bool disableScale = dec.Count >= 3;
From abf52f0d49ac1802cdd1b089f2c54763e839139a Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 23:05:28 +0800
Subject: [PATCH 04/16] =?UTF-8?q?add:=E6=96=B0=E7=89=88=E6=89=8B=E6=8E=8C?=
=?UTF-8?q?=E6=93=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml | 10 +++++
Ink Canvas/MainWindow_cs/MW_Settings.cs | 6 +++
Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs | 5 +++
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 38 ++++++++++++++++++-
Ink Canvas/Resources/Settings.cs | 2 +
5 files changed, 59 insertions(+), 2 deletions(-)
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index 7df138b9..2853a931 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -851,6 +851,16 @@
+
+
+
+
+
+
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index 23838114..3b7e9635 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -2189,5 +2189,11 @@ namespace Ink_Canvas {
Settings.Automation.IsAutoEnterAnnotationAfterKillHite = ToggleSwitchAutoEnterAnnotationAfterKillHite.IsOn;
SaveSettingsToFile();
}
+
+ private void ToggleSwitchEnablePalmEraser_Toggled(object sender, RoutedEventArgs e) {
+ if (!isLoaded) return;
+ Settings.Canvas.EnablePalmEraser = ToggleSwitchEnablePalmEraser.IsOn;
+ SaveSettingsToFile();
+ }
}
}
diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
index 8dea9ac2..d122a8ae 100644
--- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
@@ -554,6 +554,11 @@ namespace Ink_Canvas {
Settings.Canvas = new Canvas();
}
+ // Palm Eraser
+ if (Settings.Canvas != null) {
+ ToggleSwitchEnablePalmEraser.IsOn = Settings.Canvas.EnablePalmEraser;
+ }
+
// Advanced
if (Settings.Advanced != null) {
TouchMultiplierSlider.Value = Settings.Advanced.TouchMultiplier;
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index f2ac48c9..3d03ba51 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -219,6 +219,11 @@ namespace Ink_Canvas {
}
}
+ // 手掌擦相关变量
+ private bool isPalmEraserActive = false;
+ private InkCanvasEditingMode palmEraserLastEditingMode = InkCanvasEditingMode.Ink;
+ private bool palmEraserLastIsHighlighter = false;
+
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) {
// 橡皮状态下不做任何切换,直接return,保证橡皮可持续
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
@@ -231,6 +236,19 @@ namespace Ink_Canvas {
BlackboardUIGridForInkReplay.IsHitTestVisible = false;
dec.Add(e.TouchDevice.Id);
+ // Palm Eraser 逻辑
+ if (Settings.Canvas.EnablePalmEraser && dec.Count >= 2 && !isPalmEraserActive) {
+ var bounds = e.GetTouchPoint(inkCanvas).Bounds;
+ double palmThreshold = 40; // 触摸面积阈值,可根据实际调整
+ if (bounds.Width >= palmThreshold || bounds.Height >= palmThreshold) {
+ // 记录当前编辑模式和高光状态
+ palmEraserLastEditingMode = inkCanvas.EditingMode;
+ palmEraserLastIsHighlighter = drawingAttributes.IsHighlighter;
+ // 切换为橡皮擦
+ EraserIcon_Click(null, null);
+ isPalmEraserActive = true;
+ }
+ }
//设备1个的时候,记录中心点
if (dec.Count == 1) {
var touchPoint = e.GetTouchPoint(inkCanvas);
@@ -258,13 +276,30 @@ namespace Ink_Canvas {
private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) {
// 橡皮状态下不做任何切换,直接return,保证橡皮可持续
- if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint && !isPalmEraserActive) {
return;
}
inkCanvas.ReleaseAllTouchCaptures();
ViewboxFloatingBar.IsHitTestVisible = true;
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
+ // Palm Eraser 逻辑:所有点抬起后恢复原编辑模式
+ dec.Remove(e.TouchDevice.Id);
+ if (isPalmEraserActive && dec.Count == 0) {
+ // 恢复高光状态
+ drawingAttributes.IsHighlighter = palmEraserLastIsHighlighter;
+ // 恢复编辑模式
+ if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
+ if (palmEraserLastEditingMode == InkCanvasEditingMode.Ink) {
+ PenIcon_Click(null, null);
+ } else if (palmEraserLastEditingMode == InkCanvasEditingMode.Select) {
+ SymbolIconSelect_MouseUp(null, null);
+ } else {
+ inkCanvas.EditingMode = palmEraserLastEditingMode;
+ }
+ }
+ isPalmEraserActive = false;
+ }
// 新增:几何绘制模式下,触摸抬手时自动落笔
if (drawingShapeMode != 0) {
var mouseArgs = new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
@@ -281,7 +316,6 @@ namespace Ink_Canvas {
if (lastInkCanvasEditingMode != InkCanvasEditingMode.EraseByPoint) {
inkCanvas.EditingMode = lastInkCanvasEditingMode;
}
- dec.Remove(e.TouchDevice.Id);
inkCanvas.Opacity = 1;
if (dec.Count == 0)
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index 32a6a9eb..76ebba98 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -77,6 +77,8 @@ namespace Ink_Canvas
public OptionalOperation HyperbolaAsymptoteOption { get; set; } = OptionalOperation.Ask;
[JsonProperty("isCompressPicturesUploaded")]
public bool IsCompressPicturesUploaded { get; set; } = false;
+ [JsonProperty("enablePalmEraser")]
+ public bool EnablePalmEraser { get; set; } = false;
}
public enum OptionalOperation
From 89f54c2b4a5fbd59b6e2c5420c7e4080edb94a4f Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 23:06:39 +0800
Subject: [PATCH 05/16] =?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 620de358..4689bcdc 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.12")]
-[assembly: AssemblyFileVersion("1.7.1.12")]
+[assembly: AssemblyVersion("1.7.1.13")]
+[assembly: AssemblyFileVersion("1.7.1.13")]
diff --git a/Ink Canvas/Properties/AssemblyInfo.cs b/Ink Canvas/Properties/AssemblyInfo.cs
index 71637f68..28d8d80a 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.12")]
-[assembly: AssemblyFileVersion("1.7.1.12")]
+[assembly: AssemblyVersion("1.7.1.13")]
+[assembly: AssemblyFileVersion("1.7.1.13")]
From e4dc1c0b4e9081987d4c04807920e6ab3bc887e9 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 23:10:10 +0800
Subject: [PATCH 06/16] =?UTF-8?q?improve:=E6=89=8B=E6=8E=8C=E6=93=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/Resources/Settings.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index 76ebba98..f55bc913 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -78,7 +78,7 @@ namespace Ink_Canvas
[JsonProperty("isCompressPicturesUploaded")]
public bool IsCompressPicturesUploaded { get; set; } = false;
[JsonProperty("enablePalmEraser")]
- public bool EnablePalmEraser { get; set; } = false;
+ public bool EnablePalmEraser { get; set; } = true;
}
public enum OptionalOperation
From 4755eb06e2e120a024a6a8d587fa0888c1b2cf3f Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 23:12:37 +0800
Subject: [PATCH 07/16] =?UTF-8?q?improve:=E6=89=8B=E6=8E=8C=E6=93=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index 3d03ba51..fd81ff85 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -223,6 +223,7 @@ namespace Ink_Canvas {
private bool isPalmEraserActive = false;
private InkCanvasEditingMode palmEraserLastEditingMode = InkCanvasEditingMode.Ink;
private bool palmEraserLastIsHighlighter = false;
+ private bool palmEraserWasEnabledBeforeMultiTouch = false;
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) {
// 橡皮状态下不做任何切换,直接return,保证橡皮可持续
@@ -447,6 +448,12 @@ namespace Ink_Canvas {
}
inkCanvas.Children.Clear();
isInMultiTouchMode = false;
+ // 关闭多指书写时,恢复手掌擦开关
+ if (palmEraserWasEnabledBeforeMultiTouch) {
+ Settings.Canvas.EnablePalmEraser = true;
+ if (ToggleSwitchEnablePalmEraser != null)
+ ToggleSwitchEnablePalmEraser.IsOn = true;
+ }
}
}
@@ -466,6 +473,11 @@ namespace Ink_Canvas {
}
inkCanvas.Children.Clear();
isInMultiTouchMode = true;
+ // 启用多指书写时,自动禁用手掌擦
+ palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser;
+ Settings.Canvas.EnablePalmEraser = false;
+ if (ToggleSwitchEnablePalmEraser != null)
+ ToggleSwitchEnablePalmEraser.IsOn = false;
}
}
}
From 4efc4e7f34c4ab46627fe3686db908647273c871 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 23:14:29 +0800
Subject: [PATCH 08/16] =?UTF-8?q?improve:=E9=BB=98=E8=AE=A4=E9=85=8D?=
=?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/Resources/Settings.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index f55bc913..c527436e 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -238,7 +238,7 @@ namespace Ink_Canvas
[JsonProperty("isEnableFingerGestureSlideShowControl")]
public bool IsEnableFingerGestureSlideShowControl { get; set; } = true;
[JsonProperty("isSupportWPS")]
- public bool IsSupportWPS { get; set; } = true;
+ public bool IsSupportWPS { get; set; } = false;
[JsonProperty("enableWppProcessKill")]
public bool EnableWppProcessKill { get; set; } = true;
[JsonProperty("isAlwaysGoToFirstPageOnReenter")]
From b69eac288662a79a619c375fb634ee266bdb2af8 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Wed, 23 Jul 2025 23:16:49 +0800
Subject: [PATCH 09/16] =?UTF-8?q?improve:=E9=BB=98=E8=AE=A4=E8=AE=BE?=
=?UTF-8?q?=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow_cs/MW_Settings.cs | 2 +-
...vasForClass.csproj.AssemblyReference.cache | Bin 35374 -> 35237 bytes
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index 3b7e9635..5c5c9257 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -1599,7 +1599,7 @@ namespace Ink_Canvas {
Settings.PowerPointSettings.IsNotifyHiddenPage = false;
Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode = false;
Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl = false;
- Settings.PowerPointSettings.IsSupportWPS = true;
+ Settings.PowerPointSettings.IsSupportWPS = false;
Settings.Canvas.InkWidth = 2.5;
Settings.Canvas.IsShowCursor = false;
diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache
index 4af914e22079d93b58f0e03491291464a0dba41e..007dd88682c1e146a5e6a6e4853914122d4656c7 100644
GIT binary patch
delta 23
ecmZ2Cg=y(zCJr`6T?PgQ#>B~j@}V1JJvsqL(gqX&
delta 70
zcmZ2FnQ7e=CJr`6Jq88_#>B~j@}V1JJvt{RD27kAm*kqv$IYhXte29L!^j9!!0^EF
X#&?CQ93Zt^WhQzCdd3FEhL#KfgtieT
From f19118432de45533ed4bd6c76125136b153dae16 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Thu, 24 Jul 2025 00:20:00 +0800
Subject: [PATCH 10/16] =?UTF-8?q?improve:=E8=87=AA=E5=8A=A8=E4=BF=9D?=
=?UTF-8?q?=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml.cs | 37 ++++++++++++++++++
...vasForClass.csproj.AssemblyReference.cache | Bin 35237 -> 35374 bytes
2 files changed, 37 insertions(+)
diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs
index eae06189..23b5565d 100644
--- a/Ink Canvas/MainWindow.xaml.cs
+++ b/Ink Canvas/MainWindow.xaml.cs
@@ -319,6 +319,43 @@ namespace Ink_Canvas {
loadPenCanvas();
//加载设置
LoadSettings(true);
+ // 检查保存路径是否可用,不可用则修正
+ try
+ {
+ string savePath = Settings.Automation.AutoSavedStrokesLocation;
+ bool needFix = false;
+ if (string.IsNullOrWhiteSpace(savePath) || !System.IO.Directory.Exists(savePath))
+ {
+ needFix = true;
+ }
+ else
+ {
+ // 检查是否可写
+ try
+ {
+ string testFile = System.IO.Path.Combine(savePath, "test.tmp");
+ System.IO.File.WriteAllText(testFile, "test");
+ System.IO.File.Delete(testFile);
+ }
+ catch
+ {
+ needFix = true;
+ }
+ }
+ if (needFix)
+ {
+ string newPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "saves");
+ Settings.Automation.AutoSavedStrokesLocation = newPath;
+ if (!System.IO.Directory.Exists(newPath))
+ System.IO.Directory.CreateDirectory(newPath);
+ SaveSettingsToFile();
+ LogHelper.WriteLogToFile($"自动修正保存路径为: {newPath}");
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"检测或修正保存路径时出错: {ex.Message}", LogHelper.LogType.Error);
+ }
// 加载自定义背景颜色
LoadCustomBackgroundColor();
diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache
index 007dd88682c1e146a5e6a6e4853914122d4656c7..4af914e22079d93b58f0e03491291464a0dba41e 100644
GIT binary patch
delta 70
zcmZ2FnQ7e=CJr`6Jq88_#>B~j@}V1JJvt{RD27kAm*kqv$IYhXte29L!^j9!!0^EF
X#&?CQ93Zt^WhQzCdd3FEhL#KfgtieT
delta 23
ecmZ2Cg=y(zCJr`6T?PgQ#>B~j@}V1JJvsqL(gqX&
From efeb99aaac4aff532f99280af6e7653a5cf29c48 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Thu, 24 Jul 2025 00:58:03 +0800
Subject: [PATCH 11/16] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E6=97=B6=E9=95=BF?=
=?UTF-8?q?=E6=96=B9=E4=BD=93=E7=BB=98=E5=88=B6=E5=A4=9A=E4=BD=99=E7=9B=B4?=
=?UTF-8?q?=E7=BA=BF?=
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, 1 insertion(+), 1 deletion(-)
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index fd81ff85..85d55256 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -336,7 +336,7 @@ namespace Ink_Canvas {
private void Main_Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) {
if (e.Manipulators.Count() != 0) return;
- if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
+ if (drawingShapeMode == 0 && inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
}
From a25ec6b0afb6b60298eadc3fac5ec5828fa50188 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Thu, 24 Jul 2025 02:02:34 +0800
Subject: [PATCH 12/16] =?UTF-8?q?fix:=E7=99=BD=E6=9D=BF=E4=BD=BF=E7=94=A8?=
=?UTF-8?q?=E6=93=A6=E9=99=A4=E5=90=8E=E5=87=BA=E7=8E=B0=E7=9A=84=E7=BA=BF?=
=?UTF-8?q?=E6=9D=A1=E5=BC=82=E5=B8=B8BUG?=
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, 1 insertion(+), 1 deletion(-)
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index 85d55256..0212112c 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -64,7 +64,7 @@ namespace Ink_Canvas {
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None;
inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ inkCanvas.EditingMode = InkCanvasEditingMode.None;
}
}
From 50e993fd894c1b0faaf792d1fa5e9c7ccd62ba39 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Thu, 24 Jul 2025 20:59:21 +0800
Subject: [PATCH 13/16] =?UTF-8?q?improve:=E7=9B=B4=E7=BA=BF=E6=8B=89?=
=?UTF-8?q?=E7=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml | 2 +-
Ink Canvas/MainWindow_cs/MW_Settings.cs | 2 +-
Ink Canvas/Resources/Settings.cs | 2 +-
...vasForClass.csproj.AssemblyReference.cache | Bin 35374 -> 35237 bytes
.../InkCanvasForClass_MarkupCompile.cache | 2 +-
5 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index 2853a931..17ed7835 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -946,7 +946,7 @@
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index 5c5c9257..51b8619a 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -1615,7 +1615,7 @@ namespace Ink_Canvas {
Settings.Canvas.EnablePressureTouchMode = false;
Settings.Canvas.DisablePressure = false;
Settings.Canvas.AutoStraightenLine = true;
- Settings.Canvas.AutoStraightenLineThreshold = 30;
+ Settings.Canvas.AutoStraightenLineThreshold = 80;
Settings.Canvas.LineEndpointSnapping = true;
Settings.Canvas.LineEndpointSnappingThreshold = 15;
Settings.Canvas.UsingWhiteboard = false;
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index c527436e..9541d819 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -59,7 +59,7 @@ namespace Ink_Canvas
[JsonProperty("autoStraightenLine")]
public bool AutoStraightenLine { get; set; } = true; // 是否启用直线自动拉直
[JsonProperty("autoStraightenLineThreshold")]
- public int AutoStraightenLineThreshold { get; set; } = 30; // 直线自动拉直的长度阈值(像素)
+ public int AutoStraightenLineThreshold { get; set; } = 80; // 直线自动拉直的长度阈值(像素)
[JsonProperty("highPrecisionLineStraighten")]
public bool HighPrecisionLineStraighten { get; set; } = true; // 是否启用高精度直线拉直
[JsonProperty("lineEndpointSnapping")]
diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache
index 4af914e22079d93b58f0e03491291464a0dba41e..007dd88682c1e146a5e6a6e4853914122d4656c7 100644
GIT binary patch
delta 23
ecmZ2Cg=y(zCJr`6T?PgQ#>B~j@}V1JJvsqL(gqX&
delta 70
zcmZ2FnQ7e=CJr`6Jq88_#>B~j@}V1JJvt{RD27kAm*kqv$IYhXte29L!^j9!!0^EF
X#&?CQ93Zt^WhQzCdd3FEhL#KfgtieT
diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
index 9faa8f50..3b245387 100644
--- a/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
+++ b/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
@@ -16,5 +16,5 @@ E:\ICC CE\ICC CE main\community\Ink Canvas\App.xaml
471037513499
Helpers\Plugins\BuiltIn\SuperLauncher\LauncherSettingsControl.xaml;Helpers\Plugins\BuiltIn\SuperLauncher\LauncherWindow.xaml;MainWindow.xaml;MainWindow_cs\MW_Eraser.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\HistoryRollbackWindow.xaml;Windows\ManagePickNameBackgroundsWindow.xaml;Windows\NamesInputWindow.xaml;Windows\OperatingGuideWindow.xaml;Windows\PluginSettingsWindow.xaml;Windows\RandWindow.xaml;Windows\YesOrNoNotificationWindow.xaml;
-False
+True
From a1935e8299ff3954400cb581792895a6655715a4 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Thu, 24 Jul 2025 21:02:00 +0800
Subject: [PATCH 14/16] =?UTF-8?q?improve:=E7=9B=B4=E7=BA=BF=E6=8B=89?=
=?UTF-8?q?=E7=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../MW_SimulatePressure&InkToShape.cs | 31 +++++++++++++------
1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs
index 648317a0..18499916 100644
--- a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs
@@ -622,9 +622,10 @@ namespace Ink_Canvas {
Point start = stroke.StylusPoints.First().ToPoint();
Point end = stroke.StylusPoints.Last().ToPoint();
double lineLength = GetDistance(start, end);
-
- // 线条必须足够长才考虑拉直,使用设置中的阈值
- if (lineLength < Settings.Canvas.AutoStraightenLineThreshold)
+ // 分辨率自适应阈值
+ double adaptiveThreshold = Settings.Canvas.AutoStraightenLineThreshold * GetResolutionScale();
+ // 线条必须足够长才考虑拉直,使用自适应阈值
+ if (lineLength < adaptiveThreshold)
return false;
// 获取用户设置的灵敏度值,确保使用正确的设置
@@ -691,16 +692,14 @@ namespace Ink_Canvas {
// New method: Determines if a stroke should be straightened into a line
private bool ShouldStraightenLine(Stroke stroke) {
- // Basic implementation: check if points roughly follow a straight line
Point start = stroke.StylusPoints.First().ToPoint();
Point end = stroke.StylusPoints.Last().ToPoint();
-
- // Calculate max deviation from the straight line between start and end
double maxDeviation = 0;
double lineLength = GetDistance(start, end);
-
- // 如果线条太短,不进行拉直处理,使用设置中的阈值
- if (lineLength < Settings.Canvas.AutoStraightenLineThreshold) {
+ // 分辨率自适应阈值
+ double adaptiveThreshold = Settings.Canvas.AutoStraightenLineThreshold * GetResolutionScale();
+ // 如果线条太短,不进行拉直处理,使用自适应阈值
+ if (lineLength < adaptiveThreshold) {
// 显示调试信息 - 线条长度不足
// MessageBox.Show($"线条太短: {lineLength} < {Settings.Canvas.AutoStraightenLineThreshold}", "调试信息");
return false;
@@ -1172,5 +1171,19 @@ namespace Ink_Canvas {
public StylusPoint GetCenterPoint(StylusPoint point1, StylusPoint point2) {
return new StylusPoint((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2);
}
+
+ // 分辨率自适应:以1080P为基准,返回当前分辨率下的阈值倍数
+ private double GetResolutionScale()
+ {
+ // 以1920x1080为基准
+ double baseWidth = 1920.0;
+ double baseHeight = 1080.0;
+ double screenWidth = SystemParameters.PrimaryScreenWidth;
+ double screenHeight = SystemParameters.PrimaryScreenHeight;
+ // 取宽高平均缩放,防止极端比例
+ double scaleW = screenWidth / baseWidth;
+ double scaleH = screenHeight / baseHeight;
+ return (scaleW + scaleH) / 2.0;
+ }
}
}
\ No newline at end of file
From 7fde157184fe8dbd2293676ac28318d87ca5e1ae Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Thu, 24 Jul 2025 22:16:38 +0800
Subject: [PATCH 15/16] =?UTF-8?q?improve:=E8=87=AA=E5=8A=A8=E6=9B=B4?=
=?UTF-8?q?=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/Helpers/AutoUpdateHelper.cs | 171 +++++++++++++++++-
...vasForClass.csproj.AssemblyReference.cache | Bin 35237 -> 35374 bytes
.../InkCanvasForClass_MarkupCompile.cache | 2 +-
3 files changed, 171 insertions(+), 2 deletions(-)
diff --git a/Ink Canvas/Helpers/AutoUpdateHelper.cs b/Ink Canvas/Helpers/AutoUpdateHelper.cs
index 6783821c..8aa47c2b 100644
--- a/Ink Canvas/Helpers/AutoUpdateHelper.cs
+++ b/Ink Canvas/Helpers/AutoUpdateHelper.cs
@@ -57,6 +57,11 @@ namespace Ink_Canvas.Helpers
VersionUrl = "https://kkgithub.com/InkCanvasForClass/community/raw/refs/heads/main/AutomaticUpdateVersionControl.txt",
DownloadUrlFormat = "https://kkgithub.com/InkCanvasForClass/community/releases/download/{0}/InkCanvasForClass.CE.{0}.zip",
LogUrl = "https://kkgithub.com/InkCanvasForClass/community/raw/refs/heads/main/UpdateLog.md"
+ },
+ new UpdateLineGroup
+ {
+ GroupName = "智教联盟",
+ DownloadUrlFormat = "https://get.smart-teach.cn/d/Ningbo-S3/shared/jiangling/community/InkCanvasForClass.CE.{0}.zip",
}
}
},
@@ -82,6 +87,11 @@ namespace Ink_Canvas.Helpers
VersionUrl = "https://kkgithub.com/InkCanvasForClass/community-beta/raw/refs/heads/main/AutomaticUpdateVersionControl.txt",
DownloadUrlFormat = "https://kkgithub.com/InkCanvasForClass/community-beta/releases/download/{0}/InkCanvasForClass.CE.{0}.zip",
LogUrl = "https://kkgithub.com/InkCanvasForClass/community-beta/raw/refs/heads/main/UpdateLog.md"
+ },
+ new UpdateLineGroup
+ {
+ GroupName = "智教联盟",
+ DownloadUrlFormat = "https://get.smart-teach.cn/d/Ningbo-S3/shared/jiangling/community-beta/InkCanvasForClass.CE.{0}.zip",
}
}
}
@@ -159,6 +169,12 @@ namespace Ink_Canvas.Helpers
foreach (var group in groups)
{
+ // 跳过“智教联盟”线路组,不参与延迟检测和排序
+ if (group.GroupName == "智教联盟")
+ {
+ LogHelper.WriteLogToFile($"AutoUpdate | 跳过智教联盟线路组延迟检测");
+ continue;
+ }
LogHelper.WriteLogToFile($"AutoUpdate | 检测线路组: {group.GroupName} ({group.VersionUrl})");
var delay = await GetUrlDelay(group.VersionUrl);
if (delay >= 0)
@@ -178,6 +194,14 @@ namespace Ink_Canvas.Helpers
.Select(x => x.group)
.ToList();
+ // 将“智教联盟”线路组插入到最前面(如果存在)
+ var zhiJiaoGroup = groups.FirstOrDefault(g => g.GroupName == "智教联盟");
+ if (zhiJiaoGroup != null)
+ {
+ orderedGroups.Insert(0, zhiJiaoGroup);
+ LogHelper.WriteLogToFile($"AutoUpdate | 智教联盟线路组已插入到首位");
+ }
+
if (orderedGroups.Count > 0)
{
LogHelper.WriteLogToFile($"AutoUpdate | 找到 {orderedGroups.Count} 个可用线路组,按延迟排序:");
@@ -458,6 +482,43 @@ namespace Ink_Canvas.Helpers
return await DownloadSetupFileWithFallback(version, new List { group });
}
+ // 获取智教联盟真实下载地址
+ private static async Task GetZhijiaoRealDownloadUrl(string url)
+ {
+ try
+ {
+ using (var handler = new HttpClientHandler { AllowAutoRedirect = false })
+ using (var client = new HttpClient(handler))
+ {
+ client.Timeout = RequestTimeout;
+ var resp = await client.GetAsync(url);
+ // 优先取Location头
+ if (resp.StatusCode == System.Net.HttpStatusCode.Found || resp.StatusCode == System.Net.HttpStatusCode.Redirect || resp.StatusCode == System.Net.HttpStatusCode.MovedPermanently)
+ {
+ if (resp.Headers.Location != null)
+ {
+ var realUrl = resp.Headers.Location.ToString();
+ if (realUrl.Contains(" ")) realUrl = realUrl.Replace(" ", "%20");
+ return realUrl;
+ }
+ }
+ // 有些服务器直接返回真实地址在内容里
+ var content = await resp.Content.ReadAsStringAsync();
+ if (Uri.IsWellFormedUriString(content.Trim(), UriKind.Absolute))
+ {
+ var realUrl = content.Trim();
+ if (realUrl.Contains(" ")) realUrl = realUrl.Replace(" ", "%20");
+ return realUrl;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"AutoUpdate | 获取智教联盟真实下载地址失败: {ex.Message}", LogHelper.LogType.Error);
+ }
+ return null;
+ }
+
// 使用多线路组下载新版(支持自动切换)
public static async Task DownloadSetupFileWithFallback(string version, List groups, Action progressCallback = null)
{
@@ -484,10 +545,32 @@ namespace Ink_Canvas.Helpers
SaveDownloadStatus(false);
+ // 优先尝试“智教联盟”线路组
+ var zhiJiaoGroup = groups.FirstOrDefault(g => g.GroupName == "智教联盟");
+ if (zhiJiaoGroup != null)
+ {
+ groups = new List { zhiJiaoGroup }.Concat(groups.Where(g => g.GroupName != "智教联盟")).ToList();
+ LogHelper.WriteLogToFile($"AutoUpdate | 下载时优先尝试智教联盟线路组");
+ }
+
// 依次尝试每个线路组
foreach (var group in groups)
{
string url = string.Format(group.DownloadUrlFormat, version);
+ // 智教联盟需要先获取真实下载地址
+ if (group.GroupName == "智教联盟")
+ {
+ LogHelper.WriteLogToFile($"AutoUpdate | 获取智教联盟真实下载地址: {url}");
+ var realUrl = await GetZhijiaoRealDownloadUrl(url);
+ if (string.IsNullOrEmpty(realUrl))
+ {
+ LogHelper.WriteLogToFile($"AutoUpdate | 智教联盟真实下载地址获取失败,跳过", LogHelper.LogType.Warning);
+ progressCallback?.Invoke(0, "智教联盟真实下载地址获取失败,跳过");
+ continue;
+ }
+ url = realUrl;
+ LogHelper.WriteLogToFile($"AutoUpdate | 智教联盟真实下载地址: {url}");
+ }
LogHelper.WriteLogToFile($"AutoUpdate | 尝试从线路组 {group.GroupName} 下载: {url}");
bool downloadSuccess = await DownloadFile(url, zipFilePath, progressCallback);
@@ -529,9 +612,93 @@ namespace Ink_Canvas.Helpers
LogHelper.WriteLogToFile($"AutoUpdate | 正在尝试多线程下载: {fileUrl}");
int maxRetry = 3;
int[] threadOptions = new int[] { 32, 4 };
+
+ // 检查服务器是否支持Range分块下载
+ bool supportRange = false;
+ long totalSize = -1;
+ try
+ {
+ using (var client = new HttpClient())
+ {
+ client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");
+ var req = new HttpRequestMessage(HttpMethod.Head, fileUrl);
+ req.Headers.Range = new System.Net.Http.Headers.RangeHeaderValue(0, 0);
+ var resp = await client.SendAsync(req);
+ if (resp.StatusCode == System.Net.HttpStatusCode.PartialContent)
+ {
+ supportRange = true;
+ if (resp.Content.Headers.ContentRange != null && resp.Content.Headers.ContentRange.Length.HasValue)
+ {
+ totalSize = resp.Content.Headers.ContentRange.Length.Value;
+ }
+ else if (resp.Content.Headers.ContentLength.HasValue)
+ {
+ totalSize = resp.Content.Headers.ContentLength.Value;
+ }
+ }
+ else if (resp.StatusCode == System.Net.HttpStatusCode.OK)
+ {
+ supportRange = false;
+ if (resp.Content.Headers.ContentLength.HasValue)
+ {
+ totalSize = resp.Content.Headers.ContentLength.Value;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"AutoUpdate | 检查Range支持时异常: {ex.Message}", LogHelper.LogType.Warning);
+ }
+
+ if (!supportRange)
+ {
+ LogHelper.WriteLogToFile($"AutoUpdate | 服务器不支持分块下载,自动降级为单线程下载");
+ progressCallback?.Invoke(0, "服务器不支持分块下载,自动降级为单线程下载");
+ try
+ {
+ using (var client = new HttpClient())
+ {
+ client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");
+ using (var resp = await client.GetAsync(fileUrl, HttpCompletionOption.ResponseHeadersRead))
+ {
+ resp.EnsureSuccessStatusCode();
+ using (var fs = new FileStream(destinationPath, FileMode.Create, FileAccess.Write, FileShare.None))
+ {
+ var stream = await resp.Content.ReadAsStreamAsync();
+ byte[] buffer = new byte[8192];
+ int read;
+ long downloaded = 0;
+ while ((read = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
+ {
+ await fs.WriteAsync(buffer, 0, read);
+ downloaded += read;
+ if (totalSize > 0)
+ {
+ double percent = (double)downloaded / totalSize * 100;
+ progressCallback?.Invoke(percent, $"单线程下载中: {percent:F1}%");
+ }
+ }
+ }
+ }
+ }
+ progressCallback?.Invoke(100, "单线程下载完成");
+ return true;
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"AutoUpdate | 单线程下载失败: {ex.Message}", LogHelper.LogType.Error);
+ progressCallback?.Invoke(0, $"单线程下载失败: {ex.Message}");
+ return false;
+ }
+ }
+
foreach (int threadCount in threadOptions)
{
- long totalSize = await GetContentLength(fileUrl);
+ if (totalSize <= 0)
+ {
+ totalSize = await GetContentLength(fileUrl);
+ }
if (totalSize <= 0)
{
progressCallback?.Invoke(0, "无法获取文件大小,取消下载");
@@ -563,6 +730,7 @@ namespace Ink_Canvas.Helpers
{
using (var client = new HttpClient())
{
+ client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");
var req = new HttpRequestMessage(HttpMethod.Get, fileUrl);
req.Headers.Range = new System.Net.Http.Headers.RangeHeaderValue(block.Start, block.End);
@@ -573,6 +741,7 @@ namespace Ink_Canvas.Helpers
using (var resp = await client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead, downloadCts.Token))
{
+ LogHelper.WriteLogToFile($"AutoUpdate | 分块{block.Index} 响应状态: {resp.StatusCode}");
resp.EnsureSuccessStatusCode();
string tempPath = destinationPath + $".part{block.Index}";
using (var fs = new FileStream(tempPath, FileMode.Create, FileAccess.Write, FileShare.None))
diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass.csproj.AssemblyReference.cache
index 007dd88682c1e146a5e6a6e4853914122d4656c7..4af914e22079d93b58f0e03491291464a0dba41e 100644
GIT binary patch
delta 70
zcmZ2FnQ7e=CJr`6Jq88_#>B~j@}V1JJvt{RD27kAm*kqv$IYhXte29L!^j9!!0^EF
X#&?CQ93Zt^WhQzCdd3FEhL#KfgtieT
delta 23
ecmZ2Cg=y(zCJr`6T?PgQ#>B~j@}V1JJvsqL(gqX&
diff --git a/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache b/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
index 3b245387..9faa8f50 100644
--- a/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
+++ b/Ink Canvas/obj/Debug/net472/InkCanvasForClass_MarkupCompile.cache
@@ -16,5 +16,5 @@ E:\ICC CE\ICC CE main\community\Ink Canvas\App.xaml
471037513499
Helpers\Plugins\BuiltIn\SuperLauncher\LauncherSettingsControl.xaml;Helpers\Plugins\BuiltIn\SuperLauncher\LauncherWindow.xaml;MainWindow.xaml;MainWindow_cs\MW_Eraser.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\HistoryRollbackWindow.xaml;Windows\ManagePickNameBackgroundsWindow.xaml;Windows\NamesInputWindow.xaml;Windows\OperatingGuideWindow.xaml;Windows\PluginSettingsWindow.xaml;Windows\RandWindow.xaml;Windows\YesOrNoNotificationWindow.xaml;
-True
+False
From 4afa66f3f309e46ad89a37fd71d6bd5b1a9279b1 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Thu, 24 Jul 2025 22:18:31 +0800
Subject: [PATCH 16/16] =?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 4689bcdc..23fa0df7 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.13")]
-[assembly: AssemblyFileVersion("1.7.1.13")]
+[assembly: AssemblyVersion("1.7.1.14")]
+[assembly: AssemblyFileVersion("1.7.1.14")]
diff --git a/Ink Canvas/Properties/AssemblyInfo.cs b/Ink Canvas/Properties/AssemblyInfo.cs
index 28d8d80a..156b074e 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.13")]
-[assembly: AssemblyFileVersion("1.7.1.13")]
+[assembly: AssemblyVersion("1.7.1.14")]
+[assembly: AssemblyFileVersion("1.7.1.14")]