发布前托管重绘与布局封版收口
收口 Dialog/overlay 后鼠标状态同步、Tooltip 临时 coverage 与持久 coverage 拆分、跨 root 脏区补提交、TextBox/Button 绘制副作用修复,并补充 KEY6 回归用例和 BUG/Fix/Feature 开发记录。
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# Fix-BUG-20260511-0012
|
||||
|
||||
> 适用场景:记录某个 BUG 的修复方案、影响评估、验证结果与落地信息。
|
||||
|
||||
## 关联信息
|
||||
|
||||
- Fix ID: Fix-BUG-20260511-0012
|
||||
- 关联 BUG ID: BUG-20260511-0012
|
||||
- 修复目标: 区分 Tooltip 临时浮层 coverage 与会污染背景快照的持久 coverage
|
||||
- 状态:已完成
|
||||
- 负责人: Codex
|
||||
- 分支 / 版本: 当前工作区
|
||||
|
||||
## 根因分析
|
||||
|
||||
- 根因: 托管重绘只有一类 coverage,既用于完整绘制范围判断,也用于兄弟控件背景快照刷新判断。Tooltip 属于临时浮层,不应进入后者。
|
||||
- 触发条件: Tooltip coverage 覆盖到后序兄弟控件,兄弟控件被局部 overlay 补画。
|
||||
- 为什么之前没发现:[可选] 需要 Tooltip 与透明 Label 或带快照兄弟控件重叠。
|
||||
- 关键证据:[可选] 透明 Label 已设置 `setTextdisap(true)`,但 `draw()` 仍会先回贴背景快照。
|
||||
|
||||
## 修复方案
|
||||
|
||||
- 修复思路: 拆分完整 coverage 与持久 coverage。Tooltip 进入完整 coverage,用于 Window/Dialog overlay 判断;但不进入持久 coverage,避免兄弟控件刷新快照时捕获 Tooltip。
|
||||
- 关键改动:
|
||||
- `Control` 新增内部虚函数 `getManagedRepaintPersistentCoverageRect()`。
|
||||
- `Button` 的完整 coverage 包含 Tooltip,持久 coverage 仅包含按钮本体。
|
||||
- `Canvas / TabControl / Table` 递归合并子控件持久 coverage。
|
||||
- `Canvas / TabControl` 局部提交中,只有命中持久 coverage 的兄弟控件才作废快照并补画。
|
||||
- 只命中 Tooltip 等临时 coverage 的兄弟控件不再补画,避免透明控件回贴旧快照擦掉 Tooltip。
|
||||
- 涉及文件 / 类 / 函数:
|
||||
- `Control.h / Control.cpp`
|
||||
- `Button.h / Button.cpp`
|
||||
- `Canvas.h / Canvas.cpp`
|
||||
- `TabControl.h / TabControl.cpp`
|
||||
- `Table.h / Table.cpp`
|
||||
- 影响的 API / 行为:[可选] 新增内部 virtual 接口,无公开用户 API 变化。
|
||||
- 关键约束 / 不变量:[可选] Tooltip 智能选位仍不在本轮范围内。
|
||||
- 回滚点 / 开关:[可选] 回退持久 coverage 拆分逻辑。
|
||||
|
||||
## 影响评估
|
||||
|
||||
- 影响范围: Tooltip、Canvas / TabControl 局部 overlay 补画、背景快照捕获。
|
||||
- 兼容性影响:无
|
||||
- 行为变化:有(Tooltip 作为临时浮层时,不再触发普通兄弟控件补画)
|
||||
- 性能影响:轻微(多维护一组矩形并集和相交判断)
|
||||
- 回归风险:
|
||||
- 如果某控件持久 coverage 定义过小,可能漏补兄弟快照。
|
||||
- Tooltip 会短暂显示在同容器后序普通控件上方,这是本轮有意选择。
|
||||
|
||||
## 验证结果
|
||||
|
||||
- 验证步骤:
|
||||
|
||||
1. 编译 `Control.cpp / Button.cpp / Canvas.cpp / TabControl.cpp / Table.cpp / Window.cpp`。
|
||||
2. 编译 `z-testDome.cpp` 的 `KEY1 ~ KEY6`。
|
||||
3. 手测 KEY6 A 区禁用按钮 Tooltip 与状态 Label 交叠。
|
||||
4. 手测 TabControl 页签 / 页面内 Tooltip。
|
||||
|
||||
- 验证结果: 编译通过;GUI 行为待用户手测
|
||||
- 回归检查:[可选] KEY6 A 区、KEY5 Tooltip/overlay、KEY4 Dialog overlay
|
||||
- 验证证据:[可选]
|
||||
|
||||
## 落地信息
|
||||
|
||||
- Commit: 未提交
|
||||
- PR:[可选]
|
||||
- 发布版本:[可选]
|
||||
- 备注: 下版本可进一步引入 actual coverage 返回值和正式 coverage 诊断日志。
|
||||
Reference in New Issue
Block a user