yenharvey
af5c484ad3
feat: 主题预览图 --theme-preview,Server 的 uiAccess 改成缺省不带
...
# Conflicts:
# docs/notes/crate-notes.md
2026-10-10 14:02:41 +08:00
yenharvey
1dbbe13c04
feat(render): 主题预览图:两个壳加 --theme-preview <主题目录>
...
投稿人自己截屏的背景、缩放各不相同;用本机的渲染器与字体画,和输入时看到的一样。
样例帧 nihao 挪进库(sample.rs),离线预览、快照测试与预览图共用。某一张画不出只提示,其余照写。
2026-10-10 12:03:15 +08:00
yenharvey
2385d78a02
docs: 主题页示例的 id 不再与内置主题樱花重名
...
照抄 "id": "sakura" 的主题会被当成与内置主题重名而拒绝加载。crate-notes 记下新增内置主题时要同步主题仓库的保留 id。
2026-10-10 11:52:39 +08:00
yenharvey
8a33dd6929
feat: 英文模式候选改成按应用白名单
...
Photoshop 画布上的 W / H / V 被英文组词吞掉;设计、3D、CAD、视频剪辑、游戏都靠单键快捷键,
黑名单列不完,英文补全又只在写成段文字的地方有用。
- [apps] english_candidates_on:缺省浏览器 / 聊天 / 办公 / 笔记,三平台各一份;["*"] 处处都给
- english_candidates_off 缺省改空,留作从白名单里排除;认不出应用时只有 "*" 给
- 偏好设置的勾选框改成「只在浏览器、聊天和文档类应用里给」:勾上写缺省白名单,去掉写 ["*"]
2026-10-10 11:03:21 +08:00
yenharvey
3268f969e5
chore(release): 产品数据升到 data-v5,gloss-gen 缺省只生成英日
...
data-v5 = data-v4 + 越南语释义表(GPL-3.0-or-later)+ #256 补词后重打的词库、领域词库与重跑的语言模型;含章两个模型字节不变。
gloss-gen 不带 --languages 时只生成英日:重跑英日释义不该顺带把越南语也请求一遍,越南语按需单独补。
2026-10-10 10:43:20 +08:00
Joelee
2db9677a4c
feat: 学习语言新增越南语 ( #480 )
...
Language 加 Vietnamese,三端设置与装配接线,云释义补越南语提示词;随包越南语释义表由 gloss-gen 生成(GPL-3.0-or-later)。
Closes #47
2026-10-10 10:42:44 +08:00
toolsfox
9a12bcc708
fix(data): 补缺失常用词、称谓与符号层,清理人名碎片噪音 ( #256 )
...
按 jieba 词表(MIT)对照补 310 个缺失高频词,加「姓氏+总」称谓层与符号词,删安琪 / 王宗等人名碎片。
发数据时要连同 lm 重新生成,否则新进词库的词只拿兜底分。
Closes #98
2026-10-10 10:09:14 +08:00
Zhu Lei
5a1e897a5b
fix(render): 跳过 swash 读不了轮廓的脚本字体,修 macOS 27 中文候选空白 ( #348 )
...
macOS 26 起兜底用的 PingFangUI.ttc 是私有 hvgl 轮廓,系统资产里 CFF 版 PingFang.ttc 不在时(macOS 27)中文候选画成空白;
加载前查轮廓表,读不了的跳过,简体再回退到静态 glyf 的宋体。
Closes #347
2026-10-10 10:06:55 +08:00
yenharvey
1dc9162a4f
docs: 协议版本不写死数字,改为指向 PROTOCOL_VERSION
...
文档里的版本号每升一次协议就落后一处(architecture 写 7、linux-fcitx5 写 6,代码已是 8)。
2026-10-10 09:56:42 +08:00
yenharvey
9a3ddbf0e0
Merge branch 'feat/click-commit'
2026-10-09 21:17:35 +08:00
ling
12cdd3afb7
fix(core): 双拼 ü 键在 j/q/x/y 后解为标准拼音 ( #443 )
...
搜狗等方案的 ü 键与 j/q/x/y 拼出 jv 这类不合法的音节,查不到词;解不出时规范化为 ju/qu/xu/yu,同键已有的合法读法优先。
Closes #416
2026-10-09 21:16:27 +08:00
yenharvey
5fcba715b5
feat(windows): 鼠标点候选窗口上屏候选或它的译词
...
候选窗只在候选与译词的点击区域收鼠标,其余照旧穿透,按下不抢焦点;点中的目标交给 Router 按数字键 / 译词键同一套上屏。
Server 写不了文档,上屏的字挂在焦点会话上,DLL 下一拍轮询随 Update.commit 取走写进去,赶在轮询前来的键把它接在结果前面。
协议升到 8(本周期第一次升,Linux 插件一起改);更老的 DLL 读不到 commit,不收它们的点击。
Closes #199
Closes #233
2026-10-09 20:54:42 +08:00
TimLiu
e440b03a6f
fix(neural): macOS 14 本地模型回退 CPU 避免崩溃 ( #476 )
...
Candle 创建 Metal 设备时会用到 macOS 15 才有的 MTLResidencySetDescriptor,macOS 14 上直接 panic;缺这个类时改用 CPU,精度随设备走(Metal F16、CPU F32)。
2026-10-09 20:14:45 +08:00
yenharvey
85e9a1b634
fix(tools): 词库收「嗯」,读音按输入习惯给 en
...
Unihan 里 嗯 只有 ng / n 两个读音,都不是拼音音节,生成词库时整个字被丢掉,en 与 ng 都打不出来;
各家输入法都用 en 打它。语料里 嗯 有 34 万次,重跑 bigram 后 en 首选 嗯,enen / endui / enhaode 整句也对。
代价:enren 的整句「嗯人」排到 恩人 前面(enqing / enhui 原来就是 恩庆 / 恩会 排第一,回退分数的老问题)。
2026-10-09 19:15:47 +08:00
yenharvey
4c6aede030
feat: 偏好设置加「输入拼音时也给英文词和补全」开关
...
中文模式里英文词与前缀补全会插到中文候选中间,不打英文的人觉得干扰;[general] english_in_chinese 缺省开,
关掉后中文模式不出英文词与补全,英文模式不受影响。关着时「中文候选排在英文词前面」没有意义,界面上置灰。
Closes #104
2026-10-09 19:10:45 +08:00
yenharvey
145983c5ad
feat: 偏好设置加「候选后面显示 emoji」开关
...
emoji 挤占候选位置的反馈很多;[general] emoji 缺省开,关掉后 emoji 表照样加载、只是不出候选,切换不用重载数据。
macOS / Windows 偏好设置各加一个勾选框,Linux 读配置。
Closes #79
Closes #272
Closes #335
Closes #483
2026-10-09 18:59:27 +08:00
yenharvey
4b69cd51bd
refactor(render): 同前缀的模块收进目录,删掉日志型注释
...
scene/draw_{box,effect,visual} → scene/draw/{rect,effect,visual},theme/file/color_{ref,spec,value} → theme/file/color/{reference,spec,value},
tests/theme_{fonts,status,svg} 并成一个 tests/theme/ 测试;box、ref 是关键字,所以用 rect、reference。
三处带「原来 / 改动前」的注释改成只说现状,矩阵窗口的来历留在 crate-notes。文档同步路径,crate-notes 补上樱花与默认以青简绿为底。
2026-10-09 18:20:08 +08:00
yenharvey
3d95773db0
feat(render): 内置主题可以带图片
...
- BUILTINS 每个内置主题附一张「路径 → 内容」表,图片用 include_bytes! 编进程序;内置主题在磁盘上没有目录,原来只编进了 theme.json
- 图片解码与用户主题走同一套代码,只是数据从内存表取;内置主题不带字体文件,只用系统字体
- 测试检查内置主题用到的图片都编进去了,漏登记会直接报
2026-10-09 13:32:49 +08:00
yenharvey
52a1ab9211
feat(render): 主题图片支持 SVG
...
- 路径以 .svg 结尾的图片用 resvg 解析,单位当作点、不管 scale,slice 按 SVG 单位写;任何缩放比例下都清晰
- 加载时解析一次(文件 ≤ 4 MB、原始尺寸 ≤ 4096),画时才栅格:拉伸按盒子像素尺寸直接栅格,九宫格按原始尺寸 × 倍数栅格再切,每张缓存 8 种尺寸,之后与 PNG 同一条贴图路径
- 不读外部文件:usvg 默认按 <image href> 的路径读盘,字符串解析器换成一律返回空;不开 raster-images 与 text,内嵌位图与 <text> 不画
- resvg 0.48 用的是与渲染器同一个 tiny-skia 0.12;只有渲染器用,依赖写在本 crate,不进 workspace
2026-10-09 13:11:25 +08:00
yenharvey
fdd85a33eb
feat(render): 主题可指定字体与斜体、随主题带字体,主题文件可写注释
...
- 样式上 family 写字族回退链(system 为界面字体),style 写 italic;text.family 是缺省链。节点内联 font 能改斜体、不能换字族,换字族要定义命名样式
- 回退链在加载主题时去重成字族表,FontSpec / TextStyle 只存序号,仍可按值复制;表按样式名排,每次加载顺序一样
- 字体库不扫系统目录,主题写到的系统字族由壳查文件经 Renderer::load_theme_fonts 加载(mac CoreText、Windows DirectWrite,与用户选字体同一个查法)
- 顶层 fonts 列随主题带的字体文件,路径规则同图片,单个 ≤ 32 MB
- theme.json 可写 // 与 /* */ 注释和尾逗号(JSONC),解析前换成空格、保留换行,报错位置对得上原文件
- 字体相关类型收进 theme/font/ 与 theme/file/font/,一个类型一个文件
- preview 示例加 --theme / --font-dir,离线画用户主题
2026-10-09 13:10:37 +08:00
yenharvey
c2b96c2977
Merge branch 'main' into feat/theme
...
冲突处理:
- ThemeMode 在本分支已改为 Appearance,main 新增的 import 随之去掉 ThemeMode
- Windows 候选窗口 sync_theme:保留 main 按显示器取 DPI 的逻辑,深浅读 appearance
- main 对内联 config 测试的改动(SwitchKeys::default())搬到 config/tests.rs
- macOS 设置项 tag 52 两边撞号:main 的 ShuangpinRawPreedit 保持 52,HorizontalGrid 改为 57
2026-10-09 12:23:09 +08:00
yenharvey
b240289df1
build(release): 将含章模型与词库合并为 data-v3 单包
...
统一两份模型的 small 型号文件名,并让三个平台读取单包数据。保留旧锁下载路径供历史版本使用。
2026-09-29 13:37:59 +08:00
yenharvey
b6c68352a5
chore(release): 合并主线并准备 0.1.5-beta.1
...
合并三平台共用发布流程、更新检查和最新输入改动,接入含章模型的数据打包与安装路径。保留已确认的 beta 更新日志和网盘入口,修复未发布节阻断发布索引的问题。
2026-09-29 12:31:24 +08:00
yenharvey
a41d1cf82a
feat: 接入含章·通变与知微模型
...
接入含章·通变的拼音解码、整句重排与词图兜底生成,扩展 macOS、Windows 和 Linux 的模型加载路径。模型文件按正式标识归档,保留旧用户目录回退,并同步数据打包、评测记录和用户文档。
2026-09-29 12:02:00 +08:00
yenharvey
26c613c8ae
feat(release): Linux 预编译包、三平台共用一个 Release、网盘链接
...
- Linux:apps/linux/scripts/package.sh 在 Ubuntu 26.04 上打 qingjian-<版本>-linux-x86_64.tar.gz(Server、Fcitx5 插件、产品数据、install.sh),与源码安装共用 files.py 的清单与校验;Linux 版本号对齐 0.1.4-dev
- release.yml:v<版本> 标签发三个平台,prepare 建草稿 → 各平台并行打包上传 → publish 合并摘要与构建信息后转正;有平台失败就停在草稿;单平台补丁仍可用 macos-v / windows-v / linux-v 标签
- CHANGELOG 版本标题下的「网盘:」行进 releases.json 的 mirrors 字段,GitHub Release 说明放在最前
2026-09-24 10:10:02 +08:00
yenharvey
795a0c70d2
feat(update): 检查更新(只提示)与版本索引的 ed25519 签名
...
新 crate qingjian-update:读官网的 releases.json、验签名、按平台 / CPU / 渠道挑比当前新的版本,结果写 update.json;
[update] check / channel 配置;macOS 输入法菜单、Windows 任务栏「中 / 英」图标的右键菜单与两端「关于」页提示,
点开下载页,不下载不安装;-dev 本地包不检查(QINGJIAN_UPDATE_VERSION 可顶替版本号来测)。
发版侧 tools/release-sign 给索引签名,release.yml 没配 QINGJIAN_INDEX_SIGNING_KEY 时门禁失败。设计见 docs/design/update.md。
macOS 菜单里「有新版本」这一行必须放在普通条目那一组:放在最后一条分隔线之后时 IMK 每次按键都新建会话、打不了字
(对照构建逐个验过,见 update.md)。
2026-09-23 16:56:17 +08:00
yenharvey
464c2599cd
fix(windows): 中英模式所有应用共用一份,切换键可多选并适配系统 Ctrl+Space
...
- 中英模式存在 Server、所有应用共用一份(与搜狗一致):用户在某个应用里切了用 ModeChanged 报上去,
激活、线程得到焦点、轮询时用 SyncMode 取回跟上;悬浮状态条上点「中 / 英」直接改这一份。
之前各应用各记一份,后台线程激活时报的模式会盖掉前台的,新打开的程序偶尔一打开就是英文。
- 只在前台窗口属于本进程时轮询:后台进程会一直以为自己在前台,它们来取模式会让悬浮条在切走输入法后
又冒出来;真在前台的应用有时收不到「得到焦点」,启动后悬浮条要等打开设置程序才出现。
- 切换键改成勾选、可多选:单击 Shift(缺省)/ 单击 Ctrl / Ctrl+Alt+Space,配置写成列表,老配置的单个值照读,
ctrl+space 转成 ctrl+alt+space。
- 系统的「输入法/非输入法切换」(缺省 Ctrl+Space)不进勾选项但照微软拼音适配:它翻的输入法开关
关 = 英文、开 = 中文;我们切模式时把开关写成一致,按一下就切;开关一变作废被截走 Space 的那次「单击 Ctrl」。
- 会话号改用线程 id:TSF 的 client id 各进程都是同样那几个值,不同应用在 Server 那边撞成同一个会话。
- 协议版本保持 7:一个版本周期里只升一次。
- 任务栏点中 / 英触发的 compartment 回调里不再回写转换模式:在它自己的 OnChange 里写会报 0x8000FFFF。
2026-09-23 16:29:51 +08:00
yenharvey
c72d772f34
fix(linux): Fcitx5 插件按协议 7 开会话
...
5da1e079 把协议升到 7,插件 OpenSession 里写死的 6 没跟着改,Server 拒绝开会话,CI 的 Fcitx5 测试全挂。加一个测试核对插件源码里的版本与 PROTOCOL_VERSION 一致。
2026-09-23 14:08:06 +08:00
yenharvey
5da1e0797c
feat(windows): 任务栏中 / 英图标右键菜单,悬浮条全屏时收起
...
右键任务栏图标弹出菜单:切中文 / 英文、全角标点、显示或隐藏悬浮条、打开设置;后三项经协议 v7 的 Indicator 消息交给 Server,打勾状态随 ModeSync 下发(UWP 沙箱读不到配置文件)。前台是全屏应用时悬浮条收起,退出全屏后回来。
2026-09-23 12:04:54 +08:00
yenharvey
560ac99f4d
Merge branch 'main' into feat/theme
2026-09-23 09:58:02 +08:00
li-chena and Li
b12218557f
feat(linux): Server 接本地整句模型重排 ( #214 )
...
* feat(linux): Server 接本地整句模型重排
- 照 Windows Server 的 dispatch/rescore 平移:后台加载、停键 80 ms 防抖、20 ms 收结果、2 s 兜底,只换整句候选
- 模型在后台接上时用户正在组句,补查一次攒下整句路径再起防抖,这一轮不错过重排
- 主循环改按 next_tick 的绝对到点时间等消息,防抖与轮询才到得了点;Poll 先 tick 再回帧
- 前文用本会话历史,不读应用光标前文;[model] 只在启动时读,Linux 没有配置热加载
* feat(linux): Poll 回帧内容没变时沿用展示身份
- 插件组句期间每 80 ms Poll 一次取重排结果;若每次都推进版本号,插件就得每拍重画、每拍回报曝光,面板闪且词汇统计被刷高
- 会话记下上次发出的帧,Poll 回的帧与之相同就当没有新展示:身份不变、不清曝光记录;重排换了顺序才推进
- KeyResult 的行为不变,每次按键仍是新的展示
* feat(linux): 插件组句期间轮询取本地整句模型的重排结果
- 插件是一问一答,Server 推不了;照 Windows DLL 挂一个 80 ms 定时器,组句期间发已有的 Poll 消息
- 只在 revision 推进时重画并回报;同版本什么都不做,面板不闪、曝光不重复记
- 帧为空、Reset、失焦、停用、断线时停表;定时器建一次反复用
- 回归:mock 全模式应答 Poll,rescore 模式第一条回换序帧,断言重画一次、回报一次
* build(linux): 安装清单加本地整句模型文件
- files.py 只装 data/generated,data-fetch.sh 取回的 data/model/model.qjm 没进清单,装完 Server 找不到模型
- 非样例安装把它按 data.lock 的校验值装到 resources/data/model/,缺文件提示先跑 data-fetch.sh
- 用户文档:Linux 页去掉「暂不提供神经模型」,本地整句模型页补 Linux 的开关与自有模型路径
---------
Co-authored-by: Li <clwillsoncl@gmail.com >
2026-09-23 08:50:45 +08:00
yenharvey
69be71c710
Merge branch 'main' into feat/theme
...
main 这段时间的 24 个提交(辅码、智能 ABC、笔画码表、Linux 第一阶段、横排矩阵等)合进主题分支。
渲染器:主题分支已把手算坐标的 horizontal / vertical / top_line 换成场景树 + theme.json,main 加在旧文件上的功能按新结构重做:
- 辅码:候选词后面的 `[kf]`(模板 `word` 组件加 `code` 绑定,与译文同色、同一条基线)与拼音行里带下划线的码段(PreeditStyle::AuxCode),加 aux-code 两个快照场景,原有基准图未变。
- 横排矩阵:main 的 renderer/matrix.rs 建在旧渲染器上,随旧渲染器删掉,场景树这边还没有矩阵窗口;移植之前 mac 壳只在系统绘制下展开矩阵(Host::grid_keys 多一个 !uses_bitmap() 条件)。见 docs/notes/crate-notes.md。
其余:ThemeMode 已改名 Appearance,main 新进来的 Linux Server 与 Windows 的辅码显示开关跟着改;mac 设置项编号 51 撞了,HorizontalGrid 改 52;Windows 热加载里主题目录戳与 codes/ 目录快照两段并存。
2026-09-21 19:16:40 +08:00
BROX_Lighters.
bee2a434f4
refactor(core): 提供无副作用的原样预编辑接口 ( #195 )
...
新增 Engine::raw_preedit(),只读返回未上屏的原样文本与光标,不查候选、不提交、不记学习与日志,与 take_raw() 共用文本生成。为 Linux 失焦原样上屏做准备,各平台壳接入不在本 PR。
2026-09-21 17:01:36 +08:00
yenharvey
7ff5d27948
fix(tools): 笔画表首笔按大陆规范补齐,首笔对照不再按几何近似放行
...
师、归(CNS 记点,应为竖)、非字头与非字旁(记撇,应为竖)、册 / 删(记竖,应为撇)改对,「所」加进「戶→户」规则的例外;顺带按规范改了竖心旁(点、点、竖)与「必」的笔顺。
首笔对照原先把「点对撇、点对竖、撇对竖」三类直接算对,两岸笔顺的差异正好落在这三类里,真错被放了过去;现在不符的字都要逐字进白名单(对照源几何分不清的 343 字已裁定入表)。
2026-09-21 10:14:50 +08:00
Shiyuhai2023
40db095dd1
feat(tools): 随包笔画码表 ( #153 )
...
辅码的随包原生码表:dict-convert 新增 stroke(CNS11643 笔顺 + 大陆序覆盖表生成笔画表,--verify 对照笔画数与首笔)、mmh-reference(开发期对照数据,不进仓库)与 pack codes(单字前 4 笔 + 末笔、词组每字首笔),assets/stroke 放覆盖表与白名单,安装包带上码表。
2026-09-21 10:14:05 +08:00
yenharvey
81db829b0b
feat(core): 双拼新增首道双拼方案
...
键位按方案作者公布的键位图(shoudaoshuangpin/shoudaoshouyouplus),与万象拼音、WindInput 的实现一致。
翘舌声母 v / i / e 为 zh / ch / sh;e 键让给了 sh,零声母 e / ei / eng 用 u 引导;同码 dk(den / dia)取 den。
顺带补上配置模板、注释与 CLI 说明里漏掉的 abc。
2026-09-20 17:27:21 +08:00
Chrok
839c794765
feat(core): 双拼新增智能ABC方案 ( #180 )
...
键位按 Rime 的 double_pinyin_abc 核对;翘舌声母在 a / e / v,零声母一律 o 前缀。
Closes #112
2026-09-20 16:56:07 +08:00
yenharvey
9c60172c86
fix(linux): 安装脚本先检查依赖,文档补上 libssl-dev 与 pkg-config
...
新装的 Ubuntu 上缺这两个包,install.sh 会在编译 OpenSSL 绑定时失败、报错看不懂;现在开头就列出缺的依赖并给出 apt 命令。
验证环境清单加上 GNOME 50 原生 Wayland 真机;crate-notes 的协议版本改为 6。
2026-09-20 16:12:31 +08:00
BROX_Lighters.
2b2902d70b
feat(linux): 接入 Rust Server 与 Fcitx5 默认候选面板 ( #90 )
...
Linux 第一阶段:Rust Server + 薄 Fcitx5 插件 + 用户目录安装,候选窗用 Fcitx5 自带面板。
目前只支持源码安装、手动启动 Server;自绘候选窗、自动启动与打包在后续阶段。
2026-09-20 15:49:20 +08:00
Leo
06ffd4b541
feat(macos): 横排候选可展开成 6 行矩阵,缺省关 ( #178 )
...
横排只有一行,靠后的词只能一页页翻;打开「横排时 ↑ / ↓ 展开成多行」([general] horizontal_grid)后上下键把它展开成 6 行矩阵,
左右键在候选之间移动。视口与移动规则在 Core,Windows 只补了帧字段、没接按键。
2026-09-20 13:13:41 +08:00
yenharvey
7da59a69be
feat(render): 辅码用方括号紧跟在候选词后面显示
...
码是词本身的属性,和译文混在同一条注记里不好认:渲染器的 Row 加 code 字段,画在候选词后面(小字淡色),不再占注记列。
Windows 的渲染器与 GDI 两套画法一致;mac 壳暂时传空,接辅码时按同一格式。
2026-09-20 10:21:48 +08:00
Shiyuhai2023
ee86db53a2
feat(windows): 辅码:协议装配、候选注记、设置页与热加载 ( #152 )
...
Windows 壳接上辅码:触发键进辅码态、码段逐键筛候选、候选上显示码;设置页新增「辅码」页(开关、触发键录制、码表导入与开关);
配置与用户 codes 目录变化热加载;加载着旧 DLL 的会话把码段降级成普通拼音段。缺省关闭。
2026-09-20 09:58:38 +08:00
Shiyuhai2023
f3ad110958
feat(core): 辅码:拼音后补码筛候选(码段状态机 / 码表 / 候选过滤 + CLI) ( #51 )
...
拼音打完整后按触发键进辅码态,补码逐键筛候选;码表是词 → 码的 .qj(AuxCodeTable),缺省关闭。
只含 Core 与 CLI,Windows 壳与随包笔画码表在 PR #152 / #153。
2026-09-20 09:19:46 +08:00
yenharvey
7e6d5f1801
feat(render): 循环动画(关键帧),循环帧局部重画;内置主题高亮条滑动
...
节点写 animation:关键帧平移 / 旋转 / 缩放 / 不透明度,作用于整棵子树、不影响布局;属性只在写了它的关键帧间插值,开头结尾缺的按缺省值补(同 CSS);loop: false 播一轮停住
时钟从窗口出现算起、打字中不重置、forget 归零;减少动态效果时停在第一帧;画出范围按一轮里能到的最远处算(旋转取外接圆)
带姿态节点整棵子树画进缓存小图,按姿态绕中心变换贴上
循环帧局部重画(renderer/partial.rs + scene/split.rs):动画节点把树序切段,不动的段各缓存一张图层,每帧只在动画节点新旧位置的区域里按原先后叠段与节点;与整张重画只差半透明取整(≤ 3/255,测试断言);有过渡或动画节点不独立时整张重画
blend_mask 按覆盖率查表(同 Skia A8 遮罩);壳的定时器按 next_frame 间隔跳(过渡 16 ms、循环 33 ms)
展示主题循环帧 3.6 → 0.2 ms(mac release 2 倍屏,第一帧切段约 7 ms)
内置三主题的高亮条加 id + transition(100 ms ease-out);快照每张先 forget,不与上一张配对
快照:静止的全部不变;过渡半路改用青简绿(transition-mid),新增展示主题循环 600 ms 一帧(showcase-loop)。Windows 基准待 box 重出
2026-09-18 20:28:52 +08:00
yenharvey
007cfa41c9
feat(render): 过渡动画(高亮条滑动),动画帧缓存阴影与九宫格
...
节点写 id + transition:新一帧按 id 与上一帧配对,位置、大小、不透明度从旧值插值(缓动曲线同 CSS);同一帧里 id 重复才按出现顺序加序号,只在高亮行出现的高亮条换行后仍配得上
Renderer 留住上一帧(renderer/retained.rs),render 返回 next_frame,壳到点调 tick 只重画不重建树;过渡中途再来一帧从半路接着走;画出范围按起止两头的并算,动画中位图不变大小
mac 用 NSTimer(candidates/animation.rs),Windows 在 UI 线程消息循环截 WM_TIMER;窗口收起停动画并 forget;跟随系统「减少动态效果」/「动画效果」
性能:效果遮罩与图片填充框按「节点 + 位置大小 + 画布大小」缓存,动的节点及拿子节点当形状的上级容器才重算;九宫格同色格按纯色填(同 Skia 固定颜色格),缓存贴回用整数混合绕开 tiny-skia 的高精度图片流水线;blend_mask 按行处理(结果逐位不变)
展示主题新帧 20 → 15.5 ms、过渡帧 19 → 7.3 ms(mac release 2 倍屏)
快照:31 张不变;展示主题竖排两张花瓣边缘 158 像素取整差异;新增过渡半路一帧,并断言播完的最后一帧与直接画的一致。Windows 基准待 box 重出
2026-09-18 20:09:50 +08:00
yenharvey
acc647c3f7
feat(render): 装饰可以伸出窗口,候选窗鼠标穿透
...
不加新写法:负 inset 的绝对定位节点就是伸出窗口的装饰
位图按场景画出范围开(scene/extent.rs:自己画东西的节点连同投影伸出、文字描边),根节点的盒子是内容区,壳照旧按内容区贴光标,装饰可伸到屏幕外
Windows 候选窗加 WS_EX_TRANSPARENT,鼠标整个穿透,与 mac 面板一致,装饰盖住应用的部分不挡点击(待 box 真机验)
原有 37 张快照逐像素不变;展示主题竖排两张加了右上角徽章与左下角花瓣,位图向上、向右撑大
2026-09-18 19:06:31 +08:00
yenharvey
34ef7ba039
feat(render): 主题效果(投影、内阴影)与字重,窗口阴影改由主题定义
...
节点可写 effects:drop-shadow / inner-shadow,形状取节点自己画面的 alpha(圆角框、九宫格图片、文字),可叠多层
窗口阴影就是根节点的投影,位图按投影伸出距离留边;mac 面板关系统阴影、改贴渲染器画的,与 Windows 同一份像素(系统绘制退路仍用系统阴影)
Renderer::render / render_status 去掉 shadow 参数,公开的 Shadow 删除;状态条阴影写在 status.effects
文字样式加 weight(数字或 thin…black),节点 font 可写 { base, size, weight } 行内改;Windows 加载 Segoe UI 与雅黑 / 正黑的粗细体文件
九宫格内部分割线取整像素,修接缝处 alpha 不满、底下有投影时透出细线
原有 31 张快照逐像素不变;1 倍屏一张改为带阴影,展示主题四张用上新效果
2026-09-18 18:48:49 +08:00
yenharvey
be87aa9d39
feat(render): 用户主题目录,保存即热加载
...
ThemeLibrary 合并内置主题与 <用户数据目录>/themes/<id>/theme.json:目录名须等于 meta.id,不能与内置主题重名或用外观词,读不进来的跳过并记警告
热加载按目录戳(各 theme.json 的修改时间与大小):mac 在激活期间每秒的配置检查里 refresh,Windows Server 在热加载轮询里比戳后重发设置让 UI 线程重读
mac 偏好设置与 Windows 设置程序的主题下拉列出内置 + 用户主题;platform 加 dirs::themes_dir,mac 加 paths::themes_dir
用户文档新增「设置 → 主题」,数据与日志页加 themes/
2026-09-18 18:16:14 +08:00
yenharvey
659ca07483
feat(render): 内置系统蓝、微信绿主题,设置界面可选主题
...
主题支持 extends(以内置主题为底,对象逐键合并、数组整个替换)与条件颜色 { if, then, else };青简绿加 hl_* 变量,像素不变
新增 system-blue 系统蓝、wechat 微信绿,都 extends 青简绿只改颜色;Theme::builtin(id) / builtins() 取
mac 偏好设置与 Windows 设置程序「候选窗口」页加「主题」下拉,按显示名列出、写回 id;两端按 theme_id() 加载,不认识的 id 退回青简绿
配置迁移补漏:写 theme 时旧的外观值补写成 appearance(先选主题会丢深色),注释一并换成模板里的
新增 8 张主题快照,原有 21 张逐像素不变
2026-09-18 18:00:42 +08:00
yenharvey
d6075131be
feat(render): 内置主题改由 theme.json 描述,按模板实例化场景树
...
内置「青简」写成 themes/qingjian/theme.json 编进 crate;删掉 Theme 结构体、Palette 与 renderer/ 里写死的布局常量
renderer/build/ 按模板 + 帧数据实例化:frame / text / icon / preedit / annotation / use / repeat,when 条件,表格布局对齐竖排三列
theme/file/ 是 serde 模型;加载时检查颜色变量、文字样式、组件引用,找不到的记警告、渲染时退回缺省
状态条尺寸与颜色取主题 status 分节;壳侧 Theme::light / dark 接口不变
21 张快照逐像素一致,每帧耗时与上个提交持平
2026-09-18 17:14:42 +08:00