# 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 全覆盖兜底。