From 10b7b94c292ce009127ef07e64afcf5af616fd21 Mon Sep 17 00:00:00 2001 From: fanlusky <1730976608@qq.com> Date: Sun, 14 Jun 2026 19:35:51 +0800 Subject: [PATCH] Add popup host and scene overlay popup system --- ui/README.md | 1 + ui/demos/msimeui-demo/DemoScene.cpp | 36 ++++ ui/include/msimeui/Controls.h | 65 ++++++ ui/include/msimeui/Layout.h | 2 + ui/include/msimeui/Scene.h | 13 ++ ui/include/msimeui/Window.h | 1 + ui/src/Controls.cpp | 307 ++++++++++++++++++++++++++++ ui/src/Layout.cpp | 10 + ui/src/Scene.cpp | 141 +++++++++++++ ui/src/Window.cpp | 8 + 10 files changed, 584 insertions(+) diff --git a/ui/README.md b/ui/README.md index fceafb2d..4395494c 100644 --- a/ui/README.md +++ b/ui/README.md @@ -49,6 +49,7 @@ - 新增一版真正参与布局调度的 `arrange subtree dirty`:`Visual::InvalidateArrange()` 现在会把源控件一路上传到 `Scene`,`Scene` 会记录需要重排的最小公共祖先;在无需重测时,会优先只重排那一支子树,而不是整棵根树 - 进一步补上 `measure dirty` 的源追踪:`Scene` 现在会记录测量脏源,并在条件允许时优先按脏路径重测,再结合 `Visual` 的布局缓存尽量跳过无关分支 - 新增最小主题系统 `Theme / ThemeManager`:窗口背景、按钮、复选框、进度条、滑块、滚动条、`TextBlock` 字体和 `TextBox` 的部分视觉令牌已开始迁移到统一主题入口,便于后续做换肤和样式集中管理 +- 新增第一版 `PopupHost / Popup` 弹出层系统:`Scene` 现可管理 overlay popup,支持高于主视觉树的渲染顺序、命中测试、滚轮路由、窗口重排后的重新定位,以及点击空白区域自动关闭;demo 已加入一个快速操作弹出层示例 ## 构建 diff --git a/ui/demos/msimeui-demo/DemoScene.cpp b/ui/demos/msimeui-demo/DemoScene.cpp index fb3f1fcc..80de146e 100644 --- a/ui/demos/msimeui-demo/DemoScene.cpp +++ b/ui/demos/msimeui-demo/DemoScene.cpp @@ -367,6 +367,42 @@ std::unique_ptr CreateDemoScene() root->AddChild(tabsCard); root->AddChild(std::make_shared(24.0f)); + auto popupCard = std::make_shared(surface, 20.0f); + auto popupStack = std::make_shared(14.0f); + auto popupStatus = std::make_shared(L"Popup status: closed", 14.0f, D2D1::ColorF(0x475569), true); + auto popupTrigger = std::make_shared