Expose layout API and refresh regression docs
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# BUG-20260410-0004
|
||||
|
||||
> 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- ID: `BUG-20260410-0004`
|
||||
- 标题: 按钮 Tooltip 显示后,鼠标移出按钮区域提示框不消失
|
||||
- 状态:已修复
|
||||
- 严重性:S3
|
||||
- 优先级:P1
|
||||
- 模块: Button / Tooltip / 托管重绘
|
||||
- 版本 / 分支: 当前工作区 / 下一版本开发中
|
||||
- 环境: Windows + EasyX,本地 GUI Demo
|
||||
- 发现人: 用户
|
||||
- 关联 Fix ID: `Fix-BUG-20260410-0004`
|
||||
|
||||
## 问题描述
|
||||
|
||||
- 现象:
|
||||
- 按钮启用 Tooltip 后,提示框成功显示。
|
||||
- 鼠标离开按钮区域后,Tooltip 仍残留在屏幕上,不会及时消失。
|
||||
- 影响范围:
|
||||
- 所有启用了 Tooltip 的 `Button`
|
||||
- 典型场景包括 `KEY == 4` 的综合回归用例
|
||||
- 期望结果:
|
||||
- 鼠标离开按钮后,Tooltip 应立即回贴并消失,不留下残影
|
||||
- 实际结果:
|
||||
- Tooltip 逻辑状态已切换为隐藏,但屏幕上的提示框区域未被及时擦除
|
||||
|
||||
## 复现信息
|
||||
|
||||
- 前置条件:
|
||||
- 使用启用 Tooltip 的按钮
|
||||
- 复现步骤:
|
||||
|
||||
1. 运行带 Tooltip 按钮的 Demo
|
||||
2. 将鼠标悬停在按钮上,等待 Tooltip 显示
|
||||
3. 将鼠标移出按钮区域,观察 Tooltip 是否立即消失
|
||||
|
||||
- 复现概率:高概率
|
||||
- 最小复现 Demo:
|
||||
- `z-testDome.cpp` 中 `KEY == 4`
|
||||
- 证据:现象观察 + 代码链路分析
|
||||
|
||||
## 初步分析
|
||||
|
||||
- 疑似位置:
|
||||
- [`Button.cpp`](D:/programming/imGUI-easyX/imGui-easyX/Button.cpp)
|
||||
- `Button::hideTooltip()`
|
||||
- 触发条件:
|
||||
- Tooltip 已经显示
|
||||
- 鼠标离开按钮,进入 Tooltip 隐藏分支
|
||||
- 相关线索:
|
||||
- Tooltip 不是独立控件树成员,而是 `Button::draw()` 末尾补画的内置浮层
|
||||
- 隐藏时若只作废快照而不回贴 Tooltip 自己的背景,按钮本体重绘并不会覆盖 Tooltip 占用区域
|
||||
- 最近相关改动:
|
||||
- 事件改状态 / Window 托管重绘收口
|
||||
- 布局系统第一阶段重构
|
||||
|
||||
## 跟踪信息
|
||||
|
||||
- 首次发现时间: 2026-04-10
|
||||
- 最后更新时间: 2026-04-10
|
||||
- 修复版本: 待定
|
||||
- 验证版本: 当前工作区
|
||||
- 备注:
|
||||
- 本文档仅记录问题本身,具体修复方案见关联 Fix 文档
|
||||
@@ -0,0 +1,73 @@
|
||||
# BUG-20260415-0005
|
||||
|
||||
> 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- ID: BUG-20260415-0005
|
||||
- 标题: 局部重绘未补画上层兄弟导致遮挡错误
|
||||
- 状态:已修复
|
||||
- 严重性:S2
|
||||
- 优先级:P1
|
||||
- 模块: Window / Canvas / TabControl 局部重绘与合成
|
||||
- 版本 / 分支: 当前工作区
|
||||
- 环境: Windows + EasyX
|
||||
- 发现人: 用户回归测试
|
||||
- 关联 Fix ID:[可选]
|
||||
- `Fix-BUG-20260415-0005`
|
||||
|
||||
## 问题描述
|
||||
|
||||
- 现象:
|
||||
- 下层控件发生局部重绘后,位于其上方且与 coverage 相交的兄弟控件没有被补画回来。
|
||||
- 表现为上层 `Canvas / Dialog / 页 / 页签按钮` 被“切掉”或被下层重新盖住。
|
||||
- 影响范围:
|
||||
- 顶层普通控件之间
|
||||
- `Canvas` 直接子控件之间
|
||||
- `TabControl` 页签按钮与页面之间
|
||||
- 期望结果:
|
||||
- 任意局部重绘提交后,父容器应按实际绘制顺序把 coverage 上方相交的兄弟重新合成回来。
|
||||
- 实际结果:
|
||||
- 仅 dirty root 或 dirty child 被重画,上层兄弟未恢复。
|
||||
|
||||
## 复现信息
|
||||
|
||||
- 前置条件:[可选]
|
||||
- 使用 `KEY5` 测试场景
|
||||
- 复现步骤:
|
||||
|
||||
1. 进入 `KEY5`
|
||||
2. 触发下层控件局部重绘,例如 `Table` 翻页或相交子控件 hover / click
|
||||
3. 观察上层相交兄弟区域
|
||||
|
||||
- 复现概率:高概率
|
||||
- 最小复现 Demo:[可选]
|
||||
- `KEY5` 中 `Table` 与顶层粉色浮层重叠场景
|
||||
- 同父 `Canvas` 兄弟相交场景
|
||||
- 证据:截图 / 日志 / 调用栈 / 录屏 / 断点观察
|
||||
- 断点观察显示 dirty root 已提交,但上层 sibling 未重新执行 draw
|
||||
|
||||
## 初步分析
|
||||
|
||||
- 疑似位置:
|
||||
- [`Window.cpp`](D:/programming/imGUI-easyX/imGui-easyX/Window.cpp)
|
||||
- [`Canvas.cpp`](D:/programming/imGUI-easyX/imGui-easyX/Canvas.cpp)
|
||||
- [`TabControl.cpp`](D:/programming/imGUI-easyX/imGui-easyX/TabControl.cpp)
|
||||
- 触发条件:
|
||||
- 局部重绘提交写入了下层像素,但没有做 overlay 兄弟补画
|
||||
- 相关线索:
|
||||
- 该问题不依赖“是否回贴背景快照”,直接重绘同样会破坏上层合成结果
|
||||
- `Dialog` 之前之所以需要补画,本质上是同一类问题
|
||||
- 最近相关改动:[可选]
|
||||
- 第二阶段开始引入更严格的局部重绘与 overlay 收口后,问题被系统性暴露
|
||||
|
||||
## 跟踪信息
|
||||
|
||||
- 首次发现时间: 2026-04-15
|
||||
- 最后更新时间: 2026-04-15
|
||||
- 修复版本:[可选]
|
||||
- 当前工作区
|
||||
- 验证版本:[可选]
|
||||
- 当前工作区
|
||||
- 备注:[可选]
|
||||
- 后续仍需继续关注 `Dialog` 旧 synthetic move 机制与新模型的统一。
|
||||
@@ -0,0 +1,53 @@
|
||||
# BUG-20260415-0006
|
||||
|
||||
> 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- ID: BUG-20260415-0006
|
||||
- 标题: 托管局部重绘未正确提交脏子树导致嵌套 Canvas 按钮状态不刷新
|
||||
- 状态:已修复
|
||||
- 严重性:S2
|
||||
- 优先级:P1
|
||||
- 模块: 重绘 / 托管局部提交 / Canvas 嵌套
|
||||
- 版本 / 分支: 当前工作区
|
||||
- 环境: Windows / EasyX / KEY5 回归场景
|
||||
- 发现人: 用户
|
||||
- 关联 Fix ID:Fix-BUG-20260415-0006
|
||||
|
||||
## 问题描述
|
||||
|
||||
- 现象: KEY5 中第二层、第三层 Canvas 内按钮可正常触发 hover / click 回调,但视觉状态不刷新。
|
||||
- 影响范围: 嵌套 Canvas 内的深层按钮、页内嵌套容器按钮、所有依赖托管局部重绘的脏后代场景。
|
||||
- 期望结果: 只要深层按钮状态变化,最外层托管 root 应能正确提交对应脏子树并把视觉结果画出来。
|
||||
- 实际结果: 日志显示事件和回调已执行,但屏幕上不出现 hover / press / release 反馈,直到触发更大范围重绘才会补出来。
|
||||
|
||||
## 复现信息
|
||||
|
||||
- 前置条件: 使用 KEY5 场景,启用三层 Canvas 嵌套回归区。
|
||||
- 复现步骤:
|
||||
|
||||
1. 打开 KEY5。
|
||||
2. 将鼠标移到第二层或第三层 Canvas 内的按钮上,观察 hover。
|
||||
3. 点击按钮并观察按下、松开状态。
|
||||
|
||||
- 复现概率:必现
|
||||
- 最小复现 Demo:KEY5 A 区三层 Canvas 嵌套
|
||||
- 证据:日志显示按钮回调已执行,但按钮视觉状态不刷新
|
||||
|
||||
## 初步分析
|
||||
|
||||
- 疑似位置: Canvas 托管局部重绘提交链、Window 托管重绘登记 coverage
|
||||
- 触发条件: root 的直接子控件本身不 dirty,但其下存在 dirty descendant
|
||||
- 相关线索:
|
||||
- 托管局部提交只认直接 dirty child
|
||||
- 深层按钮状态变化未提升到 root 下直接脏分支
|
||||
- 最近相关改动:第二阶段布局与托管重绘收口
|
||||
|
||||
## 跟踪信息
|
||||
|
||||
- 首次发现时间: 2026-04-15
|
||||
- 最后更新时间: 2026-04-15
|
||||
- 修复版本:当前工作区
|
||||
- 验证版本:KEY5 编译级验证通过,待用户手测
|
||||
- 备注:该问题已按机制修复,不再使用临时整容器重绘补丁
|
||||
@@ -0,0 +1,53 @@
|
||||
# BUG-20260415-0007
|
||||
|
||||
> 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- ID: BUG-20260415-0007
|
||||
- 标题: 实际绘制 coverage 低估导致 Tooltip 与 overlay 补画漏算
|
||||
- 状态:已修复
|
||||
- 严重性:S2
|
||||
- 优先级:P1
|
||||
- 模块: Tooltip / overlay 重组 / 托管 coverage
|
||||
- 版本 / 分支: 当前工作区
|
||||
- 环境: Windows / EasyX / KEY5 回归场景
|
||||
- 发现人: 用户
|
||||
- 关联 Fix ID:Fix-BUG-20260415-0007
|
||||
|
||||
## 问题描述
|
||||
|
||||
- 现象: C 米区容器内按钮 Tooltip 会画到 D 橙区上层;类似问题也可能出现在带附加绘制区域的其他控件上。
|
||||
- 影响范围: Tooltip、页签按钮 Tooltip、内部按钮与浮层、overlay 补画依赖 coverage 的所有链路。
|
||||
- 期望结果: overlay 补画应按“实际写到屏幕上的区域”判断,而不是只按控件本体 bounds。
|
||||
- 实际结果: 按钮本体未与上层控件相交时,Tooltip 超出部分不会触发 overlay 补画,导致 Tooltip 压到不应被压住的上层控件之上。
|
||||
|
||||
## 复现信息
|
||||
|
||||
- 前置条件: 使用 KEY5,保证 C 米区按钮 Tooltip 会伸进 D 橙区。
|
||||
- 复现步骤:
|
||||
|
||||
1. 打开 KEY5。
|
||||
2. 将鼠标移到 C 米区容器内按钮上,触发 Tooltip。
|
||||
3. 观察 Tooltip 与 D 橙区的遮挡关系。
|
||||
|
||||
- 复现概率:必现
|
||||
- 最小复现 Demo:KEY5 C / D 交界区
|
||||
- 证据:Tooltip 可见区域超出按钮 bounds,但 overlay 补画未跟上
|
||||
|
||||
## 初步分析
|
||||
|
||||
- 疑似位置: Button Tooltip coverage、Window/Canvas/TabControl 的 coverage 计算链
|
||||
- 触发条件: 控件本体 bounds 未与 overlay 相交,但附加绘制区域(例如 Tooltip)已伸入 overlay 区
|
||||
- 相关线索:
|
||||
- 之前的 coverage 默认等于 `getBoundsRect()`
|
||||
- `Button` 的 Tooltip 由 `tipLabel` 额外绘制,不属于按钮本体矩形
|
||||
- 最近相关改动:顶层 overlay 传递式补画机制已补齐,但 coverage 仍按本体矩形计算
|
||||
|
||||
## 跟踪信息
|
||||
|
||||
- 首次发现时间: 2026-04-15
|
||||
- 最后更新时间: 2026-04-15
|
||||
- 修复版本:当前工作区
|
||||
- 验证版本:KEY5 编译级验证通过,待用户手测
|
||||
- 备注:Tooltip 智能选位明确后置,本次只修根因链路
|
||||
@@ -0,0 +1,68 @@
|
||||
# BUG-20260415-0008
|
||||
|
||||
> 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
|
||||
|
||||
## 基本信息
|
||||
|
||||
- ID: BUG-20260415-0008
|
||||
- 标题: TabControl 页签层级与重复激活链路导致 Tooltip 和残影异常
|
||||
- 状态:已修复
|
||||
- 严重性:S2
|
||||
- 优先级:P1
|
||||
- 模块: TabControl / 页签绘制 / 外部激活页签
|
||||
- 版本 / 分支: 当前工作区
|
||||
- 环境: Windows / EasyX / KEY1 / KEY5
|
||||
- 发现人: 用户
|
||||
- 关联 Fix ID:Fix-BUG-20260415-0008
|
||||
|
||||
## 问题描述
|
||||
|
||||
- 现象:
|
||||
- 有任意页签打开时,页签按钮 Tooltip 无法正常显示,只有全部页签关闭时正常。
|
||||
- KEY1 中页签 1 的表格超出 TabControl 区域,外部按钮重复激活同一页签后,再切页或关闭页签会留下超出部分残影。
|
||||
- 影响范围: TabControl 页签按钮 Tooltip、外部 `setActiveIndex()` 重复调用、页内超出页面边界绘制的控件。
|
||||
- 期望结果:
|
||||
- 页签按钮应始终位于页面之上,Tooltip 正常显示。
|
||||
- 外部重复激活已激活页签不应破坏当前可见页面的快照链。
|
||||
- 实际结果:
|
||||
- 页签按钮 Tooltip 会被页面盖掉。
|
||||
- 外部重复激活同一页签后,页内超出页面区域的 Table 在切页/关页时会残留。
|
||||
|
||||
## 复现信息
|
||||
|
||||
- 前置条件:
|
||||
- KEY5:存在可见页面和页签按钮 Tooltip
|
||||
- KEY1:页签 1 内的 Table 长于 TabControl 页面区域,存在外部按钮 `test`
|
||||
- 复现步骤:
|
||||
|
||||
1. 在 KEY5 中打开任意页签,将鼠标移到页签按钮上触发 Tooltip。
|
||||
2. 观察 Tooltip 是否被页面盖掉。
|
||||
3. 在 KEY1 中点击一次 `test` 激活页签 1。
|
||||
4. 再点击一次 `test`,然后切页或关闭页签 1。
|
||||
|
||||
- 复现概率:必现
|
||||
- 最小复现 Demo:KEY5 TabControl 区、KEY1 页签 1 + 外部 `test` 按钮
|
||||
- 证据:Tooltip 被页面覆盖;重复激活后切页/关页出现残影
|
||||
|
||||
## 初步分析
|
||||
|
||||
- 疑似位置:
|
||||
- `TabControl::draw()`
|
||||
- `TabControl::requestRepaint()`
|
||||
- `TabControl::setActiveIndex()`
|
||||
- `Button::setButtonClick()`
|
||||
- 触发条件:
|
||||
- 页签按钮先画、页面后画
|
||||
- `TOGGLE` 同状态重复 set 仍触发 onToggleOn
|
||||
- 相关线索:
|
||||
- 页面绘制层级高于页签按钮时,页签 Tooltip 会被后画的页面盖掉
|
||||
- 重复激活已激活页签会重复执行页面 `onWindowResize()` / `setIsVisible(true)` 链
|
||||
- 最近相关改动:TabControl overlay / Tooltip 回归专项修复
|
||||
|
||||
## 跟踪信息
|
||||
|
||||
- 首次发现时间: 2026-04-15
|
||||
- 最后更新时间: 2026-04-15
|
||||
- 修复版本:当前工作区
|
||||
- 验证版本:KEY1 / KEY5 编译级验证通过,待用户手测
|
||||
- 备注:本次只修页签层级和重复激活链路,不扩到 TabControl 其它内部布局语义
|
||||
Reference in New Issue
Block a user