From 0b4d1d32150ef84a9a82921ae12dbdc120d7bf5f Mon Sep 17 00:00:00 2001 From: MeowOS Dev Date: Sun, 30 Aug 2026 11:28:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E5=BA=A7+=E8=AE=BE=E8=AE=A1=E6=96=87?= =?UTF-8?q?=E6=A1=A3(=E4=B8=89=E7=89=B9=E6=80=A7):=20meow=5Fui.h=20?= =?UTF-8?q?=E5=AD=97=E4=BD=93=E6=A1=A3/=E7=8A=B6=E6=80=81=E6=A0=8F?= =?UTF-8?q?=E6=94=B6=E5=90=88API=20+=20launcher=20fonts/fullscreen?= =?UTF-8?q?=E8=A7=A3=E6=9E=90+env=E6=B3=A8=E5=85=A5+=E9=80=9A=E7=9F=A5dump?= =?UTF-8?q?=E9=92=A9=E5=AD=90=20+=20meow=5Fui=5Fgfx.c=20=E6=94=B6=E5=90=88?= =?UTF-8?q?=E6=B8=B2=E6=9F=93+=E5=AD=97=E4=BD=93=E6=A1=A3;=20spec-ref/SYST?= =?UTF-8?q?EM=5FSETTINGS/APPS/NOTIFICATION=20=E4=B8=89=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E8=90=BD=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APPS.md | 4 +- NOTIFICATION_SYSTEM.md | 4 +- SYSTEM_SETTINGS.md | 3 + docs/MEOWOS_SPEC_REF.md | 23 +++- patch_v2/meow_launcherd/meow_launcherd | Bin 370396 -> 372844 bytes patch_v2/meow_launcherd/meow_launcherd.c | 117 +++++++++++++++++--- patch_v2/sdk/meow_ui.h | 39 +++++++ patch_v2/sdk/meow_ui_gfx.c | 132 ++++++++++++++++++++++- 8 files changed, 297 insertions(+), 25 deletions(-) diff --git a/APPS.md b/APPS.md index ea8b881..2bede4d 100644 --- a/APPS.md +++ b/APPS.md @@ -68,10 +68,12 @@ | `exec` | ✓ | 应用可执行文件绝对路径(必须是**静态** MIPS32r2 ELF,soft/hard-float 均可) | | `package` | — | 反域名权威标识(如 `os.meow.hello`),launcher 取之为 app_id;**目录名=package**。缺省回退目录名 `de->d_name`;两者存在且不同 → WARN | | `version` / `author` | — | 保留字段,v2 不解析 | +| `fullscreen` | — | app 级全屏:`1`=进入全屏(状态栏**收合至提示线** + **保留左缘返回/顶部提示线/下滑通知中心**,见 MEOWOS_SPEC_REF §5.1);activity 级用它 `route..fullscreen`。**app.json `fullscreen` 字段此前未解析/已定未做 → 本次实现**(launcher 启动/切 activity 据声明预设 SDK 全屏,env `MEOW_FULLSCREEN`)[源:用户 2026-08-30] | +| `fonts` | — | 字库档位声明:`"full"` / `"gbk"` / `"common"`(app 需大字库时可声明 `"full"`,默认小字库 `common`≈4k;launcher 据此为该 app 加载大字库 `gbk`≈20k)。**注意**:与 `"fonts":[""]`(应用自带字库句柄数组)**同名二义**,见 MEOWOS_SPEC_REF §7 A-14 [源:用户 2026-08-30] | - 目录扫描深度 1 级:只枚举 `MeowAPPs/` 下的直接子目录 - 应用计数上限 **8**(超出忽略;单屏 8 行) -- app.json 解析器极简(launcher 内实现):仅匹配 `"name":`、`"exec":`、`"package":` 后的引号字符串(及扩展 icon/framework/immersive/route./`awake.`(keep_awake)/service.),不做 JSON 校验(多行/单行均可)[源:审计 2026-08-30] +- app.json 解析器极简(launcher 内实现):仅匹配 `"name":`、`"exec":`、`"package":` 后的引号字符串(及扩展 icon/framework/immersive/route./`awake.`(keep_awake)/service.),**`fullscreen`(本次实现)与 `fonts`(档位串) 已解析**,不做 JSON 校验(多行/单行均可)[源:审计 2026-08-30][源:用户 2026-08-30] - 列表刷新时机:每次菜单打开时重新扫描(TF 卡热插拔后立即可见) ### 2.2 边界情况行为(launcher 实现,全部真机验证) diff --git a/NOTIFICATION_SYSTEM.md b/NOTIFICATION_SYSTEM.md index 4400910..311c8cf 100644 --- a/NOTIFICATION_SYSTEM.md +++ b/NOTIFICATION_SYSTEM.md @@ -36,7 +36,7 @@ target_activity(可选, 来自 hints) / progress(可选 int) ## 5. 存储分层(用户已定 2026-08-29) - **关键配置优先板载**:设置类(notify.* 配额等)存板载 `/usr/data/meow/settings.conf`(B2a),确保**无卡时系统正常工作**。 - **实时通知 → 本地内存**(板载,动态分配/ring)。 -- **超时/转储 → TF 卡** `MeowOS/notifications/`(**系统约定:系统文件统一放 MeowOS/ 下**,非 MeowData/——MeowData 是应用专属数据根)(转储区,如 notifications/.json 或 appended 日志)。 +- **超时/转储 → TF 卡** `MeowOS/notifications/`(**系统约定:系统文件统一放 MeowOS/ 下**,非 MeowData/——MeowData 是应用专属数据根)(转储区,**appended 日志行 CSV**,见 §8)。 - **无 TF 卡可运行**(本地内存态即可,不依赖卡;TF 卡在时才转储)。转储/日志类是可降级数据(无卡用 /tmp 回退),配置类永远板载。 - **本地数据清理策略**: - 关机/重启前 → 清理本地内存通知数据(正常关机路径)。 @@ -60,6 +60,8 @@ target_activity(可选, 来自 hints) / progress(可选 int) - **正常电源事件(关机/重启)触发清除板载通知数据之前**:先转储所有未上卡的通知,再清除板载。 - **异常关机**:开机时清理板载残留通知数据。 - TF 卡转储区 `MeowOS/notifications/`:保留**最新 10MB**(ring/截断),**不被电源事件清理**(持久留存)。 +- **转储格式(定案 #6,M2.5x)**:`MeowOS/notifications/` 写为 **appended 日志行**(每条通知一行,CSV 风格:`id,app_id,分类,标题,时间,…`),**按总大小滚动截断**(保留最新 **10MB**)。与既有「10s 转储」衔接:创建 10s 后即按此格式追加一行 `[源:用户 2026-08-30]`。 +- **启动时清板载 + 清内存通知表**:开机(含异常关机后)清理板载残留通知数据,并**清空内存通知表**(在既有「异常关机:开机时清理板载残留」基础上**补充内存表一并清**);正常关机/重启前先转储未上卡通知再清板载(沿用既有规则)`[源:用户 2026-08-30]`。 - **无 TF 卡**:系统可运行(内存态通知即可),不依赖卡。 ## 9. 通知中心 UI(阶段 B) diff --git a/SYSTEM_SETTINGS.md b/SYSTEM_SETTINGS.md index 1a9e3bf..82df6dd 100644 --- a/SYSTEM_SETTINGS.md +++ b/SYSTEM_SETTINGS.md @@ -42,6 +42,7 @@ | | `font.class_latin` | path | *(空=跟全局)* | 多字体:A-Za-z 所用字体 | | | `font.class_latin_sym` | path | *(空=跟全局)* | 多字体:半角标点 所用字体 | | | `font.class_other` | path | *(空=跟全局)* | 多字体:其他字符 所用字体 | +| | `font.load_full` | int 0/1 | 0 | **加载大字库(M2.5x)**:1=**强制全系统用大字库(`gbk`≈20k 档)**,覆盖 app 未声明/覆盖默认 `font.file`;0=默认小字库(`common`≈4k),仅 app 声明 `fonts:"full"` 才大字库 [源:用户 2026-08-30] | | | `font.size.title` / `font.size.body` | int | 28/20 | 标题/正文字号 | | | `ui.style` | enum | `md3` | `md3`(Material You)/`miui` | | **通知** | `notify.center_enabled` | bool | true | 下拉通知中心开关 | @@ -59,6 +60,8 @@ | | `network.bluetooth_enabled` | bool | false | 蓝牙开关(写 `hciconfig hci0 up/down`;默认关=少耗电) | | **系统** | `system.hostname` | string | `meowos` | 主机名(RFC1035 首标签;bootmenu 的 S89meow_svcd 开机读它 `sethostname`,缺省 `meowos`;供自研 mDNS 应答器 `meow_mdns` 公布 `.local`)[源:M2.54] | +> **字体尺寸标记(M2.5x,随「加载大字库」一起落地)**:字体/主题选择器**每个字体选项标注字库大小标记**,如 `default(common≈4k)` / `gbk≈20k` / `full`,直观标注码位/体积量级,让用户知道所选字库大小。对应 `MeowOS/fonts//font.json` 的 `charset`(`common|gbk|full`)+ `glyph_count`;档位枚举 `MEOW_FONT_TIER_COMMON`(默认/≈4k)/`GBK`(大/≈20k)/`FULL`(全/可选);`gen_font.py --charset common|gbk|full` 按档生成。定案见 MEOWOS_SPEC_REF §5.2「字体档位/大字库」与 §5.7.8 [源:用户 2026-08-30]。 + > 新增设置项时:在清单加一行 + 存储 schema + API 常量/枚举 + 实体 UI 控件 + web 面板控件(四端同步)。 ## 2. 统一存储(单一数据源) diff --git a/docs/MEOWOS_SPEC_REF.md b/docs/MEOWOS_SPEC_REF.md index bb73160..ac932c8 100644 --- a/docs/MEOWOS_SPEC_REF.md +++ b/docs/MEOWOS_SPEC_REF.md @@ -96,6 +96,7 @@ - 控件:`meow_list_source = int (*)(int idx,char *label,int len,void *ctx)`([D2] 定案)`[meow_ui.h]` - 刷新率:`meow_ui_set_refresh_rate(60/30/15)`/`meow_ui_set_refresh_always_max(1)`/`meow_ui_effective_rate()`/`meow_ui_frames_presented()` `[meow_ui.h §7.1]` - 状态栏:`meow_ui_set_statusbar(1/0)`/`meow_ui_statusbar_height()`(非全屏=28,全屏=0)/`meow_ui_set_fullscreen(on)`;状态栏高 **MUI_SBAR_H=28**(用户定 40→28,字号随之为 20)`[MIGRATION_AC §11.1][meow_ui.h]` +- 全屏/状态栏收合(M2.5x):launcher 启动 app/切 activity 据 `app.json fullscreen`/`route..fullscreen` 预先设 SDK 全屏(env **`MEOW_FULLSCREEN`** 注入);进入全屏 = 状态栏**向上收出屏顶、只留一条提示线**(新增 `meow_ui_statusbar_collapsed()` 语义,区分「**收合=状态栏缩为提示线**」vs「**隐藏=高度0**」),带自然过渡动画;全屏下**保留左缘返回手势 + 顶部提示线,顶部下滑仍开通知中心(顶部热区缩小)** `[源:用户 2026-08-30]` - 日志:`MEOW_LOG_DEBUG=0/INFO/WARN/ERROR`;`meow_log(lvl,fmt,...)`/`meow_log_set_level`/`meow_log_get_level` `[meow_ui.h §9]` - 通知:见 §4。 @@ -144,6 +145,7 @@ - **左缘返回手势**:手指从**屏幕左缘 ≤24px** 向内(右)划 **≥90px**,**抬手(release 边沿)才触发** `MEOW_SWIPE_LEFT`("左滑=返回"契约);过程以 `on_swipe_progress` 实时上报 + SDK 自动画顶部进度条 `meow_ui_swipe_hint(x)`(5px 高,top,theme accent 色);x<=0 清条。**中部左/右滑不是返回**(中部右滑→SWIPE_RIGHT,中部左滑→落 TAP)`[MEOW_APP_SDK §6][GESTURE_BACK §2.2/§3]` - 偏差:原「左缘+向左 mdx<-90」物理不可达 → 取「左缘向内(右)划 ≥90px」,事件仍报 `MEOW_SWIPE_LEFT` `[GESTURE_BACK §3]` - **全局状态栏**:SDK 内置,默认显示(时钟/电量/WiFi/蓝牙/音量),1s 轻刷,z 最顶;仅 APP 声明全屏/`fullscreen:1` 才隐藏;非全屏 APP 须用 `meow_ui_statusbar_height()` 做 inset `[meow_ui.h §3.1][MIGRATION_AC §3]` +- **全屏机制(M2.5x,`app.json fullscreen` 即 app 级 + `route..fullscreen` 即 activity 级)**:launcher 启动 app/切 activity 时据声明**预先设 SDK 全屏**(env `MEOW_FULLSCREEN`)。进入/退出全屏:**状态栏向上收出屏顶、只留一条提示线高度**(非全隐藏),带上收/恢复的**自然过渡动画**。**全屏下保留**:左缘返回手势 + 顶部动态伸缩提示线;顶部下滑仍可展开通知中心,但**顶部热区缩小**(不影响全屏 app)`[源:用户 2026-08-30]`(细化既有「全屏=隐藏状态栏/隐藏返回键」的表述,见 §7 A-13) - 沉浸:`app.json immersive:1` → launcher 写 `/tmp/meowapp_state=1` → 隐藏虚拟返回键,手势归 SDK `[APPS §3.5][GESTURE_BACK §2.4]` ### 5.2 主题 @@ -152,17 +154,24 @@ - 主界面背景:深色用 background(可选色)、浅色用 surface(白) `[DEV_NOTES #13]` - **TF 卡多字体库(M2.5x)**: - 目录 **`<卡根>/MeowOS/fonts//`**(每套一个子目录),内含三件套:`font.png`(预渲染灰度 PNG,bit depth 4|8)+ `font.idx`(MFNI v2 索引),二者均由 `font/gen/gen_font.py` 生成;`font.json` 为元数据+完整性校验。**缺任一件 → 该套不进列表 + 日志**。 - - **font.json schema(定版)**:`family`(同目录名,信息用)/`name`(下拉显示名,缺则回退目录名)/`glyph_count`(信息用)/`size_list`(信息用)/`bit_depth`(4|8,信息用)/`sha256_png`(font.png 的 sha256 低 64hex)/`sha256_idx`(font.idx 的 sha256)/`source`(可选)/`license`(可选)。校验失败**仅 WARN 不硬失败**(该套仍可选);缺 font.json 或解析不出 `name` → 跳过。 + - **font.json schema(定版)**:`family`(同目录名,信息用)/`name`(下拉显示名,缺则回退目录名)/`glyph_count`(信息用)/`charset`(`common|gbk|full`,字库档位,信息用+驱动按需加载,见「字体档位/大字库」)/`size_list`(信息用)/`bit_depth`(4|8,信息用)/`sha256_png`(font.png 的 sha256 低 64hex)/`sha256_idx`(font.idx 的 sha256)/`source`(可选)/`license`(可选)。校验失败**仅 WARN 不硬失败**(该套仍可选);缺 font.json 或解析不出 `name` → 跳过。 - **加载优先级**:`font.file`(设置键,默认 `MeowOS/fonts/default/font.png`)指向的字体**存在且能 load → 用它**;否则回退卡默认 `MeowOS/fonts/default/font.png` → 固件 `/usr/share/meowos/font/font.png`。相对路径按卡根 `/usr/data/mnt/sd_0/` 解析。全失败 → 字库不可用,`ui_draw` 回退 5x7 点阵(系统不死)。 - **默认字库目录**:默认字体统一放 **`<卡根>/MeowOS/fonts/default/`**(`font.png`+`font.idx`,可选 `font.json`),不再用 `MeowAPPs/fonts/font.png`;设备旧 `MeowAPPs/fonts/` **保留**(勿删,避免破坏老约定/已有文件),仅新引用一律指向 `MeowOS/fonts/default`。 - **`font.file` 变更即 unload+reload 生效**(设置页回调);拔卡 → 回退固件内置。 - **preset 动态化**:启动/进设置页扫描一次 `MeowOS/fonts/*/`,重建「字体文件」下拉(默认字体 + ≤16 套卡内字体;上限防爆)。扫描仅此二时机,勿放热路径。 - **MeowPanel 预留**:`meow_font_import_zip()`/`meow_font_export_zip()` 为 TODO 声明(不实现),供 MeowPanel 后续接入(`.zip` 导入校验→解压到 `MeowOS/fonts//`、导出打包)。 - **多字体(M2.5x,`display.multi_font`)**:按字符类别(CJK/CJK_SYM/NUM/LATIN/LATIN_SYM/OTHER)逐字符路由,每类可各选一套字库(`font.class_*`,默认空=跟随全局 `font.file`);同 family 去重、同时装载不同字体 ≤4 套(超出 WARN「过多不同字体会增内存」并截断);开关关 = 单字体(现状)。详见 §5.7.7「多字体」。 + - **字体档位 / 大字库(M2.5x)**:抽象出**字库大小档位**,让系统/应用/设置页都知道选的是多大字库 `[源:用户 2026-08-30]`。 + - 档位枚举:`MEOW_FONT_TIER_COMMON`(**默认 / ≈4k** 码位)/ `MEOW_FONT_TIER_GBK`(**大 / ≈20k+**)/ `MEOW_FONT_TIER_FULL`(**全 / 可选**,码位/体积最大)。 + - `font/gen/gen_font.py` 增 `--charset common|gbk|full` 按档生成 `font.png/font.idx`(现行仅 `--extra` 思路升级为**档位选择**,**本次新增**);每个 `MeowOS/fonts//font.json` 标 `charset` + `glyph_count`(覆盖声明/信息用)。 + - **默认用小字库(`common`≈4k)**;仅当 app 声明需大字库(`app.json "fonts":"full"` 或档位)才为该 app 加载大字库(`gbk`≈20k+),见 §5.7.8。 + - **系统设置「加载大字库」开关**(`font.load_full`,强制全系统用大字库),见 SYSTEM_SETTINGS §1;**每个字体选项标注字库大小标记**(如 `default(common≈4k)` / `gbk≈20k` / `full`),让用户知道所选字库量级。 + - 判缺字:SDK `meow_font_has_glyph(cp)` 预判当前字库是否含该码位(缺字 → app 回退/提示)。 ### 5.3 通知配额/转储 - **每 App 最多 4 类型;每类型活动 ≤4;媒体单例(每 App 仅 1 条,可多 App)**;系统事件抽象为 App(`app_id=system`) 走同一配额 `[NOTIFICATION_SYSTEM §7][meow_ui.h][DEV_NOTES #11]` - 通知创建 **10s 后自动转储到 TF `MeowOS/notifications/`**(保留最新 10MB ring,不被电源事件清);正常关机先转储再清板载;无卡可运行 `[NOTIFICATION_SYSTEM §8]` +- **通知 TF 转储(定案 #6,M2.5x)**:转储格式 = **appended 日志行**(每条通知一行,CSV 风格:`id,app_id,分类,标题,时间,…`)+ **按总大小滚动截断**(保留最新 **10MB**)。**启动时清板载通知 + 清内存通知表**(开机清残留/内存表);正常关机/重启前**先转储未上卡通知**再清板载(沿用既有规则)`[源:用户 2026-08-30]` ### 5.4 配置版本单点 / 刷新率 / 息屏 - /etc/meowos_version 版本单点(见 §1.1)`[DEV_NOTES #4]` @@ -175,7 +184,7 @@ - `/` = 程序主体+app.json+资源;`MeowData//{data,cache}` = 数据;首次启动自动建 data/cache 并经 env 注入,exFAT 无软链 `[APPS 附录 §1/§2]` - `.mpk` = tar.gz(app.json + meow 二进制 + 资源),**不含 data/cache**;导入校验 app.json/哈希→解压→数据 init→登入列表 `[APPS 附录 §3]` - 包管理 **CLI `nyai`**(静态 MIPS,部署 `MeowOS/opt/bin/nyai`):install/remove/list/info/search/index/export/upgrade/scan;源 `MeowOS/opt/nyai/sources.list`;索引 `Packages`(Package/Version/Filename/Size/SHA256/Depends/Description)`[APPS 附录 §5]` -- 应用数上限 **8**(单屏 8 行);扫描深度 1 级;`app.json` 字段:name(仅 ASCII)/exec(静态 MIPS32r2 ELF)/version/author + **`package`(反域名权威 app_id;==目录名;缺省回退目录名)** + 扩展 `framework`/`immersive`/`icon`/`route.`/`awake.`(keep_awake)/`service.`/`fullscreen`(**未解析**,见矛盾 §A-12) `[APPS §2][MEOW_APP_SDK §9][FRAMEWORK_DESIGN §2][源:审计 2026-08-30]` +- 应用数上限 **8**(单屏 8 行);扫描深度 1 级;`app.json` 字段:name(仅 ASCII)/exec(静态 MIPS32r2 ELF)/version/author + **`package`(反域名权威 app_id;==目录名;缺省回退目录名)** + 扩展 `framework`/`immersive`/`icon`/`route.`/`awake.`(keep_awake)/`service.`/`fullscreen`(app 级;`route..fullscreen`=activity 级;**本次实现**:launcher 启动/切 activity 据声明预设 SDK 全屏,见 §5.1/§3.1/§A-12)/`fonts`(字体档位 `"full"|"gbk"|"common"`,需大字库时声明,见 §5.7.8) `[APPS §2][MEOW_APP_SDK §9][FRAMEWORK_DESIGN §2][源:审计 2026-08-30][源:用户 2026-08-30]` ### 5.6 冷启动充电屏 - 触发(**三者同时**):冷启动(`poweroff` 写 `/data/meow_cold_boot=1`;`reboot` 写 0)+ 在充电(AC online=1 或 battery status=Charging)+(开机瞬间一次性快照,判定后不回头)`[CHARGING_SCREEN §0]` @@ -287,6 +296,12 @@ - **launcher env 注入**(launch_app,app 跟随系统字体):`MEOW_MULTI_FONT=0/1`;`MEOW_FONT_PNG/IDX`(全局,保留);6 类 `MEOW_FONT_CLS_<类>_PNG/IDX`(命中则覆盖全局;类值为空=跟随全局不注入)。SDK `meow_ui_gfx` 读 env 构建同一映射;无 env/关 → 单字体。 - **持久化**:类别字体设置在 settings.conf(板载,无卡也可存),经 `meow_settings_*` 读写,随设置页变更即重配。 - **内存**(推断解码 atlas = `plane_w×plane_h×(depth 4→0.5 / 8→1.0)` 字节;每套另加 glyph 数组 ≈ glyph_count×16B、idx 头保留约 128KB,idx 原始缓冲载毕即释)。实测仓库字库(depth 4):misans(CJK)≈2.44MiB、source_han_sans(CJK)≈2.53MiB、meslo(Latin)≈1.68MiB、google_sans(Latin)≈1.12MiB;按用户估算口径(**depth 8**):CJK ≈ 5-6MB、Latin ≈ 0.3-0.5MB(后者为窄覆盖 Latin 专库)。**典型「1CJK+1Latin」增量**:全局=CJK,另加一套 Latin → 增加 ≈0.3-1.7MB(depth 8 约 0.5MB;实测 depth4 latin 1.1-1.7MB);全局=Latin 另加一套 CJK → 增加 ≈2.4-2.5MB(depth 8 约 5-6MB)。`display.multi_font=0` 时仅全局一套,无任何额外装载。 +- **5.7.8 字体档位分层 / 按需大字库(app 声明 + 系统开关)** `[源:用户 2026-08-30]` + - **口径**:默认用**小字库 `common`(≈4k 码位)**;当 app 声明需要**大字库**(如小说阅读器,`app.json` 声明 `"fonts":"full"` 或档位 `"gbk"`/`"common"`)时,才为该 app 加载**大字库 `gbk`(≈20k+)**。档位与 `gen_font.py --charset`、`font.json charset/glyph_count` 见 §5.2「字体档位/大字库」。 + - **app 级 / activity 级**:app 级以 `app.json "fonts":""` 声明;activity 级(如需)以 `route..fonts` 声明(沿用 `route.` 扩展口径)。launcher 启动 app/切 activity 时据声明选加载大/小字库,并经 env 注入(`MEOW_FONT_PNG/IDX` 指向所选档位字库;新增 `MEOW_FONT_TIER` 标注档位)。 + - **系统设置「加载大字库」**(`font.load_full`,默认 0):开 → **强制全系统用大字库(gbk 档)**,覆盖 app 未声明 + 覆盖默认 `font.file`;关(默认)→ 默认小字库,app 声明才大字库。 + - **SDK 判缺字**:`meow_font_has_glyph(cp)` 预判当前字库是否含该码位 → app 据此决定回退/提示(避免 `common` 小字库下静默豆腐或缺字)。 + - **⚠️ 与 §5.7.3 冲突**:§5.7.3 `"fonts":[…]` 为**应用自带字库句柄数组**;本小节 `"fonts":"full"` 为**字库档位字符串**。同名键两种语义,需统一解析口径(见 §7 A-14)。 --- @@ -310,5 +325,7 @@ - **A-9 SDK 通知转储**:NOTIFICATION_SYSTEM §8「创建 10s 后自动转储到 TF」;meow_ui.h 现仅「活动表+meow_log 打日志,真实投递 UI/D-Bus 为后续」。→ 10s 转储/TF 尚未实现,属"已定未做"。 - **A-10 版本来源细解**:DEV_NOTES #4「/etc/meowos_version 唯一来源;MEOWOS_VERSION 宏仅 dev 占位永不动」;APPS.md §4.6「MEOWOS_VERSION 宏=单一来源,build 时 sed 写入 etc/meowos_version」。→ 两者都强调"写入同源",但"谁是源头"措辞矛盾;实践上 build 脚本 echo 生成 /etc/meowos_version,宏作屏显 dev 占位。 - **A-11 `MeowOS/opt/` vs `MeowOpt/`**:§1.2 树中 `MeowOS/opt/{bin,nyai,sources.list},lib/,tools/`(nyai 包管 + 工具)与新增顶层 `MeowOpt/`(板载外部工具/二进制,如 mdnsd)并存,命名仅大小写之差、语义可能重叠。→ **两者是否为同一用途/是否需归并待确认**;当前按各自文档记录,勿混用。 -- **A-12 `fullscreen` 字段未解析**:§5.5 与 MEOW_APP_SDK §9 将 `fullscreen` 列为 app.json 字段,但 `meow_parse_app_json()` **并未读取该键**(实现只解析 name/exec/icon/package/framework/immersive/route./awake./service.)。→ 文档与实现不一致,属"已定未做";若要用需在解析器补读并处理。 +- **A-12 `fullscreen` 字段(已定 → 本次实现)**:§5.5 与 MEOW_APP_SDK §9 将 `fullscreen` 列为 app.json 字段,但 `meow_parse_app_json()` **此前并未读取该键**(实现只解析 name/exec/icon/package/framework/immersive/route./awake./service.),属"已定未做"。→ **本次实现**:launcher 启动 app/切 activity 据 `app.json fullscreen`/`route..fullscreen` 预设 SDK 全屏(env `MEOW_FULLSCREEN`),见 §5.1/§3.1。注意全屏语义由「隐藏状态栏+隐藏返回键」细化为「状态栏收合至提示线 + 保留左缘返回+顶部提示线+下滑通知中心(热区缩小)」(见 A-13)。 +- **A-13 全屏语义细化(状态栏「隐藏」→「收合至提示线」)**:既有 §3.1/§5.1 描述全屏=隐藏状态栏(`meow_ui_statusbar_height()`=0、隐藏返回键=沉浸);本次定案细化为**进入/退出全屏:状态栏向上收出屏顶、只留一条提示线高度**,**全屏下保留**左缘返回手势 + 顶部动态伸缩提示线,且**顶部下滑仍可开通知中心(顶部热区缩小)**。→ 需在 SDK 端明确「收合(collapsed)」状态(新增 `meow_ui_statusbar_collapsed()` 等)与「隐藏」的差异,UI 依此绘制提示线。 +- **A-14 `fonts` 键二义**:§5.7.3 `"fonts":[…]`=应用自带字库句柄数组;§5.2/§5.7.8 `"fonts":"full"|"gbk"|"common"`=字库档位字符串。→ 同名键两种语义,解析器需区分(字符串→档位 / 数组→句柄);若避免歧义可改用专键如 `"font_tier"`(**未拍板**)。 `[各源标注见上]` diff --git a/patch_v2/meow_launcherd/meow_launcherd b/patch_v2/meow_launcherd/meow_launcherd index 38b999536177cd0dbe0ba6f77d591b6f63ca475f..5edf8f0d3fc8f1762d6943693b81dd5e2a993028 100755 GIT binary patch delta 114266 zcmce9eOz3{_4mx(yRf_jmxKTzNOs9xK!QjT5>eNL@%Z>SrVeC$dW)3)Ff_fs%X)sEmpMD5=&cZQL&{J73KM!x%a{*+WvmeKhMqQ z<~wud?aY}oXI}3z_;&2*P;6s-xaT4h%VvzlbUdEC((Sp3GkRrE7~}ZIgr8#3J8?vN z&B5WanR#T3c#BPp4Zmq(A$oWyuo~gja;SKTOnDn`;h(F@N-Ug}SR{HwS>!B+_wkRn z-5A(xVeL`;P;hW$y3#h`)8t^?N%xJAE%_bMRiWkF)pjK8N?`c<;gc7~UV?9q@D3 zhW9nRRe0<1mf+3wadzW2&hEtf%u~n%_@v5NRFm0x>Fh6%G6E%R!W+@W*|mGS);XU) z-&FK0Z(3YtZ_2ta!}QP|&Fz7^LZ=_UPc|)iMx#&MmmyWOHGO+ua>&yUbC%N9bou?O zLyxt9hv#_H-V5e8Wl14Tf%^;jk*4UHMW&V@YH3Xkf3xWiHL3jbCi4S3O=UA-=5vwR ziKe$7xPm|1bozs-d|%T=`2VS<+aLUK!o$xP3P8=JJ=tLvHfCx1_Q56Y*NBzhLU#X;8GiYY))N0yhE26vYyD60=Aa^XLnacc zW@Sy8o>is|dh;}UGE6_35o^f3sLP6urcXVWoA&I~TCjAJZ2A~2YqV9}rVMF(Pt%8+ zlA8uLW$@dY%ny0be*=ni=^oDPkk>sZ?x)D7AJzC%GiTjUC==@bFVK46{v5O~yEz-h zyXGKg`?`Mp(9v1u+i$+($9Hr!Hhy4{*WYpb?M=5nwJ$XDmU}8H?q1&&vn|8SZ|QRG z{By{xyYIcb>gL-s%kQ|mYUA3jq-Ux_qAt7WitBD#b;adHHx*rS(N$er+N0&jU|N%} z^L#zhH3bD%UwG9;7j^xPggVs5ep1p&muOhk6zD zAnIAvi>P-|Px5>!vq-!Zc&qTneA@Iu-!1Nk+c;DAL#C+rV!W5&jedkP1z3*`M`49g zurF3K8^K$Kw|Tai)tnBSlw@XA3qZ4(nJpSLyvOkN#Qp zvYEBxWymMSVLpo`f_OZ|%qBsQ5viC0&NQ>iMP?QWteJx35idlO-XG zLY9RrjJ4Fvy4NBua1?JvBbimk8o)d~Q{sQ^zk{e0J#WHF(Gwg7yCHPYzf%jN@S{+i zrk`?__n1b@Imq2aXPzr(BEiUrgv$=j(2hcTUajNo$B#n05dZd|Fp&ZNgAo$x{uor? zIbP0cprJ5UBJ7=@u(zR^ch=@{=GM6}GTo_-7b4#ZG$}pb7nXuB3Vp-Z^lN!eZo|nj zXPAe4bQxarJ#2rjhh2KG>4Q%a_@A2o^~s{Jo6!(3fXvji_p`VgPv}t!zbE;#s>THM zwNsycdb*Y0lkO=!Y{kK*9iJwgW7ID=3$m<~>BYOhn>CFkL_N~<`KNQj$Z*d1XndLR z(MU7nqcLa3N2AY-kE|9wFEl;%+5BbaeGk(xWTF{EbX}y_evB@u&|w%hO#$A?fM<572k_EXMaJ#{|D zp~&N({r(2%iyrv^jzO;`rFw2d1N$CeK4A8Wu#yP{f`~OrMKUf#-`}2 z5>(GOvaFUqW0t#0KQ9Y+7EE&XeQ&!?A2&-PymYUbx%Qcv4;TZi0zUCLpW}85DUxtyP1`Ia`Kxqdb0o2aPr&!s>SL2*v#twqWOtt(1{kDZgkWQ6NSi!@Wuxf zVATun3!)JNt%#@a5GLb|$2);p-}n%0D%?)I$D|OJFNd&z31N5(@otBI6mJGzmpO#B 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 P-g=jkUe!;Yrq%xk8aeIs delta 112422 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 的大字库(GBK/Full)绝对路径由后续 font 代理据此演进填充(约定 MeowOS/fonts// + * /…,或 settings 键 font.tier_gbk / font.tier_full —— 见 MEOW_APP_SDK.md 字体分层)。 + * 未实现前暂回退全局字体。返回 0 成功,-1 无可用。 */ +static int meow_font_effective_paths_tiered(int tier, char *out_png, int plen, + char *out_idx, int ilen, char *out_family, int flen) +{ + if (tier == MEOW_FONT_TIER_COMMON || tier < MEOW_FONT_TIER_COMMON) + return meow_font_effective_paths(out_png, plen, out_idx, ilen, out_family, flen); + /* TODO(font 代理):按 tier 解析大字库绝对路径(GBK/Full);暂回退全局(tier0)。 */ + return meow_font_effective_paths(out_png, plen, out_idx, ilen, out_family, flen); +} + /* M2.5x 多字体:从 settings 读 display.multi_font + 6 类 font.class_*,把各自相对路径按卡根 * 解析为绝对路径,去重装载到 meow_font 槽位(同 family 去重 & ≤4 套上限由 * meow_font_config_multifont 统一处理)。仅当全局字库已装载(mfont_ready / slot0)时生效; @@ -1308,6 +1322,7 @@ struct meow_route { char act[16]; /* route 键后缀,如 "nowplaying" */ char chain[MEOW_CHAIN_MAX]; /* 如 "home;search;nowplaying" */ int keep_awake; /* M2.17:该 activity 常亮(app.json awake.=1 / route..keep_awake=1) */ + int fullscreen; /* 活动级全屏声名(app.json route..fullscreen=1;M3 活动切换时消费) */ }; /* 服务行:service.=mode:restart:max:window_ms(M1 仅解析存储,M4 保活) */ @@ -1328,6 +1343,8 @@ struct app { /* ---- 阶段 D · M1:app.json 路由/框架/服务/图标(scan_apps 解析)---- */ char framework; /* '1'=framework=true(看门狗返回发 SIGUSR1) */ char immersive; /* '1'=immersive=true(隐藏虚拟返回键,返回手势归 SDK) */ + char fullscreen; /* '1'=app.json fullscreen=true(注入 MEOW_FULLSCREEN=1,SDK 预先设全屏) */ + char fonts; /* 字库档:0=默认4K常用 1=大字库GBK 2=Full(app.json "fonts";注入 MEOW_FONT_TIER) */ char icon[129]; /* icon= 路径 */ int nroute; /* route. 行数 */ struct meow_route routes[MEOW_MAX_ROUTES]; @@ -1805,6 +1822,8 @@ static void meow_parse_app_json(FILE *f, struct app *a) char name[17] = "", exec[129] = "", icon[129] = ""; char package[MEOW_APP_ID_MAX] = ""; int fram = 0, immersive = 0; + int fullscreen = 0; /* app.json fullscreen=(注入 MEOW_FULLSCREEN env,SDK 预先设全屏) */ + int fonts = 0, fonts_set = 0; /* app.json "fonts":<档>(0=默认4K常用 1=大字库GBK 2=Full;缺省 0) */ struct app tmp; memset(&tmp, 0, sizeof tmp); while (fgets(buf, sizeof buf, f)) { @@ -1816,8 +1835,8 @@ static void meow_parse_app_json(FILE *f, struct app *a) char *rp = strstr(buf, "route."); if (rp && tmp.nroute < MEOW_MAX_ROUTES) { rp += 6; /* 跳过 "route." */ - int idl = 0; char id[16] = ""; - while (*rp && *rp != '"' && *rp != ':' && *rp != '=' && idl < 15) + int idl = 0; char id[32] = ""; /* 读满整键(识别 ".fullscreen" 后缀,cap 31) */ + while (*rp && *rp != '"' && *rp != ':' && *rp != '=' && idl < 31) id[idl++] = *rp++; id[idl] = 0; if (idl > 0) { @@ -1826,16 +1845,30 @@ static void meow_parse_app_json(FILE *f, struct app *a) if (*vp == ':' || *vp == '=') vp++; while (*vp == ' ' || *vp == '\t') vp++; if (*vp == '"') vp++; - int vl = 0; char chain[MEOW_CHAIN_MAX] = ""; - while (*vp && *vp != '"' && *vp != ',' && *vp != '\n' && - *vp != '\r' && vl < MEOW_CHAIN_MAX - 1) - chain[vl++] = *vp++; - chain[vl] = 0; - while (vl > 0 && (chain[vl - 1] == ' ' || chain[vl - 1] == '\t')) - chain[--vl] = 0; - strncpy(tmp.routes[tmp.nroute].act, id, 15); - strncpy(tmp.routes[tmp.nroute].chain, chain, MEOW_CHAIN_MAX - 1); - tmp.nroute++; + /* route..fullscreen=:活动级全屏声明(M1 顺带;M3 活动切换时消费)。 + * 命中既有 route. 置 fullscreen;不新建 route(避免 id 被截断误建 "…fulls")。 */ + if (idl >= 11 && !strcmp(id + idl - 11, ".fullscreen")) { + id[idl - 11] = 0; /* 去掉 ".fullscreen" 还原 act */ + char v[8] = ""; int k = 0; + while (*vp && *vp != '"' && *vp != ',' && *vp != '\n' && + *vp != '\r' && k < 7) v[k++] = *vp++; + v[k] = 0; + int on = (!strcmp(v, "1") || !strcmp(v, "true") || !strcmp(v, "yes")); + for (int i = 0; i < tmp.nroute; i++) + if (!strcmp(tmp.routes[i].act, id)) { tmp.routes[i].fullscreen = on; break; } + } else { + int vl = 0; char chain[MEOW_CHAIN_MAX] = ""; + while (*vp && *vp != '"' && *vp != ',' && *vp != '\n' && + *vp != '\r' && vl < MEOW_CHAIN_MAX - 1) + chain[vl++] = *vp++; + chain[vl] = 0; + while (vl > 0 && (chain[vl - 1] == ' ' || chain[vl - 1] == '\t')) + chain[--vl] = 0; + strncpy(tmp.routes[tmp.nroute].act, id, 15); + tmp.routes[tmp.nroute].act[15] = 0; /* 显式收尾(原依赖 id 读长 ≤15) */ + strncpy(tmp.routes[tmp.nroute].chain, chain, MEOW_CHAIN_MAX - 1); + tmp.nroute++; + } } } /* awake.=1(M2.17 keep_awake:该 activity 常亮,超时不自动息屏)。 @@ -1881,6 +1914,29 @@ static void meow_parse_app_json(FILE *f, struct app *a) immersive = 1; } } + /* fullscreen=true(app 级:注入 MEOW_FULLSCREEN=1,SDK 端 meow_ui_init 预先设全屏)。 + * 与 immersive 是两回事:fullscreen 隐藏状态栏/沉浸,immersive 关虚拟返回键。 */ + if (!fullscreen && strstr(buf, "fullscreen")) { + char v[8] = ""; + if (json_str(buf, "fullscreen", v, sizeof v) > 0) { + if (!strcmp(v, "true") || !strcmp(v, "1") || !strcmp(v, "yes")) + fullscreen = 1; + } + } + /* "fonts":<档>(字库档:0=默认4K常用 1=大字库GBK 2=Full;可选,缺省 0)。 + * launcher 注入 MEOW_FONT_TIER;大字库装载由后续 font 代理实现。 */ + if (!fonts_set && strstr(buf, "fonts")) { + char v[8] = ""; + if (json_str(buf, "fonts", v, sizeof v) > 0) { + if (!strcmp(v, "common") || !strcmp(v, "0")) fonts = 0; + else if (!strcmp(v, "gbk") || !strcmp(v, "1")) fonts = 1; + else if (!strcmp(v, "full") || !strcmp(v, "2")) fonts = 2; + else fonts = atoi(v); /* 数字兜底(越界收敛到 [0,2]) */ + if (fonts < 0) fonts = 0; + if (fonts > 2) fonts = 2; + fonts_set = 1; + } + } /* service.=mode:restart:max:window_ms(M1 解析存储,保活 M4) */ char *sp = strstr(buf, "service."); if (sp && tmp.nsvc < MEOW_MAX_SVCS) { @@ -1911,6 +1967,8 @@ static void meow_parse_app_json(FILE *f, struct app *a) strncpy(a->package, package, sizeof a->package - 1); a->framework = fram ? '1' : 0; a->immersive = immersive ? '1' : 0; + a->fullscreen = fullscreen ? '1' : 0; /* 注入 MEOW_FULLSCREEN env */ + a->fonts = (char)(fonts < 0 ? 0 : (fonts > 2 ? 2 : fonts)); /* 注入 MEOW_FONT_TIER env */ strncpy(a->icon, icon, 128); a->nroute = tmp.nroute; if (tmp.nroute) memcpy(a->routes, tmp.routes, sizeof(a->routes[0]) * (size_t)tmp.nroute); @@ -2263,6 +2321,19 @@ static void settings_sync_cache_listener(const char *key) else if (!strcmp(key, "power.forceoff_ms")) { int v; if (meow_settings_get_int("power.forceoff_ms", &v) == 0) power_forceoff_ms = v; } } +/* ---- 通知 dump 回调占位(通知#6 转储 TF 卡;接线/占位,不做 TF 写)---- + * meow_notif 在 TTL 到点(meow_notif_tick,§8 10s)调用此回调归档一条通知,随后释放槽。 + * 基座只把回调挂上来(见 settings_load 的 meow_notif_set_dump_cb);真实 TF 落盘 + * (按 NOTIFICATION_SYSTEM.md §8 / TF_CARD_LAYOUT.md 写 <卡>/MeowOS/notify/...)由后续 + * 通知代理在回调体内实现。注意 meow_notif.c 的 archive_one 自身已 log 一行 "dump: ...", + * 故本回调保持轻量(避免重复刷屏),落盘逻辑填在下方 TODO 处。 */ +static void notif_dump_tf_placeholder(const meow_notif_t *n) +{ + (void)n; + /* TODO(通知代理, M2c):在此写 TF 卡 /notify//.json 等; + * 基座不实现,仅保留挂接点(触发时机=meow_notif_tick 内 10s 到点/止机转储)。 */ +} + /* 启动加载(M2.11/M2.24):统一由 meow_settings 后端读 settings.conf; * 此处仅注册监听(一次性)+ 把 backend 当前值同步到缓存全局。重载(应用期 * watchdog 可能改音量)等价于 meow_settings_init() + 手动同步。 */ @@ -2271,6 +2342,7 @@ static void settings_load(void) { meow_settings_init(); /* 幂等:注册默认 + 读 settings.conf */ meow_notif_init(); /* M2a:通知存储初始化(幂等,读 notify.* 配额) */ + meow_notif_set_dump_cb(notif_dump_tf_placeholder); /* 基座(通知#6):挂 dump 回调(TF 转储占位,M2c 落盘由后续代理实现) */ if (!settings_cache_registered) { meow_settings_add_listener(settings_sync_cache_listener); settings_cache_registered = 1; @@ -6732,8 +6804,10 @@ static int launch_app(struct app *a) char env_app[MEOW_APP_ID_MAX + 16], env_lvl[48]; char env_fpng[400], env_fidx[400], env_fapp[96]; char env_mf[24]; + char env_tier[24]; + char env_fs[20]; char env_cls[MEOW_FCLS_COUNT][2][400]; - char *envp[32]; /* PATH,HOME,log_dir,log_app,log_lvl,font 全局(3),多字体(1),class(≤12),data,cache */ + char *envp[40]; /* PATH,HOME,log_dir,log_app,log_lvl,font 全局(3),多字体(1),tier(1),class(≤12),fullscreen(1),data,cache */ int ne = 0; const char *cp = getenv("PATH"); snprintf(env_path, sizeof env_path, "PATH=%s", cp ? cp : "/usr/bin:/bin"); @@ -6772,8 +6846,13 @@ static int launch_app(struct app *a) meow_settings_get_bool("display.multi_font", &mf_on); snprintf(env_mf, sizeof env_mf, "MEOW_MULTI_FONT=%d", mf_on ? 1 : 0); envp[ne++] = env_mf; - have_global = (meow_font_effective_paths(fpng, sizeof fpng, fidx, sizeof fidx, - fam, sizeof fam) == 0); + /* M2.x(基座):字库档 MEOW_FONT_TIER=<0|1|2> —— 按 app.json "fonts" 声明注入; + * 0=默认4K常用(未声明/缺省),1=大字库GBK,2=Full。SDK meow_ui_gfx 读入存档, + * 真正按档装载大字库由后续 font 代理实现(见 meow_font_effective_paths_tiered)。 */ + snprintf(env_tier, sizeof env_tier, "MEOW_FONT_TIER=%d", a->fonts); + envp[ne++] = env_tier; + have_global = (meow_font_effective_paths_tiered(a->fonts, fpng, sizeof fpng, + fidx, sizeof fidx, fam, sizeof fam) == 0); if (have_global) { snprintf(env_fpng, sizeof env_fpng, "MEOW_FONT_PNG=%s", fpng); snprintf(env_fidx, sizeof env_fidx, "MEOW_FONT_IDX=%s", fidx); @@ -6801,6 +6880,14 @@ static int launch_app(struct app *a) envp[ne++] = env_cls[c][1]; } } + /* 全屏声明:app.json "fullscreen"(app 级)→ 注入 MEOW_FULLSCREEN=1,SDK 端 + * meow_ui_init 据此预先设全屏。基座只接 app 级;活动级 route..fullscreen + * (meow_route.fullscreen)在 M3 活动切换时由后续代理消费(此处暂不下发)。 + * 未声明则不注入(SDK 默认非全屏)。 */ + if (a->fullscreen) { + snprintf(env_fs, sizeof env_fs, "MEOW_FULLSCREEN=1"); + envp[ne++] = env_fs; + } char pkg[64]; if (meow_pkg_name(a->exec, pkg, sizeof pkg) == 0) { snprintf(env_data, sizeof env_data, "MEOW_DATA_DIR=/usr/data/mnt/sd_0/MeowData/%s/data", pkg); diff --git a/patch_v2/sdk/meow_ui.h b/patch_v2/sdk/meow_ui.h index bca5b25..bc17e86 100644 --- a/patch_v2/sdk/meow_ui.h +++ b/patch_v2/sdk/meow_ui.h @@ -175,6 +175,24 @@ void meow_ui_set_fullscreen(int on); * 全屏/隐藏时返回 0。 */ int meow_ui_statusbar_height(void); +/* ---- 状态栏「上收出屏只留提示线」(collapsed,草案/待定案——本批仅加声明)---- + * 供全屏调用:把状态栏内容上移出屏顶、只留一条「提示线」高度(可下拉还原)。 + * 与 meow_ui_set_fullscreen(1) 的关系:fullscreen 隐藏整条状态栏(沉浸,inset=0); + * collapsed 仍视状态栏为「激活」,左缘返回手势(SWIPE_LEFT)与顶部伸缩提示线 + * (meow_ui_swipe_hint)依旧生效,只是其内容上收、仅留提示线——用于「不完全沉浸」, + * 保留一处可下拉拉出状态栏的入口。顶部下滑热区 meow_ui_statusbar_hotzone() 在全屏时缩小。 + * 实现位置:meow_ui_gfx.c(基座让 on 生效:true→只画提示线/内容上移);逐帧过渡动画 + * (上收/恢复插值)为待定案,后续代理可经 meow_ui_statusbar_animate(ms) 补齐。 */ +void meow_ui_statusbar_set_collapsed(int on); /* on=1 上收(内容上移出屏、只留提示线);on=0 恢复 */ +int meow_ui_statusbar_collapsed(void); /* 当前是否处于「上收」目标(1=是) */ +void meow_ui_statusbar_animate(int ms); /* TBD:上收/恢复过渡时长(ms);占位,后续代理实现插值 */ + +/* 顶部下滑热区(下拉展开状态栏/通知)高度(px)。 + * 非全屏=整条状态栏可视高度;全屏时缩小到 MEOW_SBAR_HOTZONE_FS(保留一处下拉入口)。 + * 返回「可用于起始下拉」的热区高度;由输入层/后续代理据此判定下拉起点。 */ +int meow_ui_statusbar_hotzone(void); +#define MEOW_SBAR_HOTZONE_FS 4 /* 全屏时缩小后的顶部热区高度(px,草案值) */ + /* ============================================================ */ /* §7 动画/时间(B1 最小可用) */ /* ============================================================ */ @@ -309,6 +327,27 @@ int meow_notify_has_active(void); /* 1=尚有活动通知,0=无 * const char *meow_notify_urgency_str(meow_notify_urgency u); const char *meow_notify_category_str(meow_notify_category cat); +/* ============================================================ */ +/* §10 字体分层 / 大字库(草案/待定案 —— 本批仅加声明/枚举/宏,不实现) */ +/* ============================================================ */ +/* 字体「档位」概念: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 域代理据此在 meow_font.c / gen_font.py 实现大字库生成与按档装载。 + * 既有 meow_font_* 符号(class_of/has_glyph/load_slot/config_multifont…)保留不动; + * 大字库装载以 set_tier/tier 作为入口,或由后续代理按 meow_font_config_multifont 扩展。 */ +#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 定义(只存档 + 触发重载请求);真正按档装载大字库由后续 font 代理实现。 */ +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 diff --git a/patch_v2/sdk/meow_ui_gfx.c b/patch_v2/sdk/meow_ui_gfx.c index 83a6abe..c429599 100644 --- a/patch_v2/sdk/meow_ui_gfx.c +++ b/patch_v2/sdk/meow_ui_gfx.c @@ -63,6 +63,24 @@ static int g_dirty_full = 1; static char *g_dump_path = NULL; +/* ---- 状态栏「上收出屏只留提示线」(collapsed,基座)---- + * g_sbar_collapsed = 目标态(1=上收);g_sbar_collapse_h = 当前实际上收偏移 + * (0..MUI_SBAR_H:0=完全展开,MUI_SBAR_H=内容全部上移出屏、仅留提示线)。 + * 基座让 meow_ui_statusbar_set_collapsed(on) 立即生效(true→只画提示线/内容上移); + * 过渡(每帧插值)留待后续代理或经 meow_ui_statusbar_animate(ms) 启用的简易线性逼近。 */ +#define MUI_SBAR_HINT_H 6 /* 上收状态下顶部提示线高(px) */ +static int g_sbar_collapsed = 0; /* 目标:1=上收 */ +static int g_sbar_collapse_h = 0; /* 当前上收偏移(0..MUI_SBAR_H) */ +static int g_sbar_collapse_anim_ms = 0; /* 过渡时长(0=瞬切);meow_ui_statusbar_animate 设置 */ +static int g_sbar_collapse_from_h = 0; /* 本次过渡起点偏移 */ +static unsigned long long g_sbar_collapse_start_ms = 0; /* 本次过渡起始(monotonic ms) */ + +/* ---- 字体档位(MEOW_FONT_TIER,基座存档 + 公共 get/set)---- + * launcher 按 app.json "fonts":<档> 注入 MEOW_FONT_TIER=<0|1|2>;SDK 读入并以 + * meow_font_set_tier/tier 暴露。真正按档装载大字库(GBK/Full)由后续 font 代理在 + * meow_font.c / meow_gfx_load_multifont 挂钩实现——此处仅记录档位不换库。 */ +static int g_font_tier = MEOW_FONT_TIER_COMMON; + /* ---- 帧率调度(A-1/A-2:从 launcher M2.16 迁入,刷新率调度归口 SDK)---- * meow_ui_flush()/present() 的 fps 档位与自适应降档 governor。launcher 不再自带 * 一套帧率门控;launcher 与 app 统一走这里 → 全局观感/刷新率一致。 @@ -499,6 +517,71 @@ static void dump_ppm(void) fclose(f); } +/* ================= 状态栏「上收出屏只留提示线」(collapsed,基座) ================= */ +/* 每帧推进上收/恢复:向目标偏移(collapsed→MUI_SBAR_H、否则→0)线性逼近; + * 无过渡时长(g_sbar_collapse_anim_ms<=0)= 一步到位(基座默认)。动画插值骨架在此, + * 后续代理可换缓动/每帧步进。 */ +static void statusbar_collapse_step(void) +{ + int tgt = g_sbar_collapsed ? MUI_SBAR_H : 0; + if (g_sbar_collapse_h == tgt) return; + if (g_sbar_collapse_anim_ms <= 0) { g_sbar_collapse_h = tgt; return; } + unsigned long long now = now_ms(); + unsigned long long el = now - g_sbar_collapse_start_ms; + int span = g_sbar_collapse_anim_ms; + if ((int)el >= span) { g_sbar_collapse_h = tgt; return; } + int delta = tgt - g_sbar_collapse_from_h; + g_sbar_collapse_h = g_sbar_collapse_from_h + + (int)((long long)delta * (long long)el / (long long)span); +} + +/* 上收中是否需要逐帧重画(动画未达目标位置时置位,强制每帧推进)。 */ +static int statusbar_collapse_in_transition(void) +{ + int tgt = g_sbar_collapsed ? MUI_SBAR_H : 0; + return g_sbar_collapse_h != tgt; +} + +/* 上收状态栏:内容整体上移出屏(不画时钟/电量),仅在顶部画一条「提示线」。 + * 与 meow_ui_swipe_hint(左滑返回进度条,5px,动态)不同:此线是「状态栏可下拉还原」的 + * 常驻提示(主题强调色下边缘)。原状态栏整块清回主题背景,避免残影(app inset 之内)。 */ +static void statusbar_collapsed_render(int h) +{ + (void)h; + const meow_theme *th = meow_theme_get(); + int w = meow_ui_width(); + /* h 越大内容越贴顶;基座:折叠态整块清底 + 顶部提示线(提示线下缘=主题 accent) */ + meow_ui_fill_rect(0, 0, w, MUI_SBAR_H, th->bg); + meow_ui_fill_rect(0, MUI_SBAR_HINT_H - 1, w, 1, th->accent); +} + +/* ---- 公共 API(基座实现;动画插值骨架见 statusbar_collapse_step)---- */ +void meow_ui_statusbar_set_collapsed(int on) +{ + int tgt = on ? 1 : 0; + if (tgt == g_sbar_collapsed) return; + g_sbar_collapsed = tgt; + g_sbar_collapse_from_h = g_sbar_collapse_h; + g_sbar_collapse_start_ms = now_ms(); + dirty_full(); /* 顶栏显隐/上收变化 → 全帧重画 */ +} + +int meow_ui_statusbar_collapsed(void) { return g_sbar_collapsed; } + +void meow_ui_statusbar_animate(int ms) +{ + g_sbar_collapse_anim_ms = (ms > 0) ? ms : 0; /* 0=瞬切(基座默认) */ +} + +int meow_ui_statusbar_hotzone(void) +{ + /* 非全屏=整条状态栏可视;全屏时缩小到 MEOW_SBAR_HOTZONE_FS(保留一处下拉入口)。 + * 上收(collapsed、非全屏)时热区=提示线下缘高度。全屏态由 meow_ui_sys 维护。 */ + if (meow_ui_sys_statusbar_active()) + return g_sbar_collapsed ? MUI_SBAR_HINT_H : MUI_SBAR_H; + return MEOW_SBAR_HOTZONE_FS; +} + /* 顶部状态栏条是否被本次脏区触及(含整帧):触及或数据已变(force)才需要重画顶条。 */ static int statusbar_touched(void) { @@ -519,13 +602,20 @@ static void present(void) if (!g_refresh_always_max) { if (g_last_present_ms && now - g_last_present_ms < (unsigned long long)period) return; } - /* 全局状态栏(A-0):上屏前把状态栏画进 back_buf 顶部 MUI_SBAR_H 行(z 最顶)。 + /* 全局状态栏(A-0)+ 上收(collapsed)基座:上屏前把状态栏画进 back_buf 顶部 MUI_SBAR_H 行。 * 全屏/隐藏时 active()==0 不画(沉浸),app 内容可占满整屏。触发条件: - * 数据已变(1s 轻刷/显隐切换) 或 顶条被 app 内容触及(含整帧清+绘,未 inset 时被顶条覆盖)。 - * 无需每帧重画——app 局部刷新不触及顶条时,back_buf/screen 顶条保持不变,省一次 blit。 */ + * 数据已变(1s 轻刷/显隐切换) / 顶条被 app 内容触及 / 上收动画未到位(逐帧推进)。 + * 展开态仍走 meow_ui_sys_statusbar_render()(meow_ui_sys.c 不改,留给后续代理); + * 上收折叠态(collapse_h>=MUI_SBAR_H)由基座只画提示线(内容上移出屏)。 */ if (meow_ui_sys_statusbar_active() && - (meow_ui_sys_statusbar_force() || statusbar_touched())) - meow_ui_sys_statusbar_render(); + (meow_ui_sys_statusbar_force() || statusbar_touched() || + statusbar_collapse_in_transition())) { + statusbar_collapse_step(); + if (g_sbar_collapse_h >= MUI_SBAR_H) + statusbar_collapsed_render(g_sbar_collapse_h); + else + meow_ui_sys_statusbar_render(); + } if (g_fb_mem) { ioctl(g_fb_fd, FBIO_WAITFORVSYNC, 0); /* 等垂直同步 */ unsigned long long tbg = now_ms(); @@ -575,6 +665,23 @@ unsigned long long meow_ui_frames_presented(void) { return g_frames_presented; } int meow_gfx_is_device(void) { return g_fb_mem != NULL; } int meow_gfx_mfont_ready(void) { return g_mfont_ready; } +/* ---- 字体档位(公共 API,基座定义)---- + * 注意:meow_font_tier()/meow_font_set_tier() 已在 meow_ui_gfx.c 定义(符号唯一), + * 后续 font 代理勿在 meow_font.c 重复定义;可在 meow_font.c 实现「按档装载大字库」并在 + * meow_font_set_tier 的钩子处唤起(见下)。 */ +int meow_font_tier(void) { return g_font_tier; } + +int meow_font_set_tier(int tier) +{ + if (tier < MEOW_FONT_TIER_COMMON) tier = MEOW_FONT_TIER_COMMON; + if (tier > MEOW_FONT_TIER_FULL) tier = MEOW_FONT_TIER_FULL; + if (tier == g_font_tier) return g_font_tier; + g_font_tier = tier; + /* TBD(基座):真正按档装载大字库(meow_font_load_tier 或 config_multifont 扩展)由 + * 后续 font 代理在 meow_font.c 实现;此处仅记录档位 + 标记重载(下一轮 load 读 tier)。 */ + return g_font_tier; +} + /* ================= 初始化/销毁 ================= */ /* 字库加载优先级(M2.x): * 1) 环境变量 MEOW_FONT_PNG/MEOW_FONT_IDX(launcher 注入的「当前生效字体」= 系统 font.file) @@ -584,6 +691,16 @@ int meow_gfx_mfont_ready(void) { return g_mfont_ready; } * 全失败 → g_mfont_ready=0,text_draw 回退 5x7 点阵(系统不死)。 */ static int load_font(void) { + /* 字体档位(MEOW_FONT_TIER env,由 launcher 按 app.json "fonts" 注入): + * 0=默认4K常用 1=大字库GBK 2=Full。基座只读入存档 + 对齐公共 get/set; + * 真正按档装载大字库(GBK/Full 的字库路径/面)由后续 font 代理在 meow_font.c / + * meow_gfx_load_multifont 挂钩实现——此处仍先装载默认(tier0)字库,档位仅记录。 */ + const char *etr = getenv("MEOW_FONT_TIER"); + if (etr && etr[0]) { + g_font_tier = atoi(etr); + if (g_font_tier < MEOW_FONT_TIER_COMMON) g_font_tier = MEOW_FONT_TIER_COMMON; + if (g_font_tier > MEOW_FONT_TIER_FULL) g_font_tier = MEOW_FONT_TIER_FULL; + } 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; @@ -677,6 +794,11 @@ int meow_ui_init(const meow_ui_opts *opts) g_init_ok = 1; dirty_full(); meow_ui_sys_init(); /* A-0:系统状态读取器首刷(电量/WiFi/蓝牙/音量),状态栏就绪 */ + /* 全屏预置(基座):launcher 按 app.json "fullscreen" 注入 MEOW_FULLSCREEN=1,SDK 据此 + * 预先设全屏(隐藏整条状态栏/沉浸,statusbar_active()==0、statusbar_height()==0)。 + * 未注入/非"1"=非全屏(默认)。放在 sys_init 后使首帧即为全屏态。 */ + const char *efs = getenv("MEOW_FULLSCREEN"); + if (efs && efs[0] == '1') meow_ui_set_fullscreen(1); return 0; }