sdk(M7.0a): 视图事件接线 + IconButton + 主题色板导出/注入(launcher 重写基座前置)
M7 launcher 整体 MD3 重写的 SDK 基座补全(只动 patch_v2/sdk/): - 缺口#7 meow_view 事件接线:meow_view_dispatch_event 接入 meow_ui_run 主循环 (§6.4 分流之上,TAP/KEY/SWIPE/LONG_PRESS 先经 view 路由、命中即消费、未命中回落 on_* —— 无 view 树/未命中完全向后兼容);meow_view_add_child 在父已进入时挂子视图 立即进入(递归 children 修正);meow_view_sub_push/pop 标注废弃(设计定案 b 不做页内 子导航栈)。 - 缺口#2 IconButton:meow_iconbtn_create —— sb_icons 位图 + 圆形命中 + 按压/按住态 (实时,同 meow_btn)+ owner/enabled 闸门;电源菜单/播放控制/锁屏通用件。 - 缺口#6 SDK 半主题收口:meow_theme_export/meow_theme_inject(§8.1.5 色板导出/注入), launcher s_ui_theme() 将据此变读 SDK 的薄壳(launcher 侧改动不在此批)。 - 文档:MEOW_APP_SDK.md 补 meow_iconbtn_create + meow_theme_export/inject 说明。 - 验证:新增 test_meow_ui_iconbtn / test_meow_ui_theme_export / test_meow_ui_view_event 全 PASS;全量 SDK 宿主回归(widgets/dispatch/box/anim/scroll/listvirt/str/ime/pinyin/ overlay/notif/input_keys/p1p2p3/umbrella/ft)全 PASS;交叉 -Wall -Wextra 0 warning。 meow_ui.a md5: be24214e24faadba63577f3a98c2c9d1 -> 7fc83f7731cadb2f91df1c3ed7d3814f
This commit is contained in:
1 parent
e67cc50afa
commit
a8c51be1fc
12 files changed
+595
-11
No files matched your search
@@ -765,8 +765,25 @@ meow_widget *meow_layout_spacer(int w, int h);
|
||||
| BottomSheet | 底部面板(复用 §5.7 B④ 面板) | ✅ 第二批 |
|
||||
| Dialog | 弹窗(复用 §5.6 B③ 弹窗) | ✅ 第二批 |
|
||||
| FloatingActionButton | 悬浮操作钮(圆角增强;无投影,仅描边/状态层近似) | ✅ 第二批 |
|
||||
| IconButton | 圆形/位图图标按钮(圆形命中 + 按压态;电源菜单/播放控制/锁屏通用) | 🆕 M7.0a |
|
||||
| 列表容器 | 可滚动列表(复用 §5.5 A② listview) | ✅ 第二批 |
|
||||
|
||||
> **IconButton(M7.0a,`meow_iconbtn_create`)**:把「位图图标 + 圆形命中 + 按压态」收敛为单一组件,
|
||||
> 供电源菜单圆钮 / Now Playing 播放控制 / 锁屏常用件等「图标圆钮」使用(launcher M7 控件化缺口 #2)。
|
||||
>
|
||||
> ```c
|
||||
> meow_widget *meow_iconbtn_create(int x, int y, int size, int icon_idx);
|
||||
> ```
|
||||
> - `x,y,size`:按钮外接正方形(`w=h=size`,圆心 = `(x+size/2, y+size/2)`,半径 = `size/2`)。
|
||||
> - `icon_idx`:`sb_icons[]` 位图下标(用 `MEOW_ICON_*` 或 `SB_I_*`;`<0` 画空位图、命中照常)。
|
||||
> - **命中**:圆形(`meow_widget_hit` 走半径判定,角部按下不点亮);`owner==active` + `enabled` 双闸门。
|
||||
> - **按压/按住态**:与 `meow_btn` 同源三路(状态机 `MEOW_WS_PRESSED` / 实时触摸命中 / `w->pressed`),
|
||||
> 经 `meow_widget_touch_refresh` 即时重绘(按压叠 `onSurface` 12%、按住 24%,禁用向 `onSurface` 38% 变淡)。
|
||||
> - **语义色**:底 `surfaceContainerLow`、图标 `onSurface`;选中(`meow_widget_set_selected`)→
|
||||
> `primaryContainer`/`onPrimaryContainer`;焦点用圆形描边(`ring_arc`)。
|
||||
> - **图标绘制**:与状态栏/TopAppBar 同源位图(`meow_gfx_blit_icon_ink`,Material Symbols Rounded 单通道 alpha),
|
||||
> ink 高 = `size*6/10`(MD3 24/40 图标比),垂直居中于圆心,只写像素不标顶栏脏区(控件 `clip` 管界)。
|
||||
|
||||
> **说明**:多数 Material 组件是**既有设计模板(§5.2-§5.7)的「MD3 观感化」**——如 Card=圆角容器、BottomSheet 复用 §5.7 面板、Dialog 复用 §5.6 弹窗、TabBar 联动 §5.2 分页、列表容器复用 §5.5 listview。故 Material 子集**不重复造结构**,只把这些模板的绘制观感对齐 MD3 语义色 + 统一基座。**第二批已实现(M2.71/0.7.66,见 §5.8.8)**。
|
||||
|
||||
> **TopAppBar 位图动作图标(M2.9x,追加式)**:TopAppBar 动作项默认是**文本**(`meow_topappbar_add_action`)。为支持「⚙↻⌕」类**动作图标**(4k 字库无这些码点,字体码点画图标会出豆腐),新增把某动作项改为**位图图标**的接口:
|
||||
@@ -1160,6 +1177,27 @@ int meow_ui_style(void); /* 当前 style(默认 MEOW_STYLE_MD3)
|
||||
const meow_theme *meow_theme_get(void);
|
||||
```
|
||||
|
||||
> **色板导出/注入(§8.1.5,M7.0a 主题收口前置)**:M7 用户定案「**SDK `meow_theme` 为唯一权威**」——
|
||||
> launcher 侧 `s_ui_theme()`(`font_theme.c` 4 套静态 `meow_ui_theme_t`)将改为读 SDK 的**薄壳**,不再自持色板。
|
||||
> SDK 侧为此前置提供「导出 / 注入」一对接口(launcher 薄壳改造不在本批):
|
||||
>
|
||||
> ```c
|
||||
> /* 导出:把当前「style×mode」解析生效的完整权威主题拷给调用方(单一权威来源)。 */
|
||||
> void meow_theme_export(meow_theme *out);
|
||||
> /* 注入:用一份自定义板覆写当前生效主题;NULL 恢复内建(随 settings 解析)。 */
|
||||
> void meow_theme_inject(const meow_theme *src);
|
||||
> ```
|
||||
> - **launcher 薄壳配方**:`s_ui_theme()` 调 `meow_theme_export(&th)`,再按角色字段映射到自己渲染用的
|
||||
> `meow_ui_theme_t`(9 色)——`surface→surface`、`surfaceVariant→surface_variant`、
|
||||
> `surfaceContainer→surface_container`、`primary→primary`、`onSurface→on_surface`、
|
||||
> `onSurfaceVariant→on_surface_variant`、`outline→outline`、`error→error`、`surfaceTint→surface_tint`。
|
||||
> 全部色值取自 SDK,**单一权威**;launcher 自持的 4 套静态色板退役。
|
||||
> - **注入**:供需要程序化覆写的调用方(如 launcher 自定义背景/强调、或 demo 预览另一调色板);
|
||||
> 覆写**不随** `meow_theme_reload()` 丢弃(程序化覆写优先于 settings,与 `meow_ui_set_style` 语义一致);
|
||||
> `inject(NULL)` 恢复内建。
|
||||
> - **一致性**:导出/注入/`meow_theme_get()` 三者同源(导出=拷贝 `meow_theme_get()` 结果;注入接管
|
||||
> `meow_theme_get()` 返回),保证「一处权威、处处同值」。
|
||||
|
||||
- **设置页联动**:设置页 `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`(`font_theme.c`,仅供状态栏/设置页,**与 App 侧无关、不暴露**)。故本节接口统一用 `meow_theme` / `meow_theme_get`;若实现期另起 `meow_ui_theme()`/`meow_ui_theme_t` 作同义别名亦可,视为与 `meow_theme` 等价(待定案)。
|
||||
@@ -1505,6 +1543,7 @@ locale 权威值 = 板载 `settings.conf` 的 `ui.locale`(默认 `zh_cn`)。
|
||||
- [D3] 新增内部 `meow_gfx_fill_round/blit_rgba/mark_dirty`(控件/图片用,非公共 API)。
|
||||
- [D4] 新增 `meow_theme_defaults(mode)`(脱机取内置色板)。
|
||||
- [D5] 新增 `on_swipe_progress` 回调 + `meow_ui_swipe_hint(x)`(左缘返回手势视觉条)+ 内部 `MEOW_EV_SWIPE_PROGRESS` / `meow_input_inject`(宿主验证用)。
|
||||
- [D6](M7.0a)新增 `meow_iconbtn_create`(圆形/位图图标按钮,§5.8.6)+ `meow_theme_export`/`meow_theme_inject`(§8.1.5 色板导出/注入);`meow_view_dispatch_event` 接入 `meow_ui_run` 主循环(§6.4 之上,TAP/KEY/SWIPE/LONG_PRESS 先经 view 路由、命中即消费、未命中回落 `on_*`);`meow_view` 的 enter/leave 递归 children 已实现 + `meow_view_add_child` 在父进入后挂子立即进入;`meow_view_sub_push/pop` 标注为废弃(设计定案 b 不做页内子导航栈)。
|
||||
- `meow_ui.h` 为对外权威签名;本文件 §3-§8 作为设计蓝本。
|
||||
|
||||
---
|
||||
|
||||
Reference in new issue
Block a user