17 Commits
Author SHA1 Message Date
Lu Fan(SonnyCalcr) b9f37daab5 feat(server): 绿叶随包作为官方贴图皮肤,加入浅色面板;工具栏拖动条统一跟随强调色 (#1055)
- Canvas Demo 改名「绿叶」移到 skins/green_leaf 随安装包分发,设置页列在内置皮肤之后
- border_image 新增可选 light_source,浅色主题换用另一张面板图;绿叶补上浅色面板与配色
- Mica / Acrylic 样例移到 skins/mica、skins/acrylic 随包分发,名字去掉 Demo
- 外部皮肤没写 toolbar handle 时取同主题 accent;Fluent 拖动条改为强调色 #6B69D6,
  首道-蓝、搜狗经典·石墨的拖动条改成各自的 accent,清单测试检查两者一致
- 「重启输入法进程」「设置窗口后台驻留」从外观页移到关于页
2026-10-18 13:03:39 +08:00
Lu Fan(SonnyCalcr) a98acfee24 feat: 候选窗支持系统亚克力与云母背景材质 (#1033)
皮肤在 candidate_window.backdrop 写 acrylic 或 mica 时,候选卡片圆角范围内垫一层系统材质:
acrylic 模糊后面的窗口,mica 模糊桌面壁纸(Windows 11,更早的系统按 acrylic)。材质按
Fluent 配方叠「模糊背景 → 亮度层 → 色调」,色调取 surface,深浅主题各自用
backdrop_opacity / backdrop_luminosity 调色调与亮度层的不透明度。

msimeui 的 DeviceResources 新增 backdrop composition:经 Windows.UI.Composition 把 D2D
画进 CompositionDrawingSurface,与材质的形状在同一次提交里更新,卡片伸缩时边缘不错位;
交换链 Present 与合成提交分属两条路径,实测会错开。没写 backdrop 的皮肤仍走交换链。
有材质时卡片阴影只画在卡片外,ShadowCache 改按 D2D 设备判断缓存是否可用。

系统关闭透明效果或建不起 Windows.UI.Composition 时退回交换链,surface 按不透明画。
附 acrylic-demo、mica-demo 两个样例皮肤。
2026-10-17 16:02:38 +08:00
Lu Fan(SonnyCalcr) cbb17c5763 feat(examples): 新增 v2 实机演示皮肤「夜樱」 (#1018)
* feat(examples): 新增 v2 实机演示皮肤「夜樱」

基于 canvas 的 schema_version 2 皮肤,用上九宫格面板(四角花纹不随拉伸变形)、面板后的月亮挂件、循环 APNG 花瓣与循环 GIF 星星、content_insets_dip、outer_insets_dip 和 line_gap_dip。左上角不放挂件,免得挡住预编辑文字。图片由 tools/gen_sakura_night.py 程序生成,随本目录以 MIT 授权,重新运行得到同样的文件。

* feat(examples): 夜樱的悬浮工具栏改用候选窗的紫夜配色
2026-10-17 04:10:06 +08:00
Lu Fan(SonnyCalcr) cc868151a8 feat: 新增 canvas 基底,D2D 候选窗支持 v2 九宫格、挂件分层与 APNG/GIF 动图 (#1014)
* feat(ui): 新增 APNG/GIF 动图解码与动画帧时钟

AnimatedImage 按 APNG 规范解析 acTL/fcTL/fdAT 并校验序号、CRC 与帧边界,逐帧重建 PNG 交给 WIC 解码后按 dispose_op/blend_op 合成;GIF 走 WIC 多帧解码。延时规则与浏览器一致,超限或损坏的动画退回静态首帧。

DeviceResources::GetImageFrame 按动画时钟取帧并汇报下一次换帧时刻,动图帧按 64 MB 预算缓存;Scene 与 Window 据此按需重绘,可整体关闭动画。DrawNineSlice 按 CSS border-image 语义区分源切片与目标边宽、支持 fill,并用夹取画刷消除接缝渗色。

* feat(server): 新增 canvas 基础皮肤并要求 v2 皮肤基于它

canvas 是全贴图基底:透明面板、无描边、无圆角、无阴影,外观来自九宫格面板图与挂件。它只能作为外部皮肤的 base,不进内置皮肤列表;v1 皮肤用它直接报错。

schema_version = 2 而 base 不是 canvas 的皮肤按 v1 加载、忽略全部 v2 字段,并在扫描结果里记一条问题。v2 字段补齐校验:图片限 .png/.apng/.gif/.webp,fill 必须是布尔,偏移与 z_index 有范围,挂件最多 32 层。

* feat(server): D2D 候选窗补齐 v2 九宫格、挂件分层与动图

canvas 皮肤在 D2D 候选窗里按 CSS border-image 语义绘制九宫格面板:切片以源图像素计、边宽以 DIP 计、fill = false 不画中心;有面板图时卡片的底色、描边、圆角与阴影让给贴图。content_insets_dip 从面板外缘量起且不小于边框宽度,line_gap_dip 只作用于预编辑行与候选之间。

挂件拆成卡片前后两层:z_index < 1 在面板之下,其余在面板之上,同层按 z_index 与声明顺序稳定排序;图片在框内等比居中。动图按场景给出的下一次换帧时刻排一次性定时器续帧,只在候选窗显示时运行,隐藏、换皮肤时停;系统关闭动画效果时只显示首帧,v1 皮肤保持静态。

设置页原生预览认得 canvas 基底并绘制面板图。

* feat(examples): 新增基于 canvas 的 v2 全贴图皮肤样例

canvas-demo 用 2 倍九宫格面板、面板下层的叶子挂件和面板上层循环播放的 APNG 星光演示 v2 皮肤,素材均为程序生成的几何图形,随目录以 MIT 授权。样例测试同步校验 schema 2 与 canvas 互为前提、v2 图片扩展名与数值范围。

* docs(examples): 说明 canvas 基底、v2 九宫格与挂件分层及动图规则

schema 说明去掉「仅 WebView2」,写明 v2 必须以 canvas 为 base、canvas 只能当 base;九宫格切片按源图像素、边宽按 DIP,content_insets_dip 不小于边宽,line_gap_dip 只管预编辑行与候选之间;挂件以 z_index 1 为界分在面板上下两层;动图格式、帧时长、上限与系统减少动画时的行为。server/docs/ui-backends.md 与 skins/README.md 同步更新。

* docs(server): 候选窗与皮肤目录的注释不再引用已删除的 WebView2 页面
2026-10-17 02:57:33 +08:00
Lu Fan(SonnyCalcr) 1b875267db refactor: 移除 WebView2,界面只保留 Direct2D (#1013)
* refactor(engine): 语音独立工具改用原生托盘菜单,移除 WebView2

托盘菜单改用 Win32 弹出菜单,设置项改为用关联编辑器打开 config.toml,关于页改为消息框。删除 window_webview2 与两份 HTML 资源,windows-app 特性不再依赖 webview2 端口。

* refactor(server): 移除 WebView2,候选窗、工具栏、托盘菜单与设置窗口只保留 Direct2D

删除 src/webview2 与 webview_utils,小窗口的置顶、皮肤重载和工具栏状态缓存移到 window/small_windows,presenter 成为唯一路径,D2D 下的置顶时序与 cloak 行为保持不变。设置进程去掉 WebView2 宿主、鼠标转发与启动图,只构建原生窗口;旧快捷方式传入的 --d2d / --webview2 被忽略。删除 appearance.ui_backend 与 appearance.settings_ui_backend(读取、写入、设置页下拉框与两份配置模板),升级时由模板合并丢弃旧值。设置窗口的图片资源移到 server/assets/settings,安装到数据目录的 assets\settings。不再链接 WebView2Loader,vcpkg 去掉 webview2 端口。

* build(installer): 打包与 CI 不再处理 WebView2 页面和运行时

Prepare-PackageFiles 去掉 -UiHtmlDirectory 与 html 暂存,改为暂存 server/assets/settings;安装器不再检查 WebView2 Runtime、不再创建 ProgramData 下的 WebView2 用户数据目录,升级和卸载时清理旧版留下的 webview2 / webview2-settings 与数据目录里的 html。CI 删除设置页构建、契约同步检查和候选窗 DOM 测试,release 的打包任务不再依赖网页产物;dependabot 去掉 npm。第三方声明去掉 WebView2Loader。

* refactor(ui-html): 删除 WebView2 页面与设置页前端工程

候选窗、工具栏、托盘菜单、设置页、主题和契约副本都已没有使用者;设置窗口用到的图片资源已移到 server/assets/settings。sync-contracts.py 与 pnpm/Vite/TypeScript 工程一并删除,契约仍以 engine/contracts/webview 为唯一来源。

* docs(server): 文档改为只描述 Direct2D 界面

仓库地图去掉 ui-html,组件边界、uiAccess 与置顶时序、设置窗口和配置读写的说明改写为 Direct2D 唯一界面;安装说明去掉 WebView2 Runtime 检查,打包命令去掉 -UiHtmlDirectory;engine/contracts/webview 的说明改为设置窗口是唯一使用者,名字是历史遗留。

* docs(skins): 皮肤说明不再区分 WebView2 与 D2D 渲染器

v2 字段去掉「仅 WebView2」,改为说明由 Direct2D 原生渲染、部分字段仍在补全;颜色必须带 # 改为清单格式约定。随包的 skins/niya-demo/skin.toml 不改,免得用户机器上的同名皮肤在升级时被当成已修改而改名备份。

* docs(ui): demo 说明文字不再提 WebView2
2026-10-17 02:48:02 +08:00
fanlusky 797c0f5652 feat(server,ui,ui-html): 候选窗可严格按文字宽度收紧
皮肤新增 [candidate_window] fit_content,设置页「外观」新增「候选窗口按文字收紧宽度」
(appearance.candidate_window_fit_content),两者取或。打开后:

- D2D 不再垫 160 DIP 卡片最小宽度和列表 80 DIP 下限,行尾不再多留 6 DIP,
  右侧留白与序号左侧留白相同;
- WebView2 去掉 .container 的 7em 下限;
- 同一输入里宽度不再只增不减,高度仍保持。

皮肤的 min_width_dip 与装饰图宽度照常生效;内置皮肤清单出厂为 false。
2026-10-12 02:03:59 +08:00
fanlusky 451b6a1954 docs(skins): 示例皮肤写全可配置字段并说明颜色写法
niya-demo 的 skin.toml 写出 schema_version 1 支持的全部键,逐项注释取值范围、必填与回落规则;新补的键大多取 fluent 基底原值,外观基本不变。

在示例皮肤、schema 说明和两份 README 中补充颜色写法:适用的键、十六进制与 rgb()/rgba()/transparent,十六进制必须带 #,不透明度在末尾(#RRGGBBAA)。
2026-09-30 20:51:05 +08:00
fanlusky 4582550862 feat(skins): 内置皮肤抽出为 skins/default 设置清单并支持 page_arrows
五个内置皮肤各有一份 skins/default/<id>/skin.toml,承载皮肤级开关;
[candidate_window] page_arrows 控制候选框翻页箭头,出厂与缺省均为关闭。
外部皮肤可自行设置,不写时沿用 base 对应的默认清单。
皮肤扫描跳过 default 目录,且不允许用它作外部皮肤 ID。
2026-09-30 12:42:24 +08:00
fanlusky b109880c1c docs(skins): 说明外部皮肤新增的细分配色、菜单、线宽、高亮圆角、阴影与字体族,并更新样例 2026-09-29 22:13:15 +08:00
fanlusky 218542fa35 chore: 将皮肤样例与皮肤合集接入本仓 CI 与文档
移除样例仓库自带的 .github(子目录里的 workflow 不会运行)和误提交的 __pycache__,改由根 CI 的 Skins 任务同时校验 examples/skin-examples 与 skins/。manifest 测试与 schema 说明对齐 Server 皮肤目录的实际规则:base 必填,author 可选。
2026-09-29 19:41:21 +08:00
fanlusky 7bca26d648 feat(niya-demo): declare decoration, background and toolbar styles in skin.toml
- Move the decoration image into [candidate_window.decoration] (102x88, right-aligned)
- Add [candidate_window.background] with a translucent texture and 12dip corner radius
- Replace toolbar.css with [toolbar] / [toolbar.dark] / [toolbar.light]
- Bump version to 0.2.0
- Update tests, preview.html and schema docs for the new fields
- Rewrite README
2026-09-28 22:13:42 +08:00
Evan 4bfaba8876 docs: 补 LICENSE、badge 与 star 趋势
公开仓库没有 LICENSE 在法律上等于保留所有权利,别人不能合法使用或分发。README 顶部加 CI /
CodeQL / license / stars badge,底部加 star 趋势图。
2026-09-06 12:29:22 +09:00
Evan 4369f64fd9 ci(automation): 补齐持续集成与开源安全检查 (#1) 2026-09-06 10:02:20 +09:00
fanlusky 876e7f1a81 Switch the demo skin from skin.json and cand.css to skin.toml
Declare decoration geometry and candidate colors in TOML, drop the CSS
candidate stylesheet, and update install.ps1, preview, and the README.
2026-09-02 15:30:48 +08:00
fanlusky 92d76b0353 Adjust some styles. 2026-08-29 21:48:02 +08:00
fanlusky 9242a86aff Add a demo skin. 2026-08-29 19:37:30 +08:00
fanlusky b473372aa3 first commit 2026-08-29 11:01:56 +08:00