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

2.3 KiB
Raw Blame History

BUG-20260511-0012

适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。

基本信息

  • ID: BUG-20260511-0012
  • 标题: Tooltip 临时浮层污染或擦除兄弟控件快照
  • 状态:已修复
  • 严重性:S2
  • 优先级:P1
  • 模块: Tooltip / Canvas / TabControl / 托管重绘 / 背景快照
  • 版本 / 分支: 当前工作区
  • 环境: Windows / EasyX / KEY6
  • 发现人: 用户
  • 关联 Fix ID: Fix-BUG-20260511-0012

问题描述

  • 现象: KEY6 A 区禁用按钮触发 Tooltip 后,如果 Tooltip 位于状态 Label 下方,状态 Label 可能捕获 Tooltip 到背景快照,或用透明 Label 的旧快照擦掉 Tooltip 一部分。
  • 影响范围: 同一容器内,绘制顺序在 Tooltip 触发控件之后、且与 Tooltip coverage 相交的兄弟控件。
  • 期望结果: Tooltip 作为临时浮层显示,不应污染兄弟控件背景快照,也不应被透明 Label 的旧快照擦除。
  • 实际结果: 旧逻辑把 Tooltip coverage 与持久绘制 coverage 混用,导致兄弟控件作废快照并重抓,或保留快照重画时擦掉 Tooltip。

复现信息

  • 前置条件:[可选] 打开 KEY6。
  • 复现步骤:
  1. 将鼠标移到 A 区禁用按钮上触发 Tooltip。
  2. 让 Tooltip 显示区域位于状态 Label 下方。
  3. 观察状态 Label 区域是否覆盖 / 擦除 Tooltip。
  4. 触发下一次重绘后观察是否有 Tooltip 残留。
  • 复现概率:高概率
  • 最小复现 DemoKEY6 A 区
  • 证据:Label::draw() 即使透明也会先 restBackground();如果被临时浮层触发补画,会回贴旧快照。

初步分析

  • 疑似位置: Canvas::requestRepaint(this) / TabControl::requestRepaint(this) 的局部 overlay 补画策略。
  • 触发条件: 下层 Button Tooltip 的完整 coverage 与后序兄弟控件相交。
  • 相关线索:
    • Button::getManagedRepaintCoverageRect() 包含 Tooltip。
    • Canvas 旧逻辑用同一 coverage 同时决定“是否补画兄弟”和“是否刷新兄弟背景快照”。
  • 最近相关改动:[可选] Tooltip coverage 纳入托管重绘链。

跟踪信息

  • 首次发现时间: 2026-05-11
  • 最后更新时间: 2026-05-11
  • 修复版本: 当前工作区
  • 验证版本: KEY1 ~ KEY6 编译通过,待用户手测
  • 备注:[可选]