Files
StellarX-kaifa/开发记录/功能变更/Feature-20260511-0012-发布前托管重绘与KEY6封版收口.md
Codex 9155a86a8a 发布前托管重绘与布局封版收口
收口 Dialog/overlay 后鼠标状态同步、Tooltip 临时 coverage 与持久 coverage 拆分、跨 root 脏区补提交、TextBox/Button 绘制副作用修复,并补充 KEY6 回归用例和 BUG/Fix/Feature 开发记录。
2026-05-17 00:26:08 +08:00

4.2 KiB
Raw Permalink Blame History

功能变更 ID: Feature-20260511-0012

适用场景:记录小到中等规模的功能、接口、行为、默认值或配置变化。 不适用场景:新增核心模块、重大模块重构、架构级设计,请使用“新增功能模块”模板。

基本信息

  • ID: Feature-20260511-0012
  • 标题: 发布前托管重绘与 KEY6 封版收口
  • 状态:已完成
  • 类型:修改
  • 级别:L3 重大
  • 模块: Window / Canvas / TabControl / Tooltip / Dialog / 测试用例
  • 版本 / 分支: 当前工作区
  • 环境: Windows / EasyX
  • 负责人: Codex

变更背景

  • 背景:
    • 发布前封版阶段需要稳定现有布局、托管重绘、Dialog / overlay / hover 状态同步链路。
    • KEY6 补充覆盖后暴露了非模态 Dialog、Tooltip、跨 root dirty、透明 Label 快照等组合问题。
  • 目标:
    • 修复确定性小问题。
    • 收口 Dialog / overlay 后鼠标状态同步语义。
    • 让 KEY6 覆盖已实现但原主回归未覆盖的分支。
    • 修复托管局部重绘中 coverage 和背景快照语义混用导致的问题。
  • 不做什么:[可选]
    • 不实现焦点系统。
    • 不实现键盘事件系统。
    • 不做 Tooltip 智能选位。
    • 不做 Table 纵向 Stretch。
    • 不实现 Table 内部局部重绘体系。

变更内容

  • 变更摘要:
    • 修复 TabControl::indexOf() 未命中返回值。
    • 抽取 Dialog / overlay 后鼠标状态同步辅助函数。
    • 新增 KEY6 分支覆盖用例。
    • Window 增加局部 root 提交后 overlay coverage 保守兜底。
    • Window 事件尾补收集跨 root dirty 子树。
    • 托管重绘拆分完整 coverage 与持久 coverage,避免 Tooltip 污染背景快照。
  • 新增项:[可选]
    • Window::syncMouseStateAfterOverlayChanged(...)
    • Window::collectDirtyRootsForManagedRepaint()
    • Control::getManagedRepaintPersistentCoverageRect()
    • KEY6 测试入口
  • 修改项:[可选]
    • Canvas / TabControl 局部 overlay 补画策略。
    • Button Tooltip coverage 语义。
    • Table 托管 coverage 语义补充。
  • 删除 / 废弃项:[可选]
  • 受影响的文件 / 类 / 函数:
    • Window.h / Window.cpp
    • Control.h / Control.cpp
    • Button.h / Button.cpp
    • Canvas.h / Canvas.cpp
    • TabControl.h / TabControl.cpp
    • Table.h / Table.cpp
    • z-testDome.cpp
  • 对外 API / 属性变化:[可选]
    • 无公开用户 API 变化。
    • 新增接口均为内部托管重绘语义。

行为对照

  • 变更前:
    • indexOf() 未命中返回最后索引。
    • Dialog 关闭 / 非模态 Dialog 吞鼠标移动后的 synthetic move 逻辑散落在 runEventLoop()
    • 局部 root 内部 coverage 扩张后,Window 可能漏补 Dialog。
    • 跨 root 回调改脏后,目标 root 可能等下一次事件才刷新。
    • Tooltip 临时浮层与持久 coverage 混用,可能污染或擦除兄弟控件快照。
  • 变更后:
    • indexOf() 未命中返回 -1
    • overlay 后鼠标状态同步由语义函数集中处理。
    • Window 对可局部提交 root 的上层补画判断更保守。
    • 事件尾会补收集未登记但已 dirty 的 root。
    • Tooltip 进入完整 coverage,但不进入持久 coverage;只命中临时浮层的兄弟控件不再补画。
  • 兼容性说明:兼容
  • 迁移说明:[可选]
    • 用户代码无需迁移。

验证与落地

  • 验证方式:
    • 编译核心变更文件。
    • 编译 z-testDome.cppKEY1 ~ KEY6
    • 根据用户手测反馈修正 KEY6 Tooltip / Dialog / Label 组合问题。
  • 验证结果:
    • Control.cpp / Button.cpp / Canvas.cpp / TabControl.cpp / Table.cpp / Window.cpp 编译通过。
    • KEY1 ~ KEY6 编译通过。
    • GUI 行为需继续由用户在本机手测确认。
  • 关联 BUG / Fix[可选]
    • BUG-20260511-0009 / Fix-BUG-20260511-0009
    • BUG-20260511-0010 / Fix-BUG-20260511-0010
    • BUG-20260511-0011 / Fix-BUG-20260511-0011
    • BUG-20260511-0012 / Fix-BUG-20260511-0012
  • Commit: 未提交
  • PR[可选]
  • 发布版本:[可选]
  • 备注:[可选]
    • 下版本建议引入 commitManagedRepaint() actual coverage 返回值,替代当前 root coverage 保守兜底。
    • 下版本建议建立正式 coverage 诊断日志开关,避免再临时散加日志。