From 6d5c4b4e0817c243c6a3ee2e593d8b90bdfa17e8 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sun, 22 Feb 2026 12:55:00 +0800 Subject: [PATCH] =?UTF-8?q?improve:=E7=99=BD=E6=9D=BF=E7=BF=BB=E9=A1=B5?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/MainWindow_cs/MW_BoardControls.cs | 6 ++-- Ink Canvas/MainWindow_cs/MW_TimeMachine.cs | 32 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs index e6ae2e85..e029ab60 100644 --- a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs @@ -517,7 +517,7 @@ namespace Ink_Canvas if (CurrentWhiteboardIndex != oldTotal) { for (var i = CurrentWhiteboardIndex; i < oldTotal; i++) - TimeMachineHistories[i] = TimeMachineHistories[i + 1]; + TimeMachineHistories[i] = FlattenPageHistory(TimeMachineHistories[i + 1]); } else { @@ -531,7 +531,7 @@ namespace Ink_Canvas else if (pageIndex < CurrentWhiteboardIndex) { for (var i = pageIndex; i < WhiteboardTotalCount; i++) - TimeMachineHistories[i] = TimeMachineHistories[i + 1]; + TimeMachineHistories[i] = FlattenPageHistory(TimeMachineHistories[i + 1]); TimeMachineHistories[WhiteboardTotalCount] = null; WhiteboardTotalCount--; CurrentWhiteboardIndex--; @@ -539,7 +539,7 @@ namespace Ink_Canvas else { for (var i = pageIndex; i < WhiteboardTotalCount; i++) - TimeMachineHistories[i] = TimeMachineHistories[i + 1]; + TimeMachineHistories[i] = FlattenPageHistory(TimeMachineHistories[i + 1]); TimeMachineHistories[WhiteboardTotalCount] = null; WhiteboardTotalCount--; } diff --git a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs index 42c684d2..8bb5b560 100644 --- a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs +++ b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs @@ -320,6 +320,38 @@ namespace Ink_Canvas return fakeInkCanv.Strokes; } + /// + /// 将一页的完整历史扁平化为“仅最终状态”:在临时画布上重放该页历史,再导出为最少条目的新历史(一笔画集合 + 若干元素插入)。 + /// 用于删除页面前移后,避免移入槽位保留冗长历史导致翻到该页码时卡顿。 + /// + /// 该页的 TimeMachineHistory 数组,可为 null 或空 + /// 扁平化后的新历史数组;若输入为 null 或空则返回 null + private TimeMachineHistory[] FlattenPageHistory(TimeMachineHistory[] history) + { + if (history == null || history.Length == 0) return null; + + var removed = CollectRemovedElementsFromHistory(history); + var fakeInkCanv = new InkCanvas + { + Width = inkCanvas.ActualWidth > 0 ? inkCanvas.ActualWidth : 1920, + Height = inkCanvas.ActualHeight > 0 ? inkCanvas.ActualHeight : 1080, + EditingMode = InkCanvasEditingMode.None, + }; + + foreach (var item in history) + ApplyHistoryToCanvas(item, fakeInkCanv, removed); + + var list = new List(); + if (fakeInkCanv.Strokes.Count > 0) + list.Add(new TimeMachineHistory(fakeInkCanv.Strokes.Clone(), TimeMachineHistoryType.UserInput, false)); + foreach (UIElement child in fakeInkCanv.Children) + { + if (child is Image || child is MediaElement) + list.Add(new TimeMachineHistory(child, TimeMachineHistoryType.ElementInsert)); + } + return list.Count == 0 ? null : list.ToArray(); + } + /// /// 获取页面的所有图片元素 ///