发布前托管重绘与布局封版收口

收口 Dialog/overlay 后鼠标状态同步、Tooltip 临时 coverage 与持久 coverage 拆分、跨 root 脏区补提交、TextBox/Button 绘制副作用修复,并补充 KEY6 回归用例和 BUG/Fix/Feature 开发记录。
This commit is contained in:
Codex
2026-05-17 00:26:08 +08:00
parent 2388f22c99
commit 9155a86a8a
26 changed files with 1355 additions and 175 deletions
+34
View File
@@ -614,6 +614,40 @@ RECT Table::getManagedRepaintCoverageRect() const
return coverage;
}
RECT Table::getManagedRepaintPersistentCoverageRect() const
{
// Table 当前仍按整表绘制保证正确性;分页按钮 Tooltip 属于临时浮层,
// 不能进入持久 coverage,否则可能污染外层兄弟控件快照。
RECT coverage = getBoundsRect();
if (pageNum && pageNum->IsVisible())
{
const RECT pageRect = pageNum->getManagedRepaintPersistentCoverageRect();
coverage.left = (std::min)(coverage.left, pageRect.left);
coverage.top = (std::min)(coverage.top, pageRect.top);
coverage.right = (std::max)(coverage.right, pageRect.right);
coverage.bottom = (std::max)(coverage.bottom, pageRect.bottom);
}
if (prevButton && prevButton->IsVisible())
{
const RECT prevRect = prevButton->getManagedRepaintPersistentCoverageRect();
coverage.left = (std::min)(coverage.left, prevRect.left);
coverage.top = (std::min)(coverage.top, prevRect.top);
coverage.right = (std::max)(coverage.right, prevRect.right);
coverage.bottom = (std::max)(coverage.bottom, prevRect.bottom);
}
if (nextButton && nextButton->IsVisible())
{
const RECT nextRect = nextButton->getManagedRepaintPersistentCoverageRect();
coverage.left = (std::min)(coverage.left, nextRect.left);
coverage.top = (std::min)(coverage.top, nextRect.top);
coverage.right = (std::max)(coverage.right, nextRect.right);
coverage.bottom = (std::max)(coverage.bottom, nextRect.bottom);
}
return coverage;
}
void Table::setHeaders(std::initializer_list<std::string> headers)
{
this->headers.clear();