From 07b6d142ad008f260b63a80eeb33e3dda515e126 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Sat, 13 Sep 2025 18:52:23 +0800
Subject: [PATCH] add:issue #190
---
Ink Canvas/Helpers/MultiPPTInkManager.cs | 23 +++++++++++++++++++
Ink Canvas/Helpers/PPTInkManager.cs | 28 +++++++++++++++++++++--
Ink Canvas/MainWindow_cs/MW_PPT.cs | 29 ++++++++++++++++++++++++
3 files changed, 78 insertions(+), 2 deletions(-)
diff --git a/Ink Canvas/Helpers/MultiPPTInkManager.cs b/Ink Canvas/Helpers/MultiPPTInkManager.cs
index c4915b05..ac3d7e47 100644
--- a/Ink Canvas/Helpers/MultiPPTInkManager.cs
+++ b/Ink Canvas/Helpers/MultiPPTInkManager.cs
@@ -388,6 +388,29 @@ namespace Ink_Canvas.Helpers
return false;
}
+ ///
+ /// 重置当前演示文稿的墨迹锁定状态
+ ///
+ public void ResetCurrentPresentationLockState()
+ {
+ lock (_lockObject)
+ {
+ try
+ {
+ var manager = GetCurrentManager();
+ if (manager != null)
+ {
+ manager.ResetLockState();
+ LogHelper.WriteLogToFile("已重置当前演示文稿的墨迹锁定状态", LogHelper.LogType.Trace);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"重置墨迹锁定状态失败: {ex}", LogHelper.LogType.Error);
+ }
+ }
+ }
+
///
/// 移除演示文稿管理器
///
diff --git a/Ink Canvas/Helpers/PPTInkManager.cs b/Ink Canvas/Helpers/PPTInkManager.cs
index afe2077e..f8c3f558 100644
--- a/Ink Canvas/Helpers/PPTInkManager.cs
+++ b/Ink Canvas/Helpers/PPTInkManager.cs
@@ -207,8 +207,17 @@ namespace Ink_Canvas.Helpers
// 如果有当前墨迹,先保存到正确的页面
if (currentStrokes != null && currentStrokes.Count > 0)
{
- // 使用当前锁定的页面索引,如果没有锁定则使用传入的页面索引
- int saveToSlideIndex = _lockedSlideIndex > 0 ? _lockedSlideIndex : slideIndex;
+ // 否则使用传入的页面索引,确保墨迹保存到正确的页面
+ int saveToSlideIndex;
+ if (_lockedSlideIndex > 0 && DateTime.Now < _inkLockUntil && _lockedSlideIndex != slideIndex)
+ {
+ saveToSlideIndex = _lockedSlideIndex;
+ LogHelper.WriteLogToFile($"使用锁定页面保存墨迹: {saveToSlideIndex} -> {slideIndex}", LogHelper.LogType.Trace);
+ }
+ else
+ {
+ saveToSlideIndex = slideIndex;
+ }
// 确保页面索引有效
if (saveToSlideIndex > 0 && saveToSlideIndex < _memoryStreams.Length)
@@ -407,6 +416,21 @@ namespace Ink_Canvas.Helpers
if (currentSlideIndex != _lockedSlideIndex && _lockedSlideIndex > 0) return false;
return true;
}
+
+ ///
+ /// 重置墨迹锁定状态
+ ///
+ public void ResetLockState()
+ {
+ lock (_lockObject)
+ {
+ _inkLockUntil = DateTime.MinValue;
+ _lockedSlideIndex = -1;
+ _lastSwitchTime = DateTime.MinValue;
+ _lastSwitchSlideIndex = -1;
+ LogHelper.WriteLogToFile("已重置墨迹锁定状态", LogHelper.LogType.Trace);
+ }
+ }
#endregion
#region Private Methods
diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs
index 2e65b026..01d0dd7c 100644
--- a/Ink Canvas/MainWindow_cs/MW_PPT.cs
+++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs
@@ -796,6 +796,9 @@ namespace Ink_Canvas
// 注意:这里只清空索引0的备份,不影响白板页面的墨迹(索引1及以上)
TimeMachineHistories[0] = null;
+ // 重置墨迹管理器的锁定状态,防止下次放映时墨迹显示错误
+ ResetInkManagerLockState();
+
// 退出PPT模式时恢复手势面板和手势按钮的显示状态
if (Settings.Gesture.IsEnableTwoFingerGesture && ToggleSwitchEnableMultiTouchMode.IsOn)
{
@@ -1014,6 +1017,32 @@ namespace Ink_Canvas
}
}
+ ///
+ /// 重置墨迹管理器的锁定状态,防止墨迹显示错误
+ ///
+ private void ResetInkManagerLockState()
+ {
+ try
+ {
+ // 获取当前活跃的演示文稿
+ var activePresentation = _pptManager?.GetCurrentActivePresentation();
+ if (activePresentation != null)
+ {
+ // 切换到对应的墨迹管理器
+ _multiPPTInkManager?.SwitchToPresentation(activePresentation);
+
+ // 重置锁定状态
+ _multiPPTInkManager?.ResetCurrentPresentationLockState();
+
+ LogHelper.WriteLogToFile($"已重置墨迹管理器锁定状态", LogHelper.LogType.Trace);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"重置墨迹管理器锁定状态失败: {ex}", LogHelper.LogType.Error);
+ }
+ }
+
///
/// 使用防抖机制处理页面切换
///