docs: 状态栏正确闭环 + 主题增强 §8.1 设计定案(agent-140/138)
- FRAMEWORK_DESIGN §10.2: 同一个状态栏=系统进程(launcher)统一渲染+App前台覆盖叠加(复用fb)+App进程不渲染(§6.1③)+数据源唯一→显示一致 - MEOW_APP_SDK §3.1: SDK全局状态栏仅系统进程渲染; 右侧=MD3图标+变量值(复用sb_icons.h/SB_I_*)+顶级主题(ui.style)切换换图标集; 文本式statusbar_right_str退役/图标化 - §8.1 主题增强: ui.style(MD3/MIUIx)×display.theme(dark/light)定义配色/背景; display.background=style×mode下选项集+全局源+深浅成对; meow_ui_set_style/theme_get 接口; 两套风格参数; 状态栏图标随ui.style换集 - SYSTEM_SETTINGS: 三键语义(style/theme/background)更新 - 开放点(App前台SIGSTOP/App inset/MIUIx图标占位/meow_ui_set_statusbar公开性) 标"实现期定"
This commit is contained in:
1 parent
a6877bbd75
commit
c4e648be0e
3 files changed
+89
-3
No files matched your search
@@ -108,6 +108,15 @@ int meow_ui_statusbar_height(void);
|
||||
|
||||
**注意(诚实)**:这是 SDK 的较大增强——需引入系统状态读取器 + 顶部留白(inset)协调 + 与 APP 内容 z 顺序。非全屏 APP 必须给顶部 inset,否则内容被盖。API 名实现时以 `meow_ui.h` 为准。
|
||||
|
||||
**「同一个状态栏」正确闭环([源:2026-08-30] 收敛修正,覆盖上文部分表述)**:
|
||||
|
||||
- **SDK 全局状态栏 = 系统级组件,仅系统进程(launcher)链接渲染**:状态栏(`meow_ui_sys_statusbar_render` 等)**只由系统 UI 进程使用**;**App 进程不渲染状态栏**(§6.1 ③ 系统级控件仅系统内部;App 拿不到、不自绘、不可自建全局叠加/悬浮层)。
|
||||
- **App 前台由系统进程叠加显示**:App 前台时状态栏作为**系统叠加层**盖在 App 内容之上(复用 fb 双缓冲叠加,见 `FRAMEWORK_DESIGN §10.2`/`§10.5`、`devdocs/plan/NOTIF_CENTER_APP_OVERLAY_PLAN.md`);与通知中心/电源菜单区别——状态栏**常驻**(仅顶条 28px,非模态面板)。
|
||||
- **数据源唯一(launcher 统一喂/取)**:状态栏数据(时间/电量/WiFi/音量/亮度)由 launcher **单一权威源**喂给系统进程状态栏 → 主界面与 App 两边显示**必然一致**(根治「launcher 右侧有亮度、App 没有」);SDK 内置读取器仅作系统进程兜底,**App 侧不再渲染状态栏**。
|
||||
- **右侧 = MD3 图标 + 变量值(非文本式)**:右侧为「图标+变量值」——电量图标+%、WiFi 图标(信号分档)、音量图标+%、亮度图标+%;复用 `sb_icons.h`/`SB_I_*`/`sb_blit_icon`(MD3 Material Symbols,alpha 位图,颜色由主题表提供),颜色随 `meow_theme`(`ui.style`×mode)日/夜。文本式右侧串(`statusbar_right_str` 的 `batt% WIFI 蓝牙 VOL nn% 亮度nn%`)退役/图标化。
|
||||
- **顶级主题(`ui.style`)切换更换图标集**:不同风格族用不同状态栏图标集——MD3=默认图标、MIUIx=另套基础;`meow_ui_set_style` 时状态栏图标随切换(见 §8.1)。
|
||||
- **对上文的影响**:「SDK 在 `meow_ui_flush()` 前自动画状态栏 / App 需 `meow_ui_statusbar_height()` 下移(inset)」的表述,在「状态栏=系统进程渲染」模型下**仅适用于系统进程**;App 侧不再自绘状态栏、顶层 28px 命中归系统(§6.1 交互分层 ③)。App 视觉是否留 inset 由系统进程叠加实现决定(实现期定,不违背本定案)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 图片层 API(B1)
|
||||
@@ -853,6 +862,74 @@ void meow_theme_remove_listener(meow_theme_listener cb);
|
||||
|
||||
> 主题随 `meow_settings` 的 `display.theme_mode` 键分发;框架统一,应用不必自配色——这正是"实体 UI / Web 面板 / 应用全程一致观感"的保证。
|
||||
|
||||
### 8.1 主题增强:顶级主题 `ui.style` × 明暗 `display.theme` × 背景 `display.background` [源:2026-08-30]
|
||||
|
||||
> **一句话**:主题 = **顶级主题风格族(`ui.style`:MD3 / MIUIx)× 明暗(`display.theme`:dark / light)** 共同决定「整套配色 + 控件形态 + 背景底」。`display.background` **不再是独立全局维度**,而是「当前 style × 当前 mode」下**可选背景底选项集**——**可选集与默认随 style / mode 切换一起变**。**切明暗** → 同 style 的浅/深背景自动切换(修复"浅色不搭");**切 style** → 整套配色 + 背景换族(修复"背景仅对主页生效/只有深色")。本定案建立在 §5.8.4 的 MD3 语义色板之上(色板 = MD3 语义色;本节管 style×mode 选哪套 + 风格参数 + 背景源)。
|
||||
|
||||
#### 8.1.1 主题模型(三键语义)
|
||||
|
||||
| 设置键 | 域 | 语义 | 层级/关系 |
|
||||
|---|---|---|---|
|
||||
| `ui.style` | `md3` / `miuix` | **顶级主题风格族**:定义整套配色风格 / 控件形态 / 圆角 / 间距 / 描边 | 顶级维度;切 style → 整套配色+背景换族 |
|
||||
| `display.theme` | `dark` / `light` | 该 style 下的**明暗**(深浅) | 次级维度;切明暗 → 同 style 浅/深背景自动切换 |
|
||||
| `display.background` | 见 §8.1.4 | **由「当前 style × 当前 mode」决定的背景底选项集**(非独立全局维度) | 派生维度;可选集+默认随 style/mode 一起变 |
|
||||
|
||||
**style × mode 矩阵(可选背景底集 / 默认)**:
|
||||
|
||||
| style | mode | 背景底可选集 | 默认 |
|
||||
|---|---|---|---|
|
||||
| MD3 | dark | 黑 / 深蓝 / 墨绿(深色系) | 黑 |
|
||||
| MD3 | light | 白 / 浅蓝 / 浅绿(浅色系) | 白 |
|
||||
| MIUIx | dark | MIUIx 深色系一套(草案) | 随 MIUIx 深色默认 |
|
||||
| MIUIx | light | MIUIx 浅色系一套(草案) | 随 MIUIx 浅色默认 |
|
||||
|
||||
> **修复语义**:此前 `display.background`(`black`/`blue`/`green`)只对 launcher 主页生效、只有深色、浅色不搭(launcher `meow_launcherd.c` `s_apply_setting` 的 `display.background` 分支 / `bg_presets`——`blue→0x0A1428`、`green→0x0A2814`、`else→0x000000`)。本定案将背景改为「style×mode 派生选项集」:**每种背景配色定义深/浅两套 surface/bg**(§8.1.4),随 `display.theme` 切换 → 深浅都搭、全界面(状态栏/未声明背景 App/主页)同步。
|
||||
|
||||
#### 8.1.2 SDK 接口(一键切换)
|
||||
|
||||
```c
|
||||
typedef enum { MEOW_STYLE_MD3 = 0, MEOW_STYLE_MIUIX = 1 } meow_ui_style;
|
||||
|
||||
/* 设置顶级主题风格族(对应设置键 ui.style)。立即生效并触发全局刷新(见 §8.1.4)。 */
|
||||
void meow_ui_set_style(int style); /* 越界 clamp 到合法值;同值忽略 */
|
||||
int meow_ui_style(void); /* 当前 style(默认 MEOW_STYLE_MD3) */
|
||||
|
||||
/* 当前「style × mode」完整主题:MD3 语义色板 + 风格参数 + 背景 surface/bg。
|
||||
* = 现有 meow_theme_get() 的扩展(结构体尾部追加,见 §5.8.4 + §8.1.3;旧字段 bg/fg/accent/dim 保留映射)。
|
||||
* 应用只读,不自配色。 */
|
||||
const meow_theme *meow_theme_get(void);
|
||||
```
|
||||
|
||||
- **设置页联动**:设置页 `ui.style` → `meow_ui_set_style` → 框架**全局刷新**(状态栏 SDK 全局 / 未声明背景的 App / launcher 主页,§8.1.4)。App 在 `on_tick` 据通知重绘(`meow_ui_flush_region`,沿用 `meow_theme_listener` 机制)。
|
||||
- **明暗联动**:`display.theme` / `display.theme_mode`(auto)变化仍走现有 `meow_theme_mode` + `meow_theme_listener`(§8 现状),仅「同一 style 下」的浅/深背景随切换自动换。
|
||||
- **命名对齐(与 `meow_ui.h` / launcher 现状)**:SDK **App 侧**结构体权威名 = **`meow_theme`**(既有 `meow_theme_get()`),**不是** `meow_ui_theme`;launcher 内部另有独立结构体 `meow_ui_theme_t`(`meow_launcherd.c`,仅供状态栏/设置页,**与 App 侧无关、不暴露**)。故本节接口统一用 `meow_theme` / `meow_theme_get`;若实现期另起 `meow_ui_theme()`/`meow_ui_theme_t` 作同义别名亦可,视为与 `meow_theme` 等价(待定案)。
|
||||
- **状态栏图标随 `ui.style` 换集**:状态栏右侧图标集与风格族绑定(MD3=默认图标、MIUIx=另套基础);`meow_ui_set_style` 时框架**一并切换状态栏图标集**(触发全局刷新,见 §8.1.4),颜色随 `meow_theme`(style×mode)日/夜(详见 §3.1「同一个状态栏」正确闭环)。
|
||||
|
||||
#### 8.1.3 两套风格参数(草案值)
|
||||
|
||||
`meow_theme` 在 §5.8.4 **尾部追加 MD3 语义色板**基础上,**再尾追风格参数段**(圆角/间距/描边/控件形态)。旧字段 `bg/fg/accent/dim` 保留(映射见 §5.8.4 表)。`font_title`/`font_body`(28/20)不变。
|
||||
|
||||
| 参数 | MD3(默认,Material You) | MIUIx(基础,可感知变化) |
|
||||
|---|---|---|
|
||||
| 语义色 | 柔和 tonal(`primary` 蓝、`surface` 中性、`surfaceVariant` 次级) | 更饱和、偏品牌的 `primary`;`surface` 稍偏冷、`surfaceVariant` 稍深 |
|
||||
| radius(圆角) | 中等:按钮 ≈12px / 卡片 ≈16px(草案) | 更大:按钮 ≈18px / 卡片 ≈24px(草案) |
|
||||
| spacing(间距) | 标准 8px 步进 | 略大 10px 步进(草案) |
|
||||
| 描边 / 形态 | **无边框**(靠色面 + 状态层叠色区分) | 更扁平;**细描边**(`outline` 1px,草案);控件更扁平 |
|
||||
| 控件风格 | Material You:圆角填充 + 状态层 | 扁平、圆角更大、间距更大(深度视觉细节后续迭代) |
|
||||
|
||||
> 两套为**草案值**,实现可微调;关键保证 **MIUIx 与 MD3 有可感知差异**(圆角/描边/间距/主色),避免"切了没感觉"。`MEOW_STYLE_MD3` 默认;MIUIx 深度细节(阴影/渐变/动画)留后续迭代。
|
||||
|
||||
#### 8.1.4 背景 = 全局背景源
|
||||
|
||||
`display.background`(选项集随 style×mode 变,见 §8.1.1 矩阵)决定主题的 `surface`/`bg`(背景底)→ **同步跟随**三类面:
|
||||
1. **状态栏(SDK 全局)**:背景 `surface` 即状态栏底;
|
||||
2. **未声明背景的 App**:App 未自画背景 / 未在 app.json 声明 `background` 字段 → 用系统背景(`meow_theme_get()` 的 `surface`/`bg`);
|
||||
3. **launcher 主页**:主页背景(launcher `menu_bg`)随背景。
|
||||
|
||||
**App 显式声明背景 → 覆盖默认(App 声明优先)**。判定(现状):app.json(§9)**当前无 `background` 字段**(字段现为 name/exec/package/version/framework/immersive/icon),App 亦无系统级"声明背景"API → **App 未自画背景即视为未声明 → 跟随系统**。判定规则:App **自画背景**(自己 `meow_ui_fill_rect` 铺底 / `meow_ui_clear` 指定色)或将来在 app.json 声明 `background` 字段(草案/未实现)→ 用其自绘;否则跟随系统背景。
|
||||
|
||||
**深浅成对**:每种 background 配色(黑/深蓝/墨绿/白/浅蓝/浅绿/…)各定义 **深/浅两套 surface/bg**(进 `meow_theme_light` / `meow_theme_dark` 各自取值),随 `display.theme` 切换 → 切明暗时背景自动换成同 style 的对应深浅(浅色模式不再"黑底硬搭")。背景若为**图片路径**(`display.background` 现也允许 `MeowAPPs/backgrounds/xx.png`,语义保留):图片本身即观感 → **深浅切换作用于文字/角色色(surface/onSurface 等)与控件**,背景图不随深浅换(待定案)。
|
||||
|
||||
---
|
||||
|
||||
## 9. 目录/构建约定
|
||||
|
||||
Reference in new issue
Block a user