/* * meow_ui_font.h — SDK 字体:应用可读 TF 卡字体列表(§5.7)+ 字体分层/大字库(§10)。 * * 原 meow_ui.h 拆分的一部分(font 模块)。字库权威列表 = launcher 扫描落盘的持久文件 * MeowOS/config/fonts/index(CSV);App 只经本接口读该列表。字体「档位」由 launcher 按 * app.json 声明的 "fonts:<档>" 注入 MEOW_FONT_TIER;SDK 据档选库(meow_font_reload_tier)。 */ #ifndef MEOW_UI_FONT_H #define MEOW_UI_FONT_H #ifdef __cplusplus extern "C" { #endif /* ============================================================ */ /* §5.7 应用可读 TF 卡字体列表(M2.58:字体索引 / 查列表 / 丢失降级默认) */ /* ============================================================ */ /* 系统字体管理器的面向应用接口(规格 §5.7.1/§5.7.2): * - 权威列表 = launcher 扫描 MeowOS/fonts/// 后落盘的持久文件 * MeowOS/config/fonts/index(CSV:family,weight,path,label,tier,glyph_count)。 * app 只经本接口读该列表(不直接拼路径、不依赖 launcher 内存数组)。 * - 渲染仍走 env MEOW_FONT_PNG/MEOW_FONT_IDX(launcher 注入的「当前生效字体」, * 选中字体那一套);本节的 get_available_count/enumerate 只负责「列有哪些库」, * select_by_id 负责「app 会话内固定用哪套」。两路明确。 * - 无卡 / 无 index → 仅 1 项板载默认(family=default)。 */ #ifndef MEOW_FONT_INFO_DEFINED #define MEOW_FONT_INFO_DEFINED typedef struct meow_font_info { char family[64]; /* family slug = MeowOS/fonts// 一级目录名 */ char name[64]; /* 显示名(index 无单列 → 回退 family) */ char weight[32]; /* weight slug(regular|bold|…,缺省 regular) */ char tier[8]; /* 档位 common|gbk|full(info 用) */ int glyph_count; /* font.json glyph_count(info 用) */ char label[128]; /* index 显示名(含字重 + 尺寸标记) */ int size_list[16]; /* 原生字号表(index 无 → 空) */ int size_count; /* 有效字号数 */ int bit_depth; /* 4|8(index 无 → 0) */ char path_png[320]; /* 卡根相对 MeowOS/fonts///font.png */ } meow_font_info; #endif /* 可用字库数(含默认;无卡 → 1)。 */ int meow_font_get_available_count(void); /* 按序号取:idx=0=默认行(family=default);越界返回 0。 */ int meow_font_enumerate(int idx, meow_font_info *out); /* 选该套为 app 会话默认字体:id=0 跟随系统默认(font.file,经 env);id>0 固定用该套。 * 该套字库缺失 → 降级默认(不丢请求)+ WARN(meow_log→app 日志)。成功 0,越界负值。 */ int meow_font_select_by_id(int id); /* ============================================================ */ /* §10 字体分层 / 大字库(M2.5x:基座声明 + font 域已实现按档装载) */ /* ============================================================ */ /* 字体「档位」概念:launcher 按 app.json 声明的字库档("fonts":<档>)向 app 注入 * MEOW_FONT_TIER=<0|1|2>;SDK(meow_ui_gfx / meow_font 大字库加载)据档选库: * MEOW_FONT_TIER_COMMON=0 默认 4K 常用字库; * MEOW_FONT_TIER_GBK =1 大字库 GBK; * MEOW_FONT_TIER_FULL =2 Full(全字符集)。 * 大字库生成由 font/gen/gen_font.py --charset 按档产出;按档装载由 meow_font_reload_tier() * 实现(先 unload 旧再 load 新,释放旧 atlas 防大字库双驻留)。launcher 经 * meow_font_effective_paths_tiered() 按档解析大字库绝对路径并注入 MEOW_FONT_PNG/IDX。 * 既有 meow_font_* 符号(class_of/has_glyph/load_slot/config_multifont…)保留不动。 * 判缺字:meow_font_has_glyph(cp) 预判当前字库是否含该码位。 */ #define MEOW_FONT_TIER_COMMON 0 #define MEOW_FONT_TIER_GBK 1 #define MEOW_FONT_TIER_FULL 2 /* 设当前字体档(0/1/2,越界 clamp 到合法值),返回生效档。 * meow_ui_gfx.c 定义并触发 meow_font_reload_tier() 真重载(大字库切换释放旧 atlas)。 */ int meow_font_set_tier(int tier); /* 当前字体档(初始 = MEOW_FONT_TIER_COMMON;meow_ui_init 时读 MEOW_FONT_TIER env 对齐)。 */ int meow_font_tier(void); #ifdef __cplusplus } #endif #endif /* MEOW_UI_FONT_H */