fanlusky
|
7ad6a42f12
|
feat(server): 外部皮肤新增细分配色、菜单、外框线宽、高亮圆角、阴影与字体族
|
2026-09-29 22:08:00 +08:00 |
|
fanlusky
|
f1b6622ac5
|
fix(server): 候选配色按 CSS 颜色字符过滤,WebView2 候选文字色生效
候选配色此前只按字符串读取就拼进 WebView2 样式表,含 ; 或 } 的值能跳出声明改写候选窗;改用与工具栏相同的 ReadCssColor 过滤。WebView2 的 .text 读 var(--cand-text),皮肤的 text 只设在 .container 的 color 上不起作用,现在同时写入 :root 的 --cand-text;设置页的候选文字色仍以内联样式优先。
|
2026-09-29 21:56:14 +08:00 |
|
fanlusky
|
852444d82b
|
fix(server): 外部皮肤背景图铺满候选框边框下方,不再露出一圈底色
候选框 .container 是 overflow 滚动容器,::before 垫的背景图只能画到内边距盒,半透明边框下面露出的是底色,浅色主题下就是一圈白边。改为把背景图放进 .container 自己的背景层(origin/clip 都是 border-box),与 D2D 一样让边框画在图上;图层不能单独设透明度,就在图上盖一层 (1 - opacity) 的底色,底色取 D2D 同一份调色板。
|
2026-09-28 20:42:43 +08:00 |
|
fanlusky
|
0b4a3d374a
|
feat(server): 外部皮肤用 skin.toml 的 [toolbar] 表配置悬浮工具栏,替代 toolbar.css
toolbar_stylesheet 只注入 WebView2 页面,D2D 工具栏完全看不到,两个渲染器的工具栏配色因此不一致。
改为在 skin.toml 里用 [toolbar] corner_radius_dip 与 [toolbar.dark]/[toolbar.light] 的
background、border、handle、divider、icon、hover 声明覆盖:D2D 在基础皮肤之上叠加这些值,
WebView2 由 Server 生成当前主题的 CSS。颜色只放行颜色值会用到的字符,避免跳出 CSS 声明。
toolbar_stylesheet 随之移除,不做兼容:外部皮肤里的 toolbar.css 不再生效。
|
2026-09-28 20:07:30 +08:00 |
|
fanlusky
|
24b2444a3d
|
feat(server): 外部皮肤支持候选框背景图、自定义圆角与装饰图对齐
- skin.toml 新增 candidate_window.corner_radius_dip、candidate_window.background(image / fit / opacity)和 decoration.image / decoration.align
- decoration 表改为可选;存在时 image、top_inset_dip、width_dip 必填且图片必须存在,不再回退到 preview
- D2D 候选框的装饰图与卡片同列排布,按 width_dip × top_inset_dip 等比缩放、贴在卡片上方且不重叠,卡片最小宽度遵守 min_width_dip 和装饰宽度,与 WebView2 渲染一致
- WebView2 端生成对应的背景、圆角和对齐 CSS;皮肤重载后 D2D 场景随之重建
|
2026-09-28 19:36:37 +08:00 |
|
fanlusky
|
f486da52b9
|
fix(ui-html): 悬停在选中候选上不再改变高亮色
fluent 与石墨的 .hover-active .cand:hover 特异度高于 .first,悬停选中项会换成
悬停色;改为 :not(.first),与微信绿、杨柳青、秋桂一致。自定义皮肤的 selected
同时写入 .hover-active .cand.first:hover,避免被 base 皮肤的选中悬停色(如微信绿
#07c160)覆盖。设置页预览样式同步。
|
2026-09-28 14:20:17 +08:00 |
|
fanlusky
|
f4aba3bcfc
|
refactor(server): 按职责拆分 windows_webview2.cpp
windows_webview2.cpp 有 5500 行,小窗 WebView2 环境与 controller 的排队创建、
Topmost 分阶段提升、皮肤注入、候选窗脚本、托盘菜单、设置窗口和悬浮工具栏全挤
在一个文件里。按职责拆成以下几个翻译单元:
- windows_webview2.cpp:共享状态与全局变量、小窗 WebView2 environment 创建与
controller 排队重试、导航就绪门控、lazy-topmost 分阶段提升、内容截断回退、
DPI / RasterizationScale 辅助、可见性与状态查询,以及 GetAppdataPath、
InitSmallWindowWebviews、PrepareTrayMenuWebviewForShow、ShutdownWebviews
- windows_webview2_skin.cpp:读取页面 HTML、外部候选皮肤 CSS 注入与资源内嵌、
PrepareHtmlForWnds,以及候选窗、悬浮工具栏的布局 / 主题 / 外观应用
- windows_webview2_candidate.cpp:候选内容与测量区脚本、悬停锁与粘性卡片脚本、
候选槽位增量更新、测量 bounds、OnControllerCreatedCandWnd 与页面消息处理
- windows_webview2_menu.cpp:托盘菜单 controller 创建与页面消息处理、
SyncMenuFloatingToolbarToggle
- windows_webview2_settings.cpp:设置窗口的 DirectComposition 视觉树、
composition controller、设置页消息与 configUpdate 分发、
PostSettingsWindowState、PostSettingsConfig、InitWebviewSettingsWnd
- windows_webview2_toolbar.cpp:悬浮工具栏状态缓存与渲染脚本、
OnControllerCreatedFtbWnd 与页面消息处理、各个 UpdateFtb*
- windows_webview2_internal.h:上述文件之间共享的声明,只给
windows_webview2*.cpp 包含
纯搬移,不改行为:函数体、注释和格式都没动。原来在匿名命名空间里、现在
要跨文件用的符号(导航就绪标志、工具栏导航重试与绘制宽限标志、内容截断冷却
时间戳、JsonNumberAsDouble、HandleContentTruncatedMessage、
OnSmallWindowControllerSettled、NotifySmallWindowNavigationReady)放进
windows_webview2_detail 命名空间并在内部头文件里声明,避免与 Server 其他
翻译单元里的同名内部符号冲突;只被一个文件用到的仍留在该文件的匿名命名空间。
共享全局变量的定义仍在 windows_webview2.cpp。诊断日志的屏蔽宏、json 别名、
前置声明和 kTruncationSizeFactor 原样挪进内部头文件,每个拆出的文件都先包含
它,日志宏在各文件里仍是同样的空展开。
用脚本比对了原文件与拆分后全部文件的非空、非 #include 行多重集:原文件的
每一行都恰好出现一次,差异只有新增的声明、命名空间包装、using 指令、
#pragma once 和文件头注释。可用 git diff --color-moved 复核。
|
2026-09-27 15:38:01 +08:00 |
|