Expose layout API and refresh regression docs

This commit is contained in:
Codex
2026-05-09 19:15:23 +08:00
parent 738cf035bb
commit 2388f22c99
21 changed files with 2491 additions and 367 deletions
@@ -0,0 +1,88 @@
# Fix-BUG-20260410-0004
> 适用场景:记录某个 BUG 的修复方案、影响评估、验证结果与落地信息。
## 关联信息
- Fix ID: `Fix-BUG-20260410-0004`
- 关联 BUG ID: `BUG-20260410-0004`
- 修复目标: 让按钮 Tooltip 在鼠标移出后立即回贴并消失,不再残留在屏幕上
- 状态:已验证
- 负责人: Codex 协作修改
- 分支 / 版本: 当前工作区 / 下一版本开发中
## 根因分析
- 根因:
- Tooltip 由 `Button` 在绘制末尾以内置浮层方式直接补画,不属于独立控件树节点。
- 隐藏路径里根据托管分发状态分叉处理,在托管分发阶段仅调用 `invalidateBackgroundSnapshot()`,只作废 Tooltip 快照,不执行回贴。
- 当本轮后续重绘只覆盖按钮本体区域时,Tooltip 占用的屏幕区域不会被擦除,因此表现为 Tooltip 留在屏幕上。
- 触发条件:
- Tooltip 已显示
- 鼠标移出按钮区域,进入 `hideTooltip()` 分支
- 为什么之前没发现:
- 之前更关注 Tooltip 的显示、Hover 切换和对话框遮挡链路
- “逻辑状态已隐藏,但屏幕区域无人回贴”的问题只有在当前托管重绘路径下才更稳定暴露
- 关键证据:
- [`Button.cpp`](D:/programming/imGUI-easyX/imGui-easyX/Button.cpp) 中 `hideTooltip()` 在托管分发阶段只作废快照,不回贴 Tooltip 自身区域
## 修复方案
- 修复思路:
- Tooltip 既然是 `Button` 的内置浮层,就按“内置浮层”语义处理隐藏逻辑
- 隐藏时直接调用 Tooltip 现有接口回贴背景快照并作废,不再区分托管分发阶段
- 关键改动:
- 简化 `Button::hideTooltip()` 分支
- 只要 `tipVisible == true`,统一调用 `tipLabel.hide()`
- 保留 `tipHoverTick` 重置逻辑
- 涉及文件 / 类 / 函数:
- [`Button.cpp`](D:/programming/imGUI-easyX/imGui-easyX/Button.cpp)
- `Button::hideTooltip()`
- 影响的 API / 行为:
- 无公开 API 变化
- 内部行为调整为“Tooltip 隐藏时总是立即回贴其自身区域”
- 关键约束 / 不变量:
- Tooltip 继续作为 `Button` 内置浮层存在
- 不引入新的 Tooltip 控件树托管协议
- 不扩大 `Window` 托管重绘 coverage
- 回滚点 / 开关:
- 若后续需要回退,只需恢复 `Button::hideTooltip()` 的旧分支逻辑
## 影响评估
- 影响范围:
- 启用 Tooltip 的 `Button`
- `KEY == 4` 等包含 Tooltip 的回归场景
- 兼容性影响:无
- 行为变化:有(Tooltip 隐藏时由“部分路径只作废快照”改为“统一立即回贴并作废”)
- 性能影响:无
- 回归风险:
- Tooltip 隐藏时会发生一次即时局部回贴
- 由于 Tooltip 本身就是按钮内置浮层,这个行为与其显示方式一致,风险相对可控
## 验证结果
- 验证步骤:
1. 修改 [`Button.cpp`](D:/programming/imGUI-easyX/imGui-easyX/Button.cpp) 中 `Button::hideTooltip()` 的 Tooltip 隐藏分支
2. 编译 `Button.cpp`
3. 编译 `z-testDome.cpp` 并指定 `KEY=4`,确认 Tooltip 相关 demo 入口可正常编译
- 验证结果:
- 代码已完成修改
- 源码级编译验证通过
- 基于当前代码链路推演,Tooltip 离开按钮后会立即回贴自身区域,不再依赖按钮本体重绘覆盖 Tooltip 区域
- 回归检查:
- 未做 GUI 手动交互回归
- 需用户进一步确认实际 Tooltip 行为
- 验证证据:
- `Button.cpp` 编译通过
- `z-testDome.cpp /DKEY=4` 编译通过
## 落地信息
- Commit: 当前工作区未提交
- PR[可选]
- 发布版本:[可选]
- 备注:
- 本次修复未改动 Tooltip 对外接口,只调整内部隐藏路径