发布前托管重绘与布局封版收口
收口 Dialog/overlay 后鼠标状态同步、Tooltip 临时 coverage 与持久 coverage 拆分、跨 root 脏区补提交、TextBox/Button 绘制副作用修复,并补充 KEY6 回归用例和 BUG/Fix/Feature 开发记录。
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
# 功能变更 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.cpp` 的 `KEY1 ~ 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 诊断日志开关,避免再临时散加日志。
|
||||
Reference in New Issue
Block a user