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
+14
-6
@@ -84,14 +84,14 @@ void meow_ui_fill_rect_alpha(int x, int y, int w, int h, uint32_t color, int alp
|
||||
|
||||
### 3.1 全局状态栏(系统级组件,A+C 方案并入)
|
||||
|
||||
**定位**:状态栏是**系统级全局组件**,由 SDK 统一绘制——所有界面(launcher 菜单 + MeowAPP 画面)默认都显示,**仅当 APP 声明全屏(fullscreen)才隐藏**。数据由 SDK 内置状态读取器抓系统快照(与 launcher 同源单点一致),非各画各的。
|
||||
**定位**:状态栏是**系统级全局组件**,由 SDK 统一绘制——所有界面(launcher 菜单 + MeowAPP 画面)默认都显示,**仅由 SDK 运行时 `meow_ui_set_fullscreen(1)` 控制隐藏**(`fullscreen` 字段**未在 app.json 解析**,已定未做,见 §3.1 注 [源:审计 2026-08-30])。数据由 SDK 内置状态读取器抓系统快照(与 launcher 同源单点一致),非各画各的。
|
||||
|
||||
```c
|
||||
/* 状态栏显隐(默认显示;APP 声明全屏则隐藏——沉浸) */
|
||||
void meow_ui_set_statusbar(int visible); /* 1=显示(默认) 0=隐藏(全屏) */
|
||||
int meow_ui_statusbar_visible(void);
|
||||
|
||||
/* 全屏声明:等价 app.json `fullscreen:1`(外观上隐藏状态栏 + 隐藏返回键)。 */
|
||||
/* 全屏:由 SDK 运行时 meow_ui_set_fullscreen(1) 控制(app.json `fullscreen` 未解析,已定未做;外观=隐藏状态栏+隐藏返回键)。[源:审计 2026-08-30] */
|
||||
void meow_ui_set_fullscreen(int on);
|
||||
|
||||
/* 状态栏高度(px,供 APP 布局上移内容,避免被盖——status bar inset) */
|
||||
@@ -99,10 +99,10 @@ int meow_ui_statusbar_height(void);
|
||||
```
|
||||
|
||||
**绘制规则**:
|
||||
- `meow_ui_flush()` 上屏前,SDK 自动在顶部画状态栏(slim ~20-40px),内容:时钟 / 电量 / WiFi / 蓝牙 / 音量(与 launcher 一致)。
|
||||
- `meow_ui_flush()` 上屏前,SDK 自动在顶部画状态栏(**28px**,`meow_ui_statusbar_height()` 即此值;用户定 40→28,栏内字号 20),内容:时钟 / 电量 / WiFi / 蓝牙 / 音量(与 launcher 一致)。
|
||||
- 状态栏数据由 SDK 内置读取器周期刷新(~1s 轻刷,读 `/sys/class/power_supply/*`、WiFi 状态、时钟、音量寄存器——与 launcher 同一批 source)。
|
||||
- **z 顺序**:状态栏是最顶层。APP 内容需 `meow_ui_statusbar_height()` 下移(inset),否则被状态栏盖住(有状态栏 OS 的通用做法)。
|
||||
- **全屏(fullscreen)**:`meow_ui_set_fullscreen(1)` 或 app.json `fullscreen:1` → 隐藏状态栏 + 隐藏返回键(沉浸);退出全屏恢复。
|
||||
- **全屏**:运行时 `meow_ui_set_fullscreen(1)` 控制 → 隐藏状态栏 + 隐藏返回键(沉浸);退出恢复。**注**:app.json `fullscreen` 字段未在解析器读取(已定未做 [源:审计 2026-08-30]),故不能经 app.json 声明全屏。
|
||||
|
||||
**与 launcher 统一(A+C)**:launcher 迁移到 SDK 后,其状态栏(现私有 `draw_statusbar()`)改走 SDK 这一套,全局统一、单点一致。
|
||||
|
||||
@@ -307,17 +307,25 @@ patch_v2/meow_launcherd/meow_font.a # 复用(静态链接)
|
||||
```
|
||||
构建出 `patch_v2/sdk/meow_ui.a`;应用编译链(zig-mipsel-cc)额外链 `meow_ui.a meow_font.a libz.a -lpthread`。
|
||||
|
||||
> **构建耦合(已知设计,非缺陷)**:`build_sdk.sh` 用 `-I../meow_launcherd` 引 `meow_ipc.h`(`meow_notify_ipc.c` 复用共享协议头,同一份、杜绝两端漂移),故 SDK 编译期依赖 launcher 头、**非独立库**;**运行时无碍** —— App 只链 `meow_ui.a`(含 meow_font.o),不链入 launcher 符号,故 app 侧无 launcher 依赖。
|
||||
|
||||
**app.json 扩展字段**(向后兼容,缺省即旧行为):
|
||||
```json
|
||||
{
|
||||
"name": "Hello App",
|
||||
"exec": "...",
|
||||
"exec": "/usr/data/mnt/sd_0/MeowAPPs/os.meow.hello/hello",
|
||||
"package": "os.meow.hello", // 反域名权威 app_id;目录名=package,launcher 取之为 app_id
|
||||
"version": "0.1",
|
||||
"framework": 1, // 1=走 meow_ui(框架承载);缺省/0=裸自绘(旧)
|
||||
"immersive": 0, // 1=沉浸模式(隐藏虚拟返回键,左缘滑动返回)
|
||||
"icon": "apps/hello/icon.png" // 可选:列表图标(供图片层)
|
||||
"icon": "apps/os.meow.hello/icon.png" // 可选:列表图标(供图片层)
|
||||
}
|
||||
```
|
||||
上例 `<pkg>`=`os.meow.hello`(= `apps/<pkg>/` 目录名 = `package` 字段值);exec 即 `<挂载点>/MeowAPPs/<pkg>/<binary>`。
|
||||
|
||||
> **app 字体来源(M2.x 已落地)**:app 若**自带字库**(`load_handle`,见 §5.7.3,**未实现**)则用它;否则 SDK `meow_ui_gfx.c load_font()` **优先读 launcher 注入的环境变量** `MEOW_FONT_PNG`/`MEOW_FONT_IDX`(=系统 `font.file` 当前生效字体,绝对路径)/`MEOW_FONT_APP`(family),无 env 则回退卡默认 `MeowOS/fonts/default/font.png` → 固件。因此**app 未自带字库时跟随系统 `font.file`**,不再硬编码 `MeowAPPs/fonts`。
|
||||
>
|
||||
> **app 多字体(M2.5x,`display.multi_font`)**:launcher 注入 `MEOW_MULTI_FONT=0/1` 与 6 类 `MEOW_FONT_CLS_<类>_PNG/IDX`(命中则覆盖全局;类值为空=跟随全局不注入)。SDK `meow_ui_gfx` 的 `meow_gfx_load_multifont()` 读 env → 调 `meow_font_config_multifont()`(同 png 去重、≤4 套上限、缺类回退全局)构建**逐字符分类路由**:`meow_font_drawtext/width_text/line_height` 按 `meow_font_class_of(cp)`(`MEOW_FCLS_CJK/_CJK_SYM/_NUM/_LATIN/_LATIN_SYM/_OTHER`)用对应字库取字形与度量;`meow_font_has_glyph(cp)` 可预判缺字。`display.multi_font=0`/无 env → 单字体(现状,零额外开销)。底层接口见 meow_font.h:`meow_font_load_slot`/`meow_font_unload_slot`/`meow_font_enable_multifont`/`meow_font_set_class_slot`/`meow_font_config_multifont`;`MEOW_MAX_SLOTS=5`。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in new issue
Block a user