发布前托管重绘与布局封版收口
收口 Dialog/overlay 后鼠标状态同步、Tooltip 临时 coverage 与持久 coverage 拆分、跨 root 脏区补提交、TextBox/Button 绘制副作用修复,并补充 KEY6 回归用例和 BUG/Fix/Feature 开发记录。
This commit is contained in:
+347
-79
@@ -39,12 +39,318 @@
|
||||
// * TabControl 页签按钮与页面层级正确;页签 tooltip 不会再被页面盖掉。
|
||||
// * Table 分页按钮、页码标签、与上层浮层相交时的重绘链保持正确。
|
||||
//
|
||||
// 6. KEY6:已实现但主回归未覆盖的枚举/分支补充
|
||||
// - 目标:补充 TabPlacement::Right、Button 圆/椭圆/禁用态、TextBox 圆角形状、
|
||||
// 以及 YesNo / RetryCancel / AbortRetryIgnore 消息框类型。
|
||||
// - 预期:
|
||||
// * 右侧页签布局、切页、页内按钮和输入框正常。
|
||||
// * 圆形/椭圆按钮命中区域符合形状,禁用按钮不触发点击回调。
|
||||
// * 剩余 MessageBox 类型按钮结果链正常,非模态关闭不残留。
|
||||
//
|
||||
// 当前阶段建议主回归集:KEY1 + KEY2 + KEY5
|
||||
// Dialog / MessageBox 补充专项:KEY4
|
||||
// 实现分支补充专项:KEY6
|
||||
#include"StellarX.h"
|
||||
#include <vector>
|
||||
#ifndef KEY
|
||||
#define KEY 5
|
||||
#define KEY 6
|
||||
#endif
|
||||
|
||||
// 测试用例统一使用最新布局 API,避免继续依赖旧 setAnchor() 兼容层。
|
||||
// 这些 helper 只服务 z-testDome:命名带 SxTest 前缀,避免被误认为框架公开接口。
|
||||
static void SxTestSetDesignX(Control* control)
|
||||
{
|
||||
if (!control) return;
|
||||
control->setHorizontalAnchors(false, false);
|
||||
control->setHorizontalSizePolicy(StellarX::AxisSizePolicy::FixedSize);
|
||||
control->setHorizontalAlignPolicy(StellarX::AxisAlignPolicy::Start);
|
||||
}
|
||||
|
||||
static void SxTestSetDesignY(Control* control)
|
||||
{
|
||||
if (!control) return;
|
||||
control->setVerticalAnchors(false, false);
|
||||
control->setVerticalSizePolicy(StellarX::AxisSizePolicy::FixedSize);
|
||||
control->setVerticalAlignPolicy(StellarX::AxisAlignPolicy::Start);
|
||||
}
|
||||
|
||||
static void SxTestSetStretchX(Control* control)
|
||||
{
|
||||
if (!control) return;
|
||||
control->setHorizontalAnchors(true, true);
|
||||
control->setHorizontalSizePolicy(StellarX::AxisSizePolicy::Stretch);
|
||||
control->setHorizontalAlignPolicy(StellarX::AxisAlignPolicy::Start);
|
||||
SxTestSetDesignY(control);
|
||||
}
|
||||
|
||||
static void SxTestSetLeftFixed(Control* control)
|
||||
{
|
||||
if (!control) return;
|
||||
control->setHorizontalAnchors(true, false);
|
||||
control->setHorizontalSizePolicy(StellarX::AxisSizePolicy::FixedSize);
|
||||
control->setHorizontalAlignPolicy(StellarX::AxisAlignPolicy::Start);
|
||||
SxTestSetDesignY(control);
|
||||
}
|
||||
|
||||
static void SxTestSetRightFixed(Control* control)
|
||||
{
|
||||
if (!control) return;
|
||||
control->setHorizontalAnchors(false, true);
|
||||
control->setHorizontalSizePolicy(StellarX::AxisSizePolicy::FixedSize);
|
||||
control->setHorizontalAlignPolicy(StellarX::AxisAlignPolicy::End);
|
||||
SxTestSetDesignY(control);
|
||||
}
|
||||
|
||||
static void SxTestSetTopFixed(Control* control)
|
||||
{
|
||||
if (!control) return;
|
||||
SxTestSetDesignX(control);
|
||||
control->setVerticalAnchors(true, false);
|
||||
control->setVerticalSizePolicy(StellarX::AxisSizePolicy::FixedSize);
|
||||
control->setVerticalAlignPolicy(StellarX::AxisAlignPolicy::Start);
|
||||
}
|
||||
|
||||
static void SxTestSetBottomFixed(Control* control)
|
||||
{
|
||||
if (!control) return;
|
||||
SxTestSetDesignX(control);
|
||||
control->setVerticalAnchors(false, true);
|
||||
control->setVerticalSizePolicy(StellarX::AxisSizePolicy::FixedSize);
|
||||
control->setVerticalAlignPolicy(StellarX::AxisAlignPolicy::End);
|
||||
}
|
||||
|
||||
static void SxTestSetStretchY(Control* control)
|
||||
{
|
||||
if (!control) return;
|
||||
SxTestSetDesignX(control);
|
||||
control->setVerticalAnchors(true, true);
|
||||
control->setVerticalSizePolicy(StellarX::AxisSizePolicy::Stretch);
|
||||
control->setVerticalAlignPolicy(StellarX::AxisAlignPolicy::Start);
|
||||
}
|
||||
|
||||
#if 6 == KEY
|
||||
|
||||
int main()
|
||||
{
|
||||
StellarX::SxLogger::setGBK();
|
||||
StellarX::SxLogger::Get().enableConsole(true);
|
||||
StellarX::SxLogger::Get().setMinLevel(StellarX::SxLogLevel::Debug);
|
||||
StellarX::SxLogger::Get().setLanguage(StellarX::SxLogLanguage::ZhCN);
|
||||
|
||||
Window win(1120, 760, 1, RGB(246, 248, 251), "StellarX KEY6 分支覆盖补充");
|
||||
|
||||
const COLORREF panelColor = RGB(230, 238, 248);
|
||||
const COLORREF shapeColor = RGB(244, 235, 218);
|
||||
const COLORREF tabColor = RGB(226, 242, 235);
|
||||
const COLORREF msgColor = RGB(240, 229, 245);
|
||||
const COLORREF hoverColor = RGB(255, 225, 92);
|
||||
const COLORREF trueColor = RGB(238, 142, 104);
|
||||
const COLORREF falseColor = RGB(247, 248, 250);
|
||||
|
||||
auto configureButton = [&](Button* button, const std::string& tooltip)
|
||||
{
|
||||
button->enableTooltip(true);
|
||||
button->setTooltipDelay(120);
|
||||
button->setTooltipText(tooltip);
|
||||
};
|
||||
|
||||
auto makeButton = [&](int x, int y, int w, int h, const std::string& text)
|
||||
{
|
||||
auto button = std::make_unique<Button>(x, y, w, h, text, trueColor, falseColor, hoverColor);
|
||||
configureButton(button.get(), text);
|
||||
return button;
|
||||
};
|
||||
|
||||
auto header = std::make_unique<Canvas>(20, 20, 1080, 82);
|
||||
auto headerPtr = header.get();
|
||||
headerPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
headerPtr->setCanvasBkColor(panelColor);
|
||||
SxTestSetStretchX(headerPtr);
|
||||
|
||||
auto title = std::make_unique<Label>(18, 10, "KEY6:已实现但主回归未覆盖的分支补充");
|
||||
title->textStyle.nHeight = 26;
|
||||
title->setDirty(true);
|
||||
title->setTextdisap(true);
|
||||
auto hint = std::make_unique<Label>(18, 48, "覆盖:Right 页签、圆/椭圆按钮命中、DISABLED 按钮、圆角 TextBox、剩余 MessageBox 类型");
|
||||
hint->setTextdisap(true);
|
||||
headerPtr->addControl(std::move(title));
|
||||
headerPtr->addControl(std::move(hint));
|
||||
|
||||
auto shapePanel = std::make_unique<Canvas>(20, 120, 470, 270);
|
||||
auto shapePanelPtr = shapePanel.get();
|
||||
shapePanelPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
shapePanelPtr->setCanvasBkColor(shapeColor);
|
||||
SxTestSetLeftFixed(shapePanelPtr);
|
||||
|
||||
auto statusLabel = std::make_unique<Label>(18, 226, "状态:等待交互");
|
||||
auto statusLabelPtr = statusLabel.get();
|
||||
statusLabelPtr->setTextdisap(true);
|
||||
|
||||
auto shapeTitle = std::make_unique<Label>(18, 14, "A:Button 形状与禁用态");
|
||||
shapeTitle->setTextdisap(true);
|
||||
auto shapeHint = std::make_unique<Label>(18, 40, "圆/椭圆按钮需要按形状命中;禁用按钮不应触发回调。");
|
||||
shapeHint->setTextdisap(true);
|
||||
|
||||
auto circleButton = makeButton(30, 78, 72, 72, "圆");
|
||||
circleButton->setButtonShape(StellarX::ControlShape::CIRCLE);
|
||||
circleButton->setOnClickListener([statusLabelPtr]()
|
||||
{
|
||||
statusLabelPtr->setText("状态:有边框圆形按钮被点击");
|
||||
});
|
||||
|
||||
auto solidCircleButton = makeButton(132, 78, 72, 72, "无边圆");
|
||||
solidCircleButton->setButtonShape(StellarX::ControlShape::B_CIRCLE);
|
||||
solidCircleButton->setOnClickListener([statusLabelPtr]()
|
||||
{
|
||||
statusLabelPtr->setText("状态:无边框圆形按钮被点击");
|
||||
});
|
||||
|
||||
auto ellipseButton = makeButton(234, 84, 116, 58, "椭圆");
|
||||
ellipseButton->setButtonShape(StellarX::ControlShape::ELLIPSE);
|
||||
ellipseButton->setOnClickListener([statusLabelPtr]()
|
||||
{
|
||||
statusLabelPtr->setText("状态:有边框椭圆按钮被点击");
|
||||
});
|
||||
|
||||
auto solidEllipseButton = makeButton(30, 164, 116, 50, "无边椭圆");
|
||||
solidEllipseButton->setButtonShape(StellarX::ControlShape::B_ELLIPSE);
|
||||
solidEllipseButton->setOnClickListener([statusLabelPtr]()
|
||||
{
|
||||
statusLabelPtr->setText("状态:无边框椭圆按钮被点击");
|
||||
});
|
||||
|
||||
auto disabledButton = std::make_unique<Button>(176, 164, 116, 50, "禁用", StellarX::ButtonMode::DISABLED, StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
configureButton(disabledButton.get(), "禁用按钮:应只显示禁用态,不触发点击");
|
||||
disabledButton->setOnClickListener([statusLabelPtr]()
|
||||
{
|
||||
statusLabelPtr->setText("状态:BUG,禁用按钮触发了点击");
|
||||
});
|
||||
|
||||
shapePanelPtr->addControl(std::move(shapeTitle));
|
||||
shapePanelPtr->addControl(std::move(shapeHint));
|
||||
shapePanelPtr->addControl(std::move(circleButton));
|
||||
shapePanelPtr->addControl(std::move(solidCircleButton));
|
||||
shapePanelPtr->addControl(std::move(ellipseButton));
|
||||
shapePanelPtr->addControl(std::move(solidEllipseButton));
|
||||
shapePanelPtr->addControl(std::move(disabledButton));
|
||||
shapePanelPtr->addControl(std::move(statusLabel));
|
||||
|
||||
auto tabPanel = std::make_unique<Canvas>(520, 120, 580, 270);
|
||||
auto tabPanelPtr = tabPanel.get();
|
||||
tabPanelPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
tabPanelPtr->setCanvasBkColor(tabColor);
|
||||
SxTestSetStretchX(tabPanelPtr);
|
||||
|
||||
auto tabTitle = std::make_unique<Label>(18, 14, "B:TabPlacement::Right");
|
||||
tabTitle->setTextdisap(true);
|
||||
auto tabHint = std::make_unique<Label>(18, 40, "右侧页签栏应稳定,页面区宽度应扣除页签栏。");
|
||||
tabHint->setTextdisap(true);
|
||||
|
||||
auto rightTabs = std::make_unique<TabControl>(18, 72, 542, 172);
|
||||
auto rightTabsPtr = rightTabs.get();
|
||||
rightTabsPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
rightTabsPtr->setCanvasfillMode(StellarX::FillMode::Null);
|
||||
rightTabsPtr->setTabPlacement(StellarX::TabPlacement::Right);
|
||||
rightTabsPtr->setTabBarHeight(76);
|
||||
SxTestSetStretchX(rightTabsPtr);
|
||||
|
||||
auto rightPage1 = std::make_unique<Canvas>(0, 0, 466, 172);
|
||||
rightPage1->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
rightPage1->setCanvasBkColor(RGB(240, 248, 255));
|
||||
auto rightPage1Ptr = rightPage1.get();
|
||||
auto rightPage1Label = std::make_unique<Label>(16, 18, "右侧页签页 1:按钮和圆角输入框");
|
||||
rightPage1Label->setTextdisap(true);
|
||||
auto rightPage1Button = makeButton(18, 58, 120, 34, "页内按钮");
|
||||
rightPage1Button->setOnClickListener([statusLabelPtr]()
|
||||
{
|
||||
statusLabelPtr->setText("状态:Right 页签页内按钮被点击");
|
||||
});
|
||||
auto roundInput = std::make_unique<TextBox>(160, 58, 260, 34, "圆角输入框", StellarX::TextBoxmode::INPUT_MODE, StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
roundInput->setTextBoxshape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
roundInput->setMaxCharLen(24);
|
||||
SxTestSetStretchX(roundInput.get());
|
||||
rightPage1Ptr->addControl(std::move(rightPage1Label));
|
||||
rightPage1Ptr->addControl(std::move(rightPage1Button));
|
||||
rightPage1Ptr->addControl(std::move(roundInput));
|
||||
|
||||
auto rightPage2 = std::make_unique<Canvas>(0, 0, 466, 172);
|
||||
rightPage2->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
rightPage2->setCanvasBkColor(RGB(247, 244, 236));
|
||||
auto rightPage2Ptr = rightPage2.get();
|
||||
auto rightPage2Label = std::make_unique<Label>(16, 18, "右侧页签页 2:只读圆角 TextBox");
|
||||
rightPage2Label->setTextdisap(true);
|
||||
auto roundReadOnly = std::make_unique<TextBox>(18, 58, 380, 34, "只读圆角文本框", StellarX::TextBoxmode::READONLY_MODE, StellarX::ControlShape::B_ROUND_RECTANGLE);
|
||||
roundReadOnly->setTextBoxshape(StellarX::ControlShape::B_ROUND_RECTANGLE);
|
||||
SxTestSetStretchX(roundReadOnly.get());
|
||||
rightPage2Ptr->addControl(std::move(rightPage2Label));
|
||||
rightPage2Ptr->addControl(std::move(roundReadOnly));
|
||||
|
||||
rightTabsPtr->add(std::make_pair(std::make_unique<Button>(0, 0, 76, 34, "页一"), std::move(rightPage1)));
|
||||
rightTabsPtr->add(std::make_pair(std::make_unique<Button>(0, 0, 76, 34, "页二"), std::move(rightPage2)));
|
||||
rightTabsPtr->setActiveIndex(0);
|
||||
|
||||
tabPanelPtr->addControl(std::move(tabTitle));
|
||||
tabPanelPtr->addControl(std::move(tabHint));
|
||||
tabPanelPtr->addControl(std::move(rightTabs));
|
||||
|
||||
auto messagePanel = std::make_unique<Canvas>(20, 420, 1080, 250);
|
||||
auto messagePanelPtr = messagePanel.get();
|
||||
messagePanelPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
messagePanelPtr->setCanvasBkColor(msgColor);
|
||||
SxTestSetStretchX(messagePanelPtr);
|
||||
|
||||
auto msgTitle = std::make_unique<Label>(18, 14, "C:剩余 MessageBox 类型");
|
||||
msgTitle->setTextdisap(true);
|
||||
auto msgHint = std::make_unique<Label>(18, 40, "分别打开 YesNo、RetryCancel、AbortRetryIgnore,观察按钮结果和关闭后 hover 恢复。");
|
||||
msgHint->setTextdisap(true);
|
||||
auto msgStatus = std::make_unique<Label>(18, 202, "消息框结果:等待操作");
|
||||
auto msgStatusPtr = msgStatus.get();
|
||||
msgStatus->setTextdisap(true);
|
||||
|
||||
auto yesNoButton = makeButton(30, 92, 170, 44, "模态 YesNo");
|
||||
yesNoButton->setOnClickListener([&win, msgStatusPtr]()
|
||||
{
|
||||
auto result = StellarX::MessageBox::showModal(win, "KEY6:YesNo 分支验证", "KEY6 YesNo", StellarX::MessageBoxType::YesNo);
|
||||
msgStatusPtr->setText("消息框结果:YesNo -> " + std::to_string((int)result));
|
||||
});
|
||||
|
||||
auto retryCancelButton = makeButton(230, 92, 190, 44, "模态 RetryCancel");
|
||||
retryCancelButton->setOnClickListener([&win, msgStatusPtr]()
|
||||
{
|
||||
auto result = StellarX::MessageBox::showModal(win, "KEY6:RetryCancel 分支验证", "KEY6 RetryCancel", StellarX::MessageBoxType::RetryCancel);
|
||||
msgStatusPtr->setText("消息框结果:RetryCancel -> " + std::to_string((int)result));
|
||||
});
|
||||
|
||||
auto abortRetryIgnoreButton = makeButton(450, 92, 230, 44, "非模态 AbortRetryIgnore");
|
||||
abortRetryIgnoreButton->setOnClickListener([&win, msgStatusPtr]()
|
||||
{
|
||||
StellarX::MessageBox::showAsync(
|
||||
win,
|
||||
"KEY6:AbortRetryIgnore 非模态分支验证。\n关闭后检查底层按钮 hover / tooltip 是否恢复。",
|
||||
"KEY6 AbortRetryIgnore",
|
||||
StellarX::MessageBoxType::AbortRetryIgnore,
|
||||
[msgStatusPtr](StellarX::MessageBoxResult result)
|
||||
{
|
||||
msgStatusPtr->setText("消息框结果:AbortRetryIgnore -> " + std::to_string((int)result));
|
||||
});
|
||||
});
|
||||
|
||||
messagePanelPtr->addControl(std::move(msgTitle));
|
||||
messagePanelPtr->addControl(std::move(msgHint));
|
||||
messagePanelPtr->addControl(std::move(yesNoButton));
|
||||
messagePanelPtr->addControl(std::move(retryCancelButton));
|
||||
messagePanelPtr->addControl(std::move(abortRetryIgnoreButton));
|
||||
messagePanelPtr->addControl(std::move(msgStatus));
|
||||
|
||||
win.addControl(std::move(header));
|
||||
win.addControl(std::move(shapePanel));
|
||||
win.addControl(std::move(tabPanel));
|
||||
win.addControl(std::move(messagePanel));
|
||||
|
||||
win.draw();
|
||||
return win.runEventLoop();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if 5 == KEY
|
||||
@@ -89,8 +395,7 @@ int main()
|
||||
auto headerPtr = header.get();
|
||||
headerPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
headerPtr->setCanvasBkColor(headerColor);
|
||||
headerPtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
headerPtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(headerPtr);
|
||||
|
||||
auto headerTitle = std::make_unique<Label>(18, 8, "KEY5:第二阶段专项回归");
|
||||
headerTitle->textStyle.nHeight = 26;
|
||||
@@ -108,8 +413,7 @@ int main()
|
||||
auto nestedZonePtr = nestedZone.get();
|
||||
nestedZonePtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
nestedZonePtr->setCanvasBkColor(nestedZoneColor);
|
||||
nestedZonePtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
nestedZonePtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(nestedZonePtr);
|
||||
|
||||
auto nestedTitle = std::make_unique<Label>(16, 16, "A 蓝:三层 Canvas 嵌套");
|
||||
nestedTitle->setTextdisap(true);
|
||||
@@ -117,55 +421,46 @@ int main()
|
||||
nestedHint->setTextdisap(true);
|
||||
|
||||
auto nestedLeftBtn = makeTestButton(20, 74, 110, 34, "左固定");
|
||||
nestedLeftBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
nestedLeftBtn->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetLeftFixed(nestedLeftBtn.get());
|
||||
|
||||
auto nestedStretchBox = std::make_unique<TextBox>(150, 74, 350, 34, "A 区横向拉伸输入框");
|
||||
nestedStretchBox->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
nestedStretchBox->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(nestedStretchBox.get());
|
||||
|
||||
auto nestedRightBtn = makeTestButton(520, 74, 110, 34, "右固定");
|
||||
nestedRightBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
nestedRightBtn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(nestedRightBtn.get());
|
||||
|
||||
auto level1 = std::make_unique<Canvas>(18, 126, 614, 134);
|
||||
auto level1Ptr = level1.get();
|
||||
level1Ptr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
level1Ptr->setCanvasBkColor(level1Color);
|
||||
level1Ptr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
level1Ptr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(level1Ptr);
|
||||
|
||||
auto level1Title = std::make_unique<Label>(14, 10, "A-1 青:第一层");
|
||||
level1Title->setTextdisap(true);
|
||||
auto level1Btn = makeTestButton(18, 42, 110, 30, "内层左");
|
||||
level1Btn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
level1Btn->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetLeftFixed(level1Btn.get());
|
||||
|
||||
auto level2 = std::make_unique<Canvas>(142, 36, 454, 84);
|
||||
auto level2Ptr = level2.get();
|
||||
level2Ptr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
level2Ptr->setCanvasBkColor(level2Color);
|
||||
level2Ptr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
level2Ptr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(level2Ptr);
|
||||
|
||||
auto level2Title = std::make_unique<Label>(12, 8, "A-2 绿:第二层");
|
||||
level2Title->setTextdisap(true);
|
||||
auto level2Btn = makeTestButton(332, 8, 108, 28, "右固定");
|
||||
level2Btn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
level2Btn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(level2Btn.get());
|
||||
|
||||
auto level3 = std::make_unique<Canvas>(16, 42, 422, 28);
|
||||
auto level3Ptr = level3.get();
|
||||
level3Ptr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
level3Ptr->setCanvasBkColor(level3Color);
|
||||
level3Ptr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
level3Ptr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(level3Ptr);
|
||||
|
||||
auto level3Label = std::make_unique<Label>(10, 6, "A-3 橙:第三层");
|
||||
level3Label->setTextdisap(true);
|
||||
auto level3Btn = makeTestButton(312, 2, 98, 24, "右按钮");
|
||||
level3Btn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
level3Btn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(level3Btn.get());
|
||||
configureTooltip(level3Btn.get(), "第三层 Canvas 里的右固定按钮");
|
||||
|
||||
level3Ptr->addControl(std::move(level3Label));
|
||||
@@ -188,8 +483,7 @@ int main()
|
||||
auto tabZonePtr = tabZone.get();
|
||||
tabZonePtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
tabZonePtr->setCanvasBkColor(tabZoneColor);
|
||||
tabZonePtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
tabZonePtr->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(tabZonePtr);
|
||||
|
||||
auto tabTitle = std::make_unique<Label>(16, 16, "B 青:TabControl 外层 resize");
|
||||
tabTitle->setTextdisap(true);
|
||||
@@ -202,8 +496,7 @@ int main()
|
||||
tabControlPtr->setCanvasfillMode(StellarX::FillMode::Null);
|
||||
tabControlPtr->setTabPlacement(StellarX::TabPlacement::Top);
|
||||
tabControlPtr->setTabBarHeight(30);
|
||||
tabControlPtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
tabControlPtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(tabControlPtr);
|
||||
|
||||
auto tabPage1 = std::make_unique<Canvas>(0, 0, 634, 170);
|
||||
auto tabPage1Ptr = tabPage1.get();
|
||||
@@ -218,25 +511,21 @@ int main()
|
||||
auto page1Label = std::make_unique<Label>(14, 12, "页 1:页内 TextBox 继续由 Canvas 管。");
|
||||
page1Label->setTextdisap(true);
|
||||
auto page1Box = std::make_unique<TextBox>(18, 44, 468, 34, "页 1 左右拉伸输入框");
|
||||
page1Box->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
page1Box->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(page1Box.get());
|
||||
auto page1Btn = makeTestButton(504, 44, 96, 34, "右固定");
|
||||
page1Btn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
page1Btn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(page1Btn.get());
|
||||
configureTooltip(page1Btn.get(), "页 1 右固定按钮");
|
||||
|
||||
auto page1InnerCanvas = std::make_unique<Canvas>(18, 92, 582, 56);
|
||||
auto page1InnerCanvasPtr = page1InnerCanvas.get();
|
||||
page1InnerCanvasPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
page1InnerCanvasPtr->setCanvasBkColor(RGB(223, 236, 248));
|
||||
page1InnerCanvasPtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
page1InnerCanvasPtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(page1InnerCanvasPtr);
|
||||
|
||||
auto page1InnerLabel = std::make_unique<Label>(10, 8, "页 1 内层 Canvas");
|
||||
page1InnerLabel->setTextdisap(true);
|
||||
auto page1InnerBtn = makeTestButton(462, 14, 108, 28, "右按钮");
|
||||
page1InnerBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
page1InnerBtn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(page1InnerBtn.get());
|
||||
configureTooltip(page1InnerBtn.get(), "页 1 内层 Canvas 按钮");
|
||||
|
||||
page1InnerCanvasPtr->addControl(std::move(page1InnerLabel));
|
||||
@@ -259,8 +548,7 @@ int main()
|
||||
auto page2InnerLabel = std::make_unique<Label>(10, 8, "页 2 内层 Canvas");
|
||||
page2InnerLabel->setTextdisap(true);
|
||||
auto page2InnerBtn = makeTestButton(286, 42, 126, 28, "右侧 Tooltip");
|
||||
page2InnerBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
page2InnerBtn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(page2InnerBtn.get());
|
||||
configureTooltip(page2InnerBtn.get(), "页 2 内层按钮 Tooltip");
|
||||
|
||||
page2InnerCanvasPtr->addControl(std::move(page2InnerLabel));
|
||||
@@ -323,8 +611,7 @@ int main()
|
||||
});
|
||||
|
||||
auto innerHoverBtn = makeTestButton(506, 120, 118, 34, "容器内按钮");
|
||||
innerHoverBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
innerHoverBtn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(innerHoverBtn.get());
|
||||
configureTooltip(innerHoverBtn.get(), "Canvas 内按钮 Tooltip");
|
||||
|
||||
behaviorZonePtr->addControl(std::move(behaviorTitle));
|
||||
@@ -338,8 +625,7 @@ int main()
|
||||
auto overlayZonePtr = overlayZone.get();
|
||||
overlayZonePtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
overlayZonePtr->setCanvasBkColor(overlayZoneColor);
|
||||
overlayZonePtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
overlayZonePtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(overlayZonePtr);
|
||||
|
||||
auto overlayTitle = std::make_unique<Label>(16, 16, "D 橙:Top+Bottom + 同父 overlay");
|
||||
overlayTitle->setTextdisap(true);
|
||||
@@ -348,17 +634,14 @@ int main()
|
||||
auto lowerLayerPtr = lowerLayer.get();
|
||||
lowerLayerPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
lowerLayerPtr->setCanvasBkColor(RGB(255, 245, 231));
|
||||
lowerLayerPtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
lowerLayerPtr->setAnchor(StellarX::Anchor::Top, StellarX::Anchor::Bottom);
|
||||
SxTestSetStretchY(lowerLayerPtr);
|
||||
|
||||
auto lowerTitle = std::make_unique<Label>(12, 8, "D-1 下层区");
|
||||
lowerTitle->setTextdisap(true);
|
||||
auto lowerBox = std::make_unique<TextBox>(12, 34, 222, 30, "下层区输入框");
|
||||
lowerBox->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
lowerBox->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(lowerBox.get());
|
||||
auto lowerBtn = makeTestButton(248, 34, 92, 30, "下层按钮");
|
||||
lowerBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
lowerBtn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(lowerBtn.get());
|
||||
configureTooltip(lowerBtn.get(), "下层 Canvas 按钮");
|
||||
|
||||
lowerLayerPtr->addControl(std::move(lowerTitle));
|
||||
@@ -369,22 +652,19 @@ int main()
|
||||
auto upperLayerPtr = upperLayer.get();
|
||||
upperLayerPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
upperLayerPtr->setCanvasBkColor(RGB(255, 224, 206));
|
||||
upperLayerPtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
upperLayerPtr->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(upperLayerPtr);
|
||||
|
||||
auto upperTitle = std::make_unique<Label>(12, 8, "D-2 上层区");
|
||||
upperTitle->setTextdisap(true);
|
||||
auto upperBtn = makeTestButton(244, 38, 122, 28, "上层 Tooltip");
|
||||
upperBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
upperBtn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(upperBtn.get());
|
||||
configureTooltip(upperBtn.get(), "上层 Canvas 按钮");
|
||||
|
||||
upperLayerPtr->addControl(std::move(upperTitle));
|
||||
upperLayerPtr->addControl(std::move(upperBtn));
|
||||
|
||||
auto overlayBottomBtn = makeTestButton(526, 148, 118, 30, "底边固定");
|
||||
overlayBottomBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
overlayBottomBtn->setAnchor(StellarX::Anchor::Bottom, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetBottomFixed(overlayBottomBtn.get());
|
||||
|
||||
overlayZonePtr->addControl(std::move(overlayTitle));
|
||||
overlayZonePtr->addControl(std::move(lowerLayer));
|
||||
@@ -395,8 +675,7 @@ int main()
|
||||
auto tableZonePtr = tableZone.get();
|
||||
tableZonePtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
tableZonePtr->setCanvasBkColor(tableZoneColor);
|
||||
tableZonePtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
tableZonePtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(tableZonePtr);
|
||||
|
||||
auto tableTitle = std::make_unique<Label>(16, 12, "E 紫:Table 仅 X Stretch");
|
||||
tableTitle->setTextdisap(true);
|
||||
@@ -415,8 +694,7 @@ int main()
|
||||
tablePtr->setRowsPerPage(2);
|
||||
tablePtr->setTableBorderWidth(1);
|
||||
tablePtr->setTableBorder(RGB(86, 88, 132));
|
||||
tablePtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
tablePtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(tablePtr);
|
||||
|
||||
tableZonePtr->addControl(std::move(tableTitle));
|
||||
tableZonePtr->addControl(std::move(tableHint));
|
||||
@@ -429,16 +707,14 @@ int main()
|
||||
auto floatingZonePtr = floatingZone.get();
|
||||
floatingZonePtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
floatingZonePtr->setCanvasBkColor(floatingColor);
|
||||
floatingZonePtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
floatingZonePtr->setAnchor(StellarX::Anchor::Bottom, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetBottomFixed(floatingZonePtr);
|
||||
|
||||
auto floatingTitle = std::make_unique<Label>(16, 12, "F 粉:Bottom only 浮层");
|
||||
floatingTitle->setTextdisap(true);
|
||||
auto floatingHint = std::make_unique<Label>(16, 36, "看 Table 下层重绘后的补画。");
|
||||
floatingHint->setTextdisap(true);
|
||||
auto floatingBtn = makeTestButton(322, 88, 118, 30, "右固定");
|
||||
floatingBtn->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
floatingBtn->setAnchor(StellarX::Anchor::Right, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetRightFixed(floatingBtn.get());
|
||||
configureTooltip(floatingBtn.get(), "粉色浮层里的按钮");
|
||||
|
||||
floatingZonePtr->addControl(std::move(floatingTitle));
|
||||
@@ -582,8 +858,7 @@ int main()
|
||||
auto infoPanelPtr = infoPanel.get();
|
||||
infoPanelPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
infoPanelPtr->setCanvasBkColor(RGB(225, 234, 244));
|
||||
infoPanelPtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
infoPanelPtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(infoPanelPtr);
|
||||
|
||||
auto infoTitle = std::make_unique<Label>(20, 10, "综合回归测试 4:对话框遮挡、快速 Hover、分页按钮、模态 Resize");
|
||||
infoTitle->textStyle.nHeight = 26;
|
||||
@@ -613,8 +888,7 @@ int main()
|
||||
auto hoverCanvasPtr = hoverCanvas.get();
|
||||
hoverCanvasPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
hoverCanvasPtr->setCanvasBkColor(RGB(230, 238, 248));
|
||||
hoverCanvasPtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
hoverCanvasPtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(hoverCanvasPtr);
|
||||
|
||||
auto hoverTitle = std::make_unique<Label>(20, 8, "区域 A:打开非模态对话框后,请在下面 8 个按钮之间快速来回划动鼠标。");
|
||||
hoverTitle->setTextdisap(true);
|
||||
@@ -635,8 +909,7 @@ int main()
|
||||
tabControlPtr->setCanvasfillMode(StellarX::FillMode::Null);
|
||||
tabControlPtr->setTabPlacement(StellarX::TabPlacement::Top);
|
||||
tabControlPtr->setTabBarHeight(28);
|
||||
tabControlPtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
tabControlPtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(tabControlPtr);
|
||||
|
||||
auto page1 = std::make_unique<Canvas>(0, 0, 1040, 152);
|
||||
page1->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
@@ -694,8 +967,7 @@ int main()
|
||||
tablePtr->setTableBorderWidth(1);
|
||||
tablePtr->setTableBorder(RGB(60, 90, 120));
|
||||
tablePtr->setTableFillMode(StellarX::FillMode::Null);
|
||||
tablePtr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
tablePtr->setAnchor(StellarX::Anchor::Left, StellarX::Anchor::Right);
|
||||
SxTestSetStretchX(tablePtr);
|
||||
|
||||
const std::string asyncText =
|
||||
"KEY4 非模态回归测试正在进行。\n"
|
||||
@@ -1289,15 +1561,14 @@ int main()
|
||||
for (auto& log : logIn_label)
|
||||
{
|
||||
log->setTextdisap(true);
|
||||
log->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
log->textStyle.lpszFace = "华文行楷";
|
||||
}
|
||||
logIn_label[0]->textStyle.nHeight = 100;
|
||||
logIn_label[0]->setAnchor(StellarX::Anchor::Top, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetTopFixed(logIn_label[0].get());
|
||||
logIn_label[1]->textStyle.nHeight = 50;
|
||||
logIn_label[1]->setAnchor(StellarX::Anchor::Bottom, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetBottomFixed(logIn_label[1].get());
|
||||
logIn_label[2]->textStyle.nHeight = 50;
|
||||
logIn_label[2]->setAnchor(StellarX::Anchor::Bottom, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetBottomFixed(logIn_label[2].get());
|
||||
|
||||
//输入框
|
||||
std::unique_ptr<TextBox> logIn_textBox[2];
|
||||
@@ -1309,8 +1580,7 @@ int main()
|
||||
logIn_textBox_ptr[1] = logIn_textBox[1].get();
|
||||
for (auto& tb : logIn_textBox)
|
||||
{
|
||||
tb->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
tb->setAnchor(StellarX::Anchor::Bottom, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetBottomFixed(tb.get());
|
||||
tb->setMaxCharLen(15);
|
||||
}
|
||||
//按钮
|
||||
@@ -1322,16 +1592,14 @@ int main()
|
||||
logIn_Button_ptr[1] = logIn_Button[1].get();
|
||||
for (auto& b : logIn_Button)
|
||||
{
|
||||
b->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
b->setAnchor(StellarX::Anchor::Bottom, StellarX::Anchor::NoAnchor);
|
||||
SxTestSetBottomFixed(b.get());
|
||||
}
|
||||
//log画布
|
||||
auto log_Canvas = std::make_unique<Canvas>(0, 0, 1300, 800);
|
||||
Canvas* log_Canvas_ptr = log_Canvas.get();
|
||||
log_Canvas_ptr->setCanvasfillMode(StellarX::FillMode::Null);
|
||||
log_Canvas_ptr->setShape(StellarX::ControlShape::B_RECTANGLE);
|
||||
log_Canvas_ptr->setLayoutMode(StellarX::LayoutMode::AnchorToEdges);
|
||||
log_Canvas_ptr->setAnchor(StellarX::Anchor::Bottom, StellarX::Anchor::Top);
|
||||
SxTestSetStretchY(log_Canvas_ptr);
|
||||
|
||||
//将log界面控价加入logCanvas统一管理
|
||||
for (auto& b : logIn_Button)
|
||||
|
||||
Reference in New Issue
Block a user