Files
msime-windows/ui/CMakeLists.txt
一把伞南星andfanlusky 71960b8301 feat(server,ui): 悬浮工具栏图片模式与装饰图叠加候选词 (#1046)
* feat(server,ui): 悬浮工具栏图片模式与装饰图叠加候选词

在 #1046 的基础上按最新 develop 重做。

悬浮工具栏 [toolbar] mode = "image":一整张背景图,按钮按
[toolbar.buttons.<按钮>] 的 x_dip / y_dip / width_dip / height_dip 摆放,
可按状态换图([images]),没图时画矢量图标。窗口按背景图的透明区域裁成
异形,透明处点得穿;图上除按钮外都能拖动。v2 皮肤的动图会播放,工具栏
隐藏或淡出后停帧。

候选窗装饰图可用 candidate_overlay_* 叠加一个候选词,太宽时缩字号;
设置页的皮肤预览一并显示。

ui 新增 OverlayPanel(绝对定位)与 ImageMask(按 alpha 生成区域)。

* fix(ui): 动图工具栏的窗口形状取所有帧的并集

窗口区域连画面一起裁,只按首帧裁形状时,动画里伸出首帧轮廓的部分
(抬头、飞出的纸)会被裁掉。改为把所有帧的 alpha 合起来再生成区域。

* fix(server): 工具栏按钮框始终算在异形窗口里

窗口形状只取背景图不透明的部分时,摆在图片透明处的按钮会被一起裁掉、
点不到。形状改为背景图轮廓并上每个按钮的框,按钮可以放在人物旁边的空白处,
不必在背景图里垫底。

* feat(server): 工具栏按钮可单独设内置图标的字号

[toolbar.buttons.<按钮>] 新增 icon_size_dip,内置 Segoe Fluent Icons 图标的
字号不再只能跟着按钮框走:按钮框铺满背景图里的圆底、图标单独调大小。
不写时仍是按钮框短边的 0.82 倍。

* feat(server): 设置页按图片模式预览悬浮工具栏

皮肤页的卡片与悬浮工具栏页的预览原来只会画矩形条。皮肤是图片模式时,
改按工具栏的画法预览:背景图(v2 皮肤的动图会播放)、按皮肤坐标摆放的
按钮、按钮贴图或内置图标(含 icon_size_dip),设置页关掉的按钮不画,
缩放与图标尺寸设置一并生效。

---------

Co-authored-by: fanlusky <1730976608@qq.com>
2026-10-20 23:08:01 +08:00

168 lines
4.7 KiB
CMake

cmake_minimum_required(VERSION 3.25)
project(msimeui VERSION 0.1.0 LANGUAGES CXX)
include(CTest)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_definitions(
/D_UNICODE=1
/DUNICODE=1
/DNOMINMAX=1
/DWIN32_LEAN_AND_MEAN=1
)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
add_library(msimeui STATIC
src/Accordion.cpp
src/AnimatedImage.cpp
src/Animation.cpp
src/Application.cpp
src/Brush.cpp
src/Button.cpp
src/CandidateList.cpp
src/ComboBox.cpp
src/ControlsInternal.cpp
src/DebugLog.cpp
src/DeviceResources.cpp
src/Fonts.cpp
src/Image.cpp
src/ImageMask.cpp
src/ListView.cpp
src/Menu.cpp
src/PagerArrows.cpp
src/Popup.cpp
src/RangeControls.cpp
src/Separator.cpp
src/TabControl.cpp
src/TextBox.cpp
src/TreeView.cpp
src/Layout.cpp
src/Scene.cpp
src/Theme.cpp
src/Window.cpp
src/WindowClass.cpp
src/tsf/DisplayAttribute.cpp
src/tsf/TextContainer.cpp
src/tsf/TextEditor.cpp
src/tsf/TextEditSink.cpp
src/tsf/TextLayout.cpp
src/tsf/TextStore.cpp
src/tsf/TsfTextServices.cpp
include/msimeui/AnimatedImage.h
include/msimeui/Animation.h
include/msimeui/Application.h
include/msimeui/Brush.h
src/ControlsInternal.h
src/DebugLog.h
include/msimeui/Controls.h
include/msimeui/DeviceResources.h
include/msimeui/Fonts.h
include/msimeui/ImageMask.h
include/msimeui/Layout.h
include/msimeui/Scene.h
include/msimeui/Theme.h
include/msimeui/Types.h
include/msimeui/Window.h
src/tsf/DisplayAttribute.h
src/tsf/private.h
src/tsf/TextContainer.h
src/tsf/TextEditor.h
src/tsf/TextEditSink.h
src/tsf/TextLayout.h
src/tsf/TextStore.h
src/tsf/TsfTextServices.h
)
target_include_directories(msimeui
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src/tsf
)
target_link_libraries(msimeui PUBLIC
d2d1.lib
dxguid.lib
d3d11.lib
dcomp.lib
dxgi.lib
dwrite.lib
dwmapi.lib
imm32.lib
ole32.lib
oleaut32.lib
uuid.lib
windowscodecs.lib
shlwapi.lib
# DeviceResources backdrop composition (Windows.UI.Composition through the WRL ABI).
runtimeobject.lib
CoreMessaging.lib
)
add_executable(msimeui-demo WIN32
demos/msimeui-demo/DemoScene.cpp
demos/msimeui-demo/DemoScene.h
demos/msimeui-demo/main.cpp
demos/msimeui-demo/msimeui-demo.rc
demos/msimeui-demo/resource.h
)
target_link_libraries(msimeui-demo PRIVATE msimeui)
target_compile_definitions(msimeui-demo PRIVATE MSIMEUI_ASSET_DIR=L\"${CMAKE_CURRENT_SOURCE_DIR}/assets\")
add_executable(msimeui-emoji-panel WIN32
demos/msimeui-emoji-panel/EmojiPanel.cpp
demos/msimeui-emoji-panel/EmojiPanel.h
demos/msimeui-emoji-panel/main.cpp
demos/msimeui-emoji-panel/msimeui-emoji-panel.rc
demos/msimeui-emoji-panel/resource.h
)
target_link_libraries(msimeui-emoji-panel PRIVATE msimeui)
add_executable(msimeui-keyboard-demo WIN32
demos/msimeui-keyboard-demo/KeyboardPanel.cpp
demos/msimeui-keyboard-demo/KeyboardPanel.h
demos/msimeui-keyboard-demo/main.cpp
demos/msimeui-keyboard-demo/msimeui-keyboard-demo.rc
demos/msimeui-keyboard-demo/resource.h
)
target_link_libraries(msimeui-keyboard-demo PRIVATE msimeui)
add_executable(msimeui-handwriting-demo WIN32
demos/msimeui-handwriting-demo/HandwritingPanel.cpp
demos/msimeui-handwriting-demo/HandwritingPanel.h
demos/msimeui-handwriting-demo/main.cpp
demos/msimeui-handwriting-demo/msimeui-handwriting-demo.rc
demos/msimeui-handwriting-demo/resource.h
)
target_link_libraries(msimeui-handwriting-demo PRIVATE msimeui windowsapp.lib)
# C++/WinRT needs C++20 coroutines. Under C++17 it falls back to
# <experimental/coroutine>, which recent MSVC STL versions reject outright.
target_compile_features(msimeui-handwriting-demo PRIVATE cxx_std_20)
if(MSVC)
# include/msimeui/Controls.h is UTF-8 without a BOM, so every consumer of msimeui has to read
# it as UTF-8 too; otherwise a CJK-locale build (code page 936) swallows lines and fails.
target_compile_options(msimeui PUBLIC /utf-8)
target_compile_options(msimeui PRIVATE /W4 /permissive-)
target_compile_options(msimeui-demo PRIVATE /W4 /permissive-)
target_compile_options(msimeui-emoji-panel PRIVATE /W4 /permissive-)
target_compile_options(msimeui-keyboard-demo PRIVATE /W4 /permissive-)
target_compile_options(msimeui-handwriting-demo PRIVATE /W4 /permissive-)
endif()
if(BUILD_TESTING)
add_subdirectory(tests)
endif()