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 二进制。
This commit is contained in:
1 parent
121d30ec95
commit
54750a63c5
9 files changed
+542
-6
No files matched your search
@@ -159,6 +159,20 @@ unsigned long long meow_gfx_overlay_suppressed_count(void);
|
||||
/* 中文/日文字库(mfont)是否已加载(状态栏「蓝牙」CJK 与回退 "BT" 二选一)。 */
|
||||
int meow_gfx_mfont_ready(void);
|
||||
|
||||
/* ---- 矢量字(FreeType)渲染薄封装(meow_ui_gfx.c 提供 / meow_ui_ft.c 使用)----
|
||||
* meow_ui_ft.o 是独立成员:App 显式调 meow_ft_* 才被拉取,随之才拉入 freetype .o。
|
||||
* 为让「不调 meow_ft_* 的 App 零增量」(gfx.o 不引用 meow_ui_ft.o / FT 符号),gfx.o 只
|
||||
* 提供下面两个绘制原语薄封装(blend 一个灰度像素进 back_buf、标一块脏区)。 */
|
||||
void meow_gfx_ft_blend_px(int x, int y, uint32_t color, int alpha);
|
||||
void meow_gfx_ft_dirty(int x, int y, int w, int h);
|
||||
|
||||
/* ---- 矢量字(FreeType)字形访问(meow_ui_ft.c 提供;宿主单测直接调)----
|
||||
* 返回 0=成功;-1=无已载字体(调用方应降级位图字库)。位图归 LRU 缓存所有,本次用完前
|
||||
* 勿再调 meow_ft_glyph(同字号新光栅化可能逐出旧槽)。 */
|
||||
int meow_ft_glyph(int px, uint32_t cp, int *adv_x,
|
||||
const uint8_t **bmp, int *bw, int *bh, int *left, int *top);
|
||||
int meow_ft_advance(int px, uint32_t cp, int *adv_x); /* 仅测宽不栅格化、不占 LRU 槽 */
|
||||
|
||||
/* ---- 输入层(meow_ui_input.c)---- */
|
||||
/* 语义事件:由输入线程解析后压入队列,run/IME 循环弹出。 */
|
||||
#define MEOW_EV_KEY 1 /* a=keycode, b=1 按下 / 0 抬起 */
|
||||
|
||||
Reference in new issue
Block a user