Finalize layout stage 2 fixes and refresh regression scenes

This commit is contained in:
Codex
2026-04-16 11:40:39 +08:00
parent b7ad960518
commit 738cf035bb
20 changed files with 1470 additions and 308 deletions
+27 -3
View File
@@ -24,23 +24,47 @@ class Label : public Control
std::string text; //标签文本
COLORREF textBkColor; //标签背景颜色
bool textBkDisap = false; //标签背景是否透明
std::string lastMeasuredText; // 最近一次参与尺寸测量的文本
StellarX::ControlText lastMeasuredStyle; // 最近一次参与尺寸测量的字体样式
bool contentMeasureValid = false; // 当前内容尺寸缓存是否有效
//标签事件处理(标签无事件)不实现具体代码
bool handleEvent(const ExMessage& msg) override { return false; }
//用来检查对话框是否模态,此控件不做实现
bool model() const override { return false; };
// 根据当前文本和字体样式刷新运行态尺寸。
// 这是 Label 的内容驱动几何入口:
// - 覆盖文本变化
// - 覆盖字体样式变化
// - 只更新运行态宽高,不自动提交设计基线 local*
void refreshContentDrivenRuntimeGeometry();
public:
// 标签字体样式保持公开,便于用户直接改字段。
// 但直接修改 textStyle 后,必须显式调用 setDirty(true)
// 才会触发内容驱动尺寸刷新并让新的运行态宽高生效。
StellarX::ControlText textStyle; //标签文本样式
public:
// 默认构造:创建一个内容驱动尺寸的标签
Label();
// 指定位置、文本和基础样式构造标签
Label(int x, int y, std::string text = "标签", COLORREF textcolor = BLACK, COLORREF bkColor = RGB(255, 255, 255));
// 绘制标签文本
void draw() override;
//用于“隐藏提示框”时调用(还原并释放快照)
void hide();
//设置标签背景是否透明
// Label 的内容尺寸由文本和字体样式共同决定。
// 因此只要进入 dirty 状态,就在绘制前先刷新一次运行态尺寸,
// 避免 draw() 阶段继续承担新的几何决策。
void setDirty(bool dirty) override;
// 设置标签背景是否透明
void setTextdisap(bool key);
//设置标签背景颜色
// 设置标签背景颜色
void setTextBkColor(COLORREF color);
//设置标签文本
// 设置标签文本,并触发内容驱动尺寸刷新
void setText(std::string text);
protected:
// 统一布局器只负责安置 Label 的运行态位置;
// 宽高仍由 Label 自己的内容驱动路径决定。
void applyResolvedLayoutRect(const StellarX::ResolvedLayoutRect& rect) override;
};