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

58 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Fix-BUG-20260511-0010
> 适用场景:记录某个 BUG 的修复方案、影响评估、验证结果与落地信息。
## 关联信息
- Fix ID: Fix-BUG-20260511-0010
- 关联 BUG ID: BUG-20260511-0010
- 修复目标: 避免局部 root 内部 coverage 扩张后漏补 Dialog / 上层 overlay
- 状态:已完成
- 负责人: Codex
- 分支 / 版本: 当前工作区
## 根因分析
- 根因: `commitManagedRepaint()` 只执行绘制,不返回本轮实际写屏 coverage;Window 仍按登记时的初始 coverage 进行上层补画判断。
- 触发条件: Canvas / TabControl 内部局部提交中补画了后序兄弟控件,实际写屏范围大于初始 source coverage。
- 为什么之前没发现:[可选] 需要 Dialog、Tooltip、后序兄弟补画三者同时满足。
- 关键证据:[可选] 临时日志中 `Canvas partial end coverage` 已与 Dialog 相交,但 `dialog overlay check` 使用旧 working coverage 结果为不相交。
## 修复方案
- 修复思路: 在 Window 层进行保守兜底。root 局部提交完成后,如果 root 仍支持局部提交,则将 root 当前 managed coverage 并入上层补画判断 coverage。
- 关键改动:
- `Window::flushManagedRepaint()``root->commitManagedRepaint()` 后合并 `root->getManagedRepaintCoverageRect()`
- 只扩大上层补画判断,不改变 root 自身局部提交策略。
- 涉及文件 / 类 / 函数: `Window.cpp::flushManagedRepaint`
- 影响的 API / 行为:[可选] 无公开 API 变化。
- 关键约束 / 不变量:[可选] Dialog 仍保持顶层 overlay 语义。
- 回滚点 / 开关:[可选] 回退该 coverage 合并逻辑。
## 影响评估
- 影响范围: 托管重绘后的上层普通控件 / Dialog 补画判断。
- 兼容性影响:无
- 行为变化:有(Dialog / 上层控件补画更保守)
- 性能影响:有(可能多补画少量 overlay)
- 回归风险: 中低;主要风险是局部 root 大范围覆盖时上层补画次数增加。
## 验证结果
- 验证步骤:
1. 编译 `Window.cpp / Canvas.cpp`
2. 编译 `z-testDome.cpp /DKEY=6`
3. 编译 `z-testDome.cpp``KEY1 ~ KEY6`
- 验证结果: 编译通过;临时日志已删除
- 回归检查:[可选] KEY6 非模态 Dialog + Tooltip 覆盖链待用户手测
- 验证证据:[可选]
## 落地信息
- Commit: 未提交
- PR[可选]
- 发布版本:[可选]
- 备注: 下版本建议让 `commitManagedRepaint()` 返回 actual coverage,替代 root 全覆盖兜底。