Files
StellarX-kaifa/开发记录/BUG/BUG-20260415-0006-托管局部重绘未正确提交脏子树导致嵌套Canvas按钮状态不刷新.md

2.1 KiB
Raw Permalink Blame History

BUG-20260415-0006

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

基本信息

  • ID: BUG-20260415-0006
  • 标题: 托管局部重绘未正确提交脏子树导致嵌套 Canvas 按钮状态不刷新
  • 状态:已修复
  • 严重性:S2
  • 优先级:P1
  • 模块: 重绘 / 托管局部提交 / Canvas 嵌套
  • 版本 / 分支: 当前工作区
  • 环境: Windows / EasyX / KEY5 回归场景
  • 发现人: 用户
  • 关联 Fix IDFix-BUG-20260415-0006

问题描述

  • 现象: KEY5 中第二层、第三层 Canvas 内按钮可正常触发 hover / click 回调,但视觉状态不刷新。
  • 影响范围: 嵌套 Canvas 内的深层按钮、页内嵌套容器按钮、所有依赖托管局部重绘的脏后代场景。
  • 期望结果: 只要深层按钮状态变化,最外层托管 root 应能正确提交对应脏子树并把视觉结果画出来。
  • 实际结果: 日志显示事件和回调已执行,但屏幕上不出现 hover / press / release 反馈,直到触发更大范围重绘才会补出来。

复现信息

  • 前置条件: 使用 KEY5 场景,启用三层 Canvas 嵌套回归区。
  • 复现步骤:
  1. 打开 KEY5。
  2. 将鼠标移到第二层或第三层 Canvas 内的按钮上,观察 hover。
  3. 点击按钮并观察按下、松开状态。
  • 复现概率:必现
  • 最小复现 DemoKEY5 A 区三层 Canvas 嵌套
  • 证据:日志显示按钮回调已执行,但按钮视觉状态不刷新

初步分析

  • 疑似位置: Canvas 托管局部重绘提交链、Window 托管重绘登记 coverage
  • 触发条件: root 的直接子控件本身不 dirty,但其下存在 dirty descendant
  • 相关线索:
    • 托管局部提交只认直接 dirty child
    • 深层按钮状态变化未提升到 root 下直接脏分支
  • 最近相关改动:第二阶段布局与托管重绘收口

跟踪信息

  • 首次发现时间: 2026-04-15
  • 最后更新时间: 2026-04-15
  • 修复版本:当前工作区
  • 验证版本:KEY5 编译级验证通过,待用户手测
  • 备注:该问题已按机制修复,不再使用临时整容器重绘补丁