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); + } + } + /// /// 使用防抖机制处理页面切换 ///