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

收口 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
+14 -7
View File
@@ -173,11 +173,13 @@ void Button::draw()
//保存当前样式和颜色
saveStyle();
StellarX::ControlText drawTextStyle = textStyle;
if (StellarX::ButtonMode::DISABLED == mode) //设置禁用按钮色
{
setfillcolor(DISABLEDCOLOUR);
textStyle.bStrikeOut = true;
// 禁用态删除线只属于本次绘制效果,不回写用户公开 textStyle。
drawTextStyle.bStrikeOut = true;
}
else
{
@@ -192,11 +194,11 @@ void Button::draw()
setlinecolor(buttonBorderColor);
//设置字体颜色
settextcolor(textStyle.color);
settextcolor(drawTextStyle.color);
//设置字体样式
settextstyle(textStyle.nHeight, textStyle.nWidth, textStyle.lpszFace,
textStyle.nEscapement, textStyle.nOrientation, textStyle.nWeight,
textStyle.bItalic, textStyle.bUnderline, textStyle.bStrikeOut);
settextstyle(drawTextStyle.nHeight, drawTextStyle.nWidth, drawTextStyle.lpszFace,
drawTextStyle.nEscapement, drawTextStyle.nOrientation, drawTextStyle.nWeight,
drawTextStyle.bItalic, drawTextStyle.bUnderline, drawTextStyle.bStrikeOut);
if (needCutText)
cutButtonText();
@@ -526,6 +528,13 @@ RECT Button::getManagedRepaintCoverageRect() const
return coverage;
}
RECT Button::getManagedRepaintPersistentCoverageRect() const
{
// Tooltip 属于临时浮层,只参与完整 coverage 和上层 overlay 判断;
// 兄弟控件是否需要作废背景快照,只应由按钮本体这类持久绘制范围决定。
return getBoundsRect();
}
void Button::setOnClickListener(std::function<void()> callback)
{
this->onClickCallback = std::move(callback);
@@ -542,8 +551,6 @@ void Button::setOnToggleOffListener(std::function<void()> callback)
void Button::setbuttonMode(StellarX::ButtonMode mode)
{
if (this->mode == StellarX::ButtonMode::DISABLED && mode != StellarX::ButtonMode::DISABLED)
textStyle.bStrikeOut = false;
//取值范围参考 buttMode的枚举注释
this->mode = mode;
dirty = true; // 标记需要重绘