AskaEth
54750a63c5
feat(sdk): SDK 矢量字(meow_ft_*,§10.1)——上收阅读器 FreeType 管线
问题:SDK 位图字库(meow_font)只有离散字号档位,全字形 atlas 稳态 17.3MiB
(27MB 整机装不下)→ 大字库/大字号必出豆腐。阅读器 R1/R2 的 FreeType 管线已真机验证
(MiSans OTF),本 commit 将其上收 SDK,让任意 App 用上无级字号 + CJK 全字形。
设计(追加式,与位图字库并存):
- meow_ui_ft.c(独立 .o):meow_ft_load/unload/loaded/text/width/line_height/
ascender/descender/cache_set_slots/cache_slots/cache_used。底层按 READER_ENGINE_NOTES §5:
FT_New_Face(path) 按需读文件(零整载 anon);灰阶 FT_LOAD_RENDER|NO_HINTING|TARGET_LIGHT;
glyph LRU key=(px<<32)|cp,默认 512(~0.46MB),可配 256/1024;测宽不栅格化。
- meow_ui_gfx.c 只加两个薄封装 meow_gfx_ft_blend_px/dirty(写 back_buf + 标脏),
使 meow_ui_ft.o 不引入新依赖——「不调 meow_ft_* 的 App 零增量」(freetype 不拉入,已验证)。
- 降级:加载失败/无卡 → meow_ft_loaded()==0 → meow_ft_text 自动改走 meow_ui_text(位图字库,
5x7 兜底),绝不豆腐不崩;meow_ft_width/line_height 降级位图字库度量。
- FreeType 2.14.3 vendor 进 patch_v2/sdk/vendor/(gitignore)+ build_sdk.sh 可复现拉取+裁剪
构建(-DFT_DISABLE_ZLIB/BZIP2/PNG/HARFBUZZ/BROTLI=TRUE,静态 musl),freetype .o 编入
meow_ui.a,App 链接命令不变(meow_ui.a libz.a -lpthread)。
验证:
- 宿主 test_meow_ui_ft 5 项全 PASS(加载/渲染像素非空/宽度测量/LRU 淘汰/降级回退)。
- 全量 SDK 回归:widgets/sdk_fixes/dispatch/notif_gesture/overlay_suppress/listvirt/box/anim/
scroll/ime_fix/pinyin/notif_open/sb_collapse/theme/notify_ipc/audio_host/vol/str/config/
sdk_input_keys 全 PASS。
- 交叉 -Wall -Wextra 全 SDK TU 0 warning;qemu-mipsel 冒烟 PASS(mipsel FreeType 真光栅化)。
- meow_ui.a 新 md5 6ff5be9455f9e197b35fa120be012041(未重链不部署 App,四 App 免重链)。
MEOW_APP_SDK.md 补 §10.1 矢量字一节 + 公共头索引/§9 构建约定更新;.gitignore 忽略
patch_v2/sdk/vendor/ 与 test_meow_ui_ft 二进制。
2026-09-02 09:51:23 +08:00
..
2026-09-02 09:51:23 +08:00
2026-09-02 03:24:46 +08:00
2026-09-02 09:51:23 +08:00
2026-09-01 23:49:24 +08:00
2026-08-31 18:34:51 +08:00
2026-08-31 07:53:57 +08:00
2026-08-31 07:53:57 +08:00
2026-08-31 18:34:51 +08:00
2026-08-31 18:34:51 +08:00
2026-08-31 18:34:51 +08:00
2026-08-31 07:53:57 +08:00
2026-09-01 23:49:24 +08:00
2026-09-01 10:32:15 +08:00
2026-09-01 23:49:24 +08:00
2026-08-30 23:01:31 +08:00
2026-09-02 02:37:38 +08:00
2026-09-02 00:57:58 +08:00
2026-09-02 09:51:23 +08:00
2026-09-02 09:51:23 +08:00
2026-08-30 15:27:10 +08:00
2026-09-02 02:37:38 +08:00
2026-09-02 03:43:42 +08:00
2026-09-02 00:57:58 +08:00
2026-09-02 09:51:23 +08:00
2026-08-31 19:12:51 +08:00
2026-09-01 14:44:55 +08:00
2026-09-01 14:44:55 +08:00
2026-08-31 07:53:57 +08:00
2026-08-31 07:53:57 +08:00
2026-08-30 13:02:17 +08:00
2026-09-01 23:49:24 +08:00
2026-09-02 02:37:38 +08:00
2026-09-01 04:40:34 +08:00
2026-09-01 03:25:01 +08:00
2026-08-31 20:17:51 +08:00
2026-09-01 23:49:24 +08:00
2026-09-01 23:49:24 +08:00
2026-09-01 16:08:01 +08:00
2026-08-31 15:42:24 +08:00
2026-09-02 03:24:46 +08:00
2026-09-02 09:51:23 +08:00
2026-08-30 19:32:40 +08:00
2026-09-02 03:24:46 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 01:12:34 +08:00
2026-08-30 22:33:51 +08:00
2026-09-01 15:23:32 +08:00
2026-09-02 02:37:38 +08:00
2026-09-02 02:37:38 +08:00
2026-09-02 02:37:38 +08:00
2026-08-30 23:01:31 +08:00
2026-09-02 02:37:38 +08:00
2026-09-02 09:51:23 +08:00
2026-09-02 02:37:38 +08:00
2026-09-02 02:37:38 +08:00
2026-09-02 02:37:38 +08:00
2026-08-31 20:17:51 +08:00
2026-09-02 02:37:38 +08:00
2026-08-31 18:59:54 +08:00
2026-08-30 03:27:24 +08:00
2026-09-01 15:23:32 +08:00
2026-09-02 03:24:46 +08:00
2026-09-01 15:23:32 +08:00
2026-09-02 02:37:38 +08:00
2026-09-01 15:23:32 +08:00
2026-08-31 07:53:57 +08:00
2026-08-31 18:59:54 +08:00
2026-08-30 13:02:17 +08:00
2026-08-31 18:59:54 +08:00
2026-08-30 13:02:17 +08:00
2026-08-30 13:02:17 +08:00
2026-09-02 02:37:38 +08:00
2026-09-02 02:37:38 +08:00
2026-08-31 18:59:54 +08:00
2026-09-02 02:37:38 +08:00
2026-09-01 15:23:32 +08:00
2026-08-31 07:53:57 +08:00
2026-08-30 19:32:40 +08:00
2026-09-02 02:37:38 +08:00
2026-09-01 14:44:55 +08:00
2026-09-01 14:44:55 +08:00
2026-08-31 22:40:08 +08:00
2026-08-31 22:40:08 +08:00
2026-09-02 03:24:46 +08:00