WIP checkpoint (M2.53→M2.54 工作区): 字体归MeowOS/fonts+SDK跟随+多字体(进行中)+boot板载+状态栏28+亮度/音量修复+文档刷新
This commit is contained in:
1 parent
245bee2946
commit
064635b3c4
44 files changed
+2834
-308
No files matched your search
@@ -29,10 +29,14 @@
|
||||
#define FBIO_WAITFORVSYNC 0x4620
|
||||
|
||||
#define FB_DEV "/dev/fb0"
|
||||
#define MEOW_FONT_PNG_CARD "/usr/data/mnt/sd_0/MeowAPPs/fonts/font.png"
|
||||
#define MEOW_FONT_IDX_CARD "/usr/data/mnt/sd_0/MeowAPPs/fonts/font.idx"
|
||||
#define MEOW_FONT_PNG_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/font.png"
|
||||
#define MEOW_FONT_IDX_CARD "/usr/data/mnt/sd_0/MeowOS/fonts/default/font.idx"
|
||||
#define MEOW_FONT_PNG_SYS "/usr/share/meowos/font/font.png"
|
||||
#define MEOW_FONT_IDX_SYS "/usr/share/meowos/font/font.idx"
|
||||
/* 默认字库(卡 MeowOS/fonts/default)与固件内置之外,launcher 会把「当前生效字体」
|
||||
* 经环境变量下发给 app(见 meow_launcherd.c launch_app / meow_font_effective_paths):
|
||||
* MEOW_FONT_PNG / MEOW_FONT_IDX = 绝对路径;MEOW_FONT_APP = <family> 或 "default"。
|
||||
* SDK load_font 优先读 env(匹配系统 font.file),无则回退卡默认 → 固件。 */
|
||||
|
||||
#define MUI_DEFAULT_W 480
|
||||
#define MUI_DEFAULT_H 720
|
||||
@@ -572,13 +576,55 @@ int meow_gfx_is_device(void) { return g_fb_mem != NULL; }
|
||||
int meow_gfx_mfont_ready(void) { return g_mfont_ready; }
|
||||
|
||||
/* ================= 初始化/销毁 ================= */
|
||||
/* 字库加载优先级(M2.x):
|
||||
* 1) 环境变量 MEOW_FONT_PNG/MEOW_FONT_IDX(launcher 注入的「当前生效字体」= 系统 font.file)
|
||||
* —— app 未自带字库(§5.7 load_handle 未实现)时跟随系统 font.file;
|
||||
* 2) 卡默认 MeowOS/fonts/default/font.png(不再硬编码 MeowAPPs/fonts);
|
||||
* 3) 固件 /usr/share/meowos/font/font.png。
|
||||
* 全失败 → g_mfont_ready=0,text_draw 回退 5x7 点阵(系统不死)。 */
|
||||
static int load_font(void)
|
||||
{
|
||||
const char *ep = getenv("MEOW_FONT_PNG");
|
||||
const char *ei = getenv("MEOW_FONT_IDX");
|
||||
if (ep && ep[0] && ei && ei[0] && meow_font_load(ep, ei) == 0) return 1;
|
||||
if (meow_font_load(MEOW_FONT_PNG_CARD, MEOW_FONT_IDX_CARD) == 0) return 1;
|
||||
if (meow_font_load(MEOW_FONT_PNG_SYS, MEOW_FONT_IDX_SYS) == 0) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* M2.5x 多字体:读 launcher 注入的环境变量,构建 6 字符类 → 字库的映射(同 family 去重、
|
||||
* ≤4 套上限由 meow_font_config_multifont 统一处理)。launcher 注入(见 meow_launcherd.c
|
||||
* launch_app):MEOW_MULTI_FONT=0/1;MEOW_FONT_PNG/IDX=全局(保留);每类
|
||||
* MEOW_FONT_CLS_<X>_PNG/IDX(命中则覆盖全局;未注入 = 该类跟随全局)。
|
||||
* 仅当全局字库已装载(g_mfont_ready)才配置;关/无 env → 单字体,零额外开销。 */
|
||||
static void meow_gfx_load_multifont(void)
|
||||
{
|
||||
static const char *cls_env[MEOW_FCLS_COUNT][2] = {
|
||||
{ "MEOW_FONT_CLS_CJK_PNG", "MEOW_FONT_CLS_CJK_IDX" },
|
||||
{ "MEOW_FONT_CLS_CJK_SYM_PNG", "MEOW_FONT_CLS_CJK_SYM_IDX" },
|
||||
{ "MEOW_FONT_CLS_NUM_PNG", "MEOW_FONT_CLS_NUM_IDX" },
|
||||
{ "MEOW_FONT_CLS_LATIN_PNG", "MEOW_FONT_CLS_LATIN_IDX" },
|
||||
{ "MEOW_FONT_CLS_LATIN_SYM_PNG", "MEOW_FONT_CLS_LATIN_SYM_IDX" },
|
||||
{ "MEOW_FONT_CLS_OTHER_PNG", "MEOW_FONT_CLS_OTHER_IDX" },
|
||||
};
|
||||
const char *emf = getenv("MEOW_MULTI_FONT");
|
||||
int on = emf && emf[0] == '1';
|
||||
const char *gp = getenv("MEOW_FONT_PNG");
|
||||
const char *gi = getenv("MEOW_FONT_IDX");
|
||||
meow_font_class_cfg cfg[MEOW_FCLS_COUNT];
|
||||
memset(cfg, 0, sizeof cfg);
|
||||
for (int c = 0; c < MEOW_FCLS_COUNT; c++) {
|
||||
const char *p = getenv(cls_env[c][0]);
|
||||
const char *idx = getenv(cls_env[c][1]);
|
||||
if (p && p[0] && idx && idx[0]) { cfg[c].png = p; cfg[c].idx = idx; }
|
||||
}
|
||||
int distinct = 0, truncated = 0;
|
||||
if (meow_font_config_multifont(on, gp, gi, cfg, &distinct, &truncated) != 0)
|
||||
meow_log(MEOW_LOG_WARN, "multi_font: config failed, single-font fallback");
|
||||
else if (truncated)
|
||||
meow_log(MEOW_LOG_WARN, "multi_font: >%d distinct fonts -> capped (more memory!)", distinct);
|
||||
}
|
||||
|
||||
int meow_ui_init(const meow_ui_opts *opts)
|
||||
{
|
||||
if (g_init_ok) return 0;
|
||||
@@ -623,6 +669,7 @@ int meow_ui_init(const meow_ui_opts *opts)
|
||||
|
||||
meow_font_set_fb((unsigned)g_xres, (unsigned)g_yres, (unsigned)g_line);
|
||||
g_mfont_ready = load_font();
|
||||
if (g_mfont_ready) meow_gfx_load_multifont(); /* M2.5x 多字体(读 env;关/无 env = 单字体) */
|
||||
|
||||
const char *dp = getenv("MEOW_UI_DUMP");
|
||||
if (dp && *dp) g_dump_path = strdup(dp);
|
||||
|
||||
Reference in new issue
Block a user