Skip to content

fix: 修复 WinRT 触摸与手掌擦并提升设置及工具栏稳定性 - #753

Open
neko-lfj wants to merge 9 commits into
InkCanvasForClass:net10from
neko-lfj:codex/fix-touch-and-ui-stability
Open

neko-lfj wants to merge 9 commits into
InkCanvasForClass:net10from
neko-lfj:codex/fix-touch-and-ui-stability

Conversation

@neko-lfj

Copy link
Copy Markdown

问题与行为

触摸书写后工具栏可能失去响应,WinRT 手掌识别只拦截笔迹而没有执行擦除。低性能设备打开设置、搜索选项或调整工具栏时,还会受到整页预加载、重复配置序列化、重叠动画及控件滞留的影响。

本次将触摸输入、后台工作和 UI 更新改为有界、可恢复的路径,并增加独立的 Windows 回归程序。

主要修改

  • WinRT 输入与手掌擦:修正坐标转换 ABI;通过原生窗口区域排除工具栏交互区,调整覆盖层与弹出窗口的层级及隐藏回退。补齐手掌几何擦除回调,支持移动中升级识别、保持橡皮直到抬手,并处理触点丢失、取消、迟到回调和渲染等待超时。
  • 设置与工具栏:设置页按需构造,搜索分批执行并取消过期结果;合并配置快照与工具栏定位更新,在关闭/退出前提交最终设置。拒绝旧动画回写,异常时释放切换状态;用户操作会取消启动收纳校验。修复自动字体适配的属性监听滞留,并限制存储统计的并发扫描。
  • 耗时任务与资源管理:为 IACore、放大镜和 PPT 管道交换增加截止时间及串行发送;Office 调用使用有界 STA 消息循环。摄像头启停移出 UI、帧更新限制积压;识别、平滑、文件压缩和编码使用快照后台处理。配置及文档原子写入,日志改为有界队列,自动化执行合并重复任务,避免等待终结器阻塞 UI。
  • 诊断与兼容性:新增 WinRT 挂载/实际输入日志及慢 UI 操作耗时记录;统一旧 XML 编解码并兼容旧的小数分隔符。保持现有持久化字段和插件 SDK 契约。

验证

  • dotnet build "Ink Canvas.sln" -c Debug -p:Platform=x64:通过,0 错误;现有资源区域设置和未使用字段警告仍保留。
  • dotnet run --project build/ReliabilityTests/ReliabilityTests.csproj -c Release:82 项检查通过;将回归进程限制到单个逻辑处理器后同样通过。
  • 自动检查覆盖原生坐标/窗口区域、输入取消与手掌状态、管道读写超时、原子写入失败恢复、XML 往返、STA 线程复用和消息循环、UI 更新合并及字体监听回收。字体控件滞留测试在修复前失败、修复后通过。
  • dotnet build build/VstoTransportCompile/VstoTransportCompile.csproj -c Release:实际加载项 IPC 源码在 net472 下编译通过,0 警告、0 错误。
  • 实机日志已确认 x64 构建成功挂载 WinRT 并收到 device=Touch 的原生书写输入;这不等于双屏触摸及手掌擦的完整实机验证。
  • git diff --check:通过。

验证边界

完整 VSTO 工程构建仍受本机 VS/MSBuild 工具链异常及缺少 OfficeTools 目标限制,通信兼容性构建不能替代加载项清单、签名和 Office 加载验证。

仍需在双触摸屏复制显示、不同 DPI、低性能设备、摄像头拔插和 Office 忙碌场景复测。旧插件在同进程 UI 回调内死循环,以及已经挂起的 COM/驱动调用,无法由托管超时安全终止;完全隔离需要独立进程。本 PR 不宣称已根治所有第三方卡死。

详细复测命令与场景见 rules/build.md。相关反馈:#657、#553、#299、#482。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant