Snapshot before repaint phase 2
This commit is contained in:
+193
-2
@@ -1,6 +1,6 @@
|
||||
// 本工具基于 StellarX 构建,轻量级的 Windows GUI 框架。
|
||||
// StellarX 星垣GUI框架 - 测试用例
|
||||
#include"StellarX.h"
|
||||
#define KEY 2
|
||||
#define KEY 4
|
||||
|
||||
#if 1 == KEY
|
||||
int main()
|
||||
@@ -106,6 +106,197 @@ int main()
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 4 == KEY
|
||||
|
||||
#include"StellarX.h"
|
||||
#include <vector>
|
||||
|
||||
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(1280, 780, 1, RGB(242, 246, 250), "StellarX 综合回归测试用例 4");
|
||||
|
||||
auto infoPanel = std::make_unique<Canvas>(20, 20, 1240, 90);
|
||||
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);
|
||||
|
||||
auto infoTitle = std::make_unique<Label>(20, 10, "综合回归测试 4:对话框遮挡、快速 Hover、分页按钮、模态 Resize");
|
||||
infoTitle->textStyle.nHeight = 26;
|
||||
infoTitle->setTextdisap(true);
|
||||
auto infoLine1 = std::make_unique<Label>(20, 42, "1. 点击右侧按钮打开非模态/模态对话框;2. 在顶部按钮、页签、分页按钮附近快速划动光标。");
|
||||
infoLine1->setTextdisap(true);
|
||||
auto infoLine2 = std::make_unique<Label>(20, 62, "3. 模态对话框打开后拖动窗口大小;4. 关闭对话框后观察底层按钮 Hover 是否立即恢复。");
|
||||
infoLine2->setTextdisap(true);
|
||||
|
||||
auto openAsyncButton = std::make_unique<Button>(930, 22, 130, 42, "打开非模态");
|
||||
auto openAsyncButtonPtr = openAsyncButton.get();
|
||||
openAsyncButtonPtr->enableTooltip(true);
|
||||
openAsyncButtonPtr->setTooltipText("打开长文本非模态对话框,覆盖顶部按钮 / 页签 / 分页区");
|
||||
|
||||
auto openModalButton = std::make_unique<Button>(1080, 22, 130, 42, "打开模态");
|
||||
auto openModalButtonPtr = openModalButton.get();
|
||||
openModalButtonPtr->enableTooltip(true);
|
||||
openModalButtonPtr->setTooltipText("打开模态对话框并测试拖拽窗口后的重绘与关闭");
|
||||
|
||||
infoPanelPtr->addControl(std::move(infoTitle));
|
||||
infoPanelPtr->addControl(std::move(infoLine1));
|
||||
infoPanelPtr->addControl(std::move(infoLine2));
|
||||
infoPanelPtr->addControl(std::move(openAsyncButton));
|
||||
infoPanelPtr->addControl(std::move(openModalButton));
|
||||
|
||||
auto hoverCanvas = std::make_unique<Canvas>(20, 140, 1240, 100);
|
||||
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);
|
||||
|
||||
auto hoverTitle = std::make_unique<Label>(20, 8, "区域 A:打开非模态对话框后,请在下面 8 个按钮之间快速来回划动鼠标。");
|
||||
hoverTitle->setTextdisap(true);
|
||||
hoverCanvasPtr->addControl(std::move(hoverTitle));
|
||||
|
||||
for (int i = 0; i < 8; ++i)
|
||||
{
|
||||
auto hoverButton = std::make_unique<Button>(250 + i * 92, 38, 72, 38, "B" + std::to_string(i + 1));
|
||||
hoverButton->enableTooltip(true);
|
||||
hoverButton->setTooltipText("顶部 Hover 按钮 " + std::to_string(i + 1));
|
||||
hoverButton->setButtonShape(StellarX::ControlShape::B_RECTANGLE);
|
||||
hoverCanvasPtr->addControl(std::move(hoverButton));
|
||||
}
|
||||
|
||||
auto tabControl = std::make_unique<TabControl>(120, 260, 1040, 180);
|
||||
auto tabControlPtr = tabControl.get();
|
||||
tabControlPtr->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
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);
|
||||
|
||||
auto page1 = std::make_unique<Canvas>(0, 0, 1040, 152);
|
||||
page1->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
page1->setCanvasBkColor(RGB(246, 250, 255));
|
||||
auto page2 = std::make_unique<Canvas>(0, 0, 1040, 152);
|
||||
page2->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
page2->setCanvasBkColor(RGB(250, 248, 242));
|
||||
auto page3 = std::make_unique<Canvas>(0, 0, 1040, 152);
|
||||
page3->setShape(StellarX::ControlShape::ROUND_RECTANGLE);
|
||||
page3->setCanvasBkColor(RGB(243, 250, 244));
|
||||
|
||||
auto tabPage1Ptr = page1.get();
|
||||
auto tabPage2Ptr = page2.get();
|
||||
auto tabPage3Ptr = page3.get();
|
||||
|
||||
tabControlPtr->add(std::make_pair(std::make_unique<Button>(0, 0, 120, 28, "页签-事件区"), std::move(page1)));
|
||||
tabControlPtr->add(std::make_pair(std::make_unique<Button>(0, 0, 120, 28, "页签-空白区"), std::move(page2)));
|
||||
tabControlPtr->add(std::make_pair(std::make_unique<Button>(0, 0, 120, 28, "页签-辅助区"), std::move(page3)));
|
||||
tabControlPtr->setActiveIndex(0);
|
||||
|
||||
auto page1Label = std::make_unique<Label>(20, 10, "区域 B:打开非模态对话框后,切换页签并在页内按钮上快速 Hover。");
|
||||
page1Label->setTextdisap(true);
|
||||
tabPage1Ptr->addControl(std::move(page1Label));
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
auto pageButton = std::make_unique<Button>(190 + i * 150, 55, 110, 38, "页内按钮" + std::to_string(i + 1));
|
||||
pageButton->enableTooltip(true);
|
||||
pageButton->setTooltipText("页签区按钮 " + std::to_string(i + 1));
|
||||
tabPage1Ptr->addControl(std::move(pageButton));
|
||||
}
|
||||
|
||||
auto page2Label = std::make_unique<Label>(30, 55, "区域 B-2:此页保留较大空白区,用来观察 Hover 离开空白区域时的恢复。");
|
||||
page2Label->setTextdisap(true);
|
||||
tabPage2Ptr->addControl(std::move(page2Label));
|
||||
|
||||
auto page3Label = std::make_unique<Label>(20, 18, "区域 B-3:辅助页,用来测试页签切换本身的重绘是否稳定。");
|
||||
page3Label->setTextdisap(true);
|
||||
auto page3Button = std::make_unique<Button>(420, 65, 180, 40, "辅助按钮");
|
||||
page3Button->enableTooltip(true);
|
||||
page3Button->setTooltipText("辅助页按钮 Tooltip");
|
||||
tabPage3Ptr->addControl(std::move(page3Label));
|
||||
tabPage3Ptr->addControl(std::move(page3Button));
|
||||
|
||||
auto table = std::make_unique<Table>(240, 470);
|
||||
auto tablePtr = table.get();
|
||||
tablePtr->setHeaders({ "编号", "名称", "状态", "备注" });
|
||||
tablePtr->setData({
|
||||
{"01", "顶部按钮覆盖测试", "待验证", "快速 Hover 后不能残留高亮"},
|
||||
{"02", "页签切换测试", "待验证", "页签按钮与页内容不应穿透"},
|
||||
{"03", "分页按钮测试", "待验证", "被非模态部分覆盖时仍应稳定"},
|
||||
{"04", "模态 Resize 测试", "待验证", "拖窗后标题、关闭按钮不应残影"},
|
||||
{"05", "关闭后 Hover 恢复", "待验证", "模态关闭后底层按钮 Hover 应恢复"}
|
||||
});
|
||||
tablePtr->setRowsPerPage(2);
|
||||
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);
|
||||
|
||||
const std::string asyncText =
|
||||
"KEY4 非模态回归测试正在进行。\n"
|
||||
"请依次检查以下场景:\n"
|
||||
"1. 在顶部按钮之间快速来回移动鼠标。\n"
|
||||
"2. 切换页签,并在页签按钮与页内按钮上快速 Hover。\n"
|
||||
"3. 将鼠标移动到表格分页按钮附近,观察是否闪烁或穿透。\n"
|
||||
"4. 将鼠标移出窗口后再移回窗口。\n"
|
||||
"5. 保持本对话框打开,确认它始终位于最上层。\n"
|
||||
"6. 若需要重复测试,可直接再次点击右上角按钮。\n"
|
||||
"7. 本对话框故意较高,以覆盖顶部按钮、页签区与部分分页区。\n"
|
||||
"8. 顶部按钮区域用于检测快速 Hover 残留。\n"
|
||||
"9. 页签区域用于检测被遮挡时的切换与 Hover。\n"
|
||||
"10. 表格分页区用于检测分页按钮被部分覆盖时的重绘。\n"
|
||||
"11. 若关闭本对话框,请观察底层 Hover 是否立即恢复。\n"
|
||||
"12. 本消息框保留较多行,是为了增大对遮挡场景的覆盖范围。";
|
||||
|
||||
const std::string modalText =
|
||||
"KEY4 模态回归测试。\n"
|
||||
"请在本对话框保持打开时执行:\n"
|
||||
"1. 拖拽窗口大小,观察标题、关闭按钮与功能按钮是否残影。\n"
|
||||
"2. 拖拽后点击关闭按钮。\n"
|
||||
"3. 拖拽后点击功能按钮。\n"
|
||||
"4. 对话框关闭后,将鼠标停在底层顶部按钮上,观察 Hover 是否恢复。";
|
||||
|
||||
openAsyncButtonPtr->setOnClickListener([&win, asyncText]()
|
||||
{
|
||||
StellarX::MessageBox::showAsync(
|
||||
win,
|
||||
asyncText,
|
||||
"KEY4 非模态综合回归",
|
||||
StellarX::MessageBoxType::YesNoCancel,
|
||||
[](StellarX::MessageBoxResult result)
|
||||
{
|
||||
SX_LOGI("KEY4") << "非模态对话框结果=" << (int)result;
|
||||
});
|
||||
});
|
||||
|
||||
openModalButtonPtr->setOnClickListener([&win, modalText]()
|
||||
{
|
||||
auto result = StellarX::MessageBox::showModal(
|
||||
win,
|
||||
modalText,
|
||||
"KEY4 模态综合回归",
|
||||
StellarX::MessageBoxType::OKCancel);
|
||||
SX_LOGI("KEY4") << "模态对话框结果=" << (int)result;
|
||||
});
|
||||
|
||||
win.addControl(std::move(infoPanel));
|
||||
win.addControl(std::move(hoverCanvas));
|
||||
win.addControl(std::move(tabControl));
|
||||
win.addControl(std::move(table));
|
||||
|
||||
win.draw();
|
||||
return win.runEventLoop();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if 2 == KEY
|
||||
// 本工具基于 StellarX 构建,轻量级的 Windows GUI 框架。
|
||||
#include"StellarX.h"
|
||||
|
||||
Reference in New Issue
Block a user