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
106 lines
6.1 KiB
C
106 lines
6.1 KiB
C
/*
|
||
* test_umbrella.c — 伞头完整性回归:只 #include "meow_ui.h",抽查各模块代表性声明
|
||
* (类型 / 函数 / 宏)都存在。头拆分后用来证明伞头聚合无遗漏、签名未变。
|
||
* 用法:gcc -std=c11 -Wall -Wextra -I<sdk> -c test_umbrella.c -o test_umbrella.o
|
||
* (纯声明级检查,不链接、不调用;产生可执行代码仍 0 warning)。
|
||
*/
|
||
#include "meow_ui.h"
|
||
|
||
#include <stddef.h>
|
||
|
||
/* ---- 类型形状 _Static_assert(编译期)---- */
|
||
_Static_assert(sizeof(meow_ui_opts) == 2 * sizeof(int), "meow_ui_opts shape");
|
||
_Static_assert(sizeof(meow_theme) > sizeof(uint32_t), "meow_theme shape");
|
||
_Static_assert(offsetof(meow_theme, bg) == 0, "meow_theme.bg at 0");
|
||
_Static_assert(offsetof(meow_ime_ctx, buf) == sizeof(meow_ime_mode), "meow_ime_ctx.buf offset");
|
||
_Static_assert(offsetof(meow_list_item, title) > 0, "meow_list_item layout");
|
||
_Static_assert(sizeof(meow_notify) > sizeof(void *), "meow_notify shape");
|
||
_Static_assert(sizeof(meow_audio_state) > 0, "meow_audio_state shape");
|
||
_Static_assert(sizeof(meow_widget_opts) > 0, "meow_widget_opts shape");
|
||
|
||
/* ---- 枚举/宏值 _Static_assert(编译期;值定格即防漂移)---- */
|
||
_Static_assert(MEOW_KEY_POWER == 116, "key power");
|
||
_Static_assert(MEOW_KEY_PREVIOUS == 165, "key previous");
|
||
_Static_assert(MEOW_SWIPE_DOWN == 3, "swipe down");
|
||
_Static_assert(MEOW_IME_PINYIN == 2, "ime pinyin");
|
||
_Static_assert(MEOW_THEME_DARK == 1, "theme dark");
|
||
_Static_assert(MEOW_STYLE_MIUIX == 1, "style miuix");
|
||
_Static_assert(MEOW_Z_TOP == 1000, "z top");
|
||
_Static_assert(MEOW_TOPBAR_BACK == (-2), "topbar back");
|
||
_Static_assert(MEOW_ICON_SETTINGS == 15 && MEOW_ICON_HEART == 29, "topbar icon idx 15..29");
|
||
_Static_assert(MEOW_ICON_SKIP_PREV == 21 && MEOW_ICON_QUEUE_MUSIC == 27, "topbar icon order");
|
||
_Static_assert(MEOW_SBAR_HOTZONE_FS == 4, "sbar hotzone fs");
|
||
_Static_assert(MEOW_WS_PRESSED == (1u << 3), "ws pressed");
|
||
_Static_assert(MEOW_BTN_ELEVATED == 4, "btn elevated");
|
||
_Static_assert(MEOW_LAYOUT_BOX == 2, "layout box");
|
||
/* §12.1 线性布局引擎 / §12.2 动画基座 / §12.3 滚动物理(新增模块,不改变既有值) */
|
||
_Static_assert(MEOW_BOX_V == 1, "box dir v");
|
||
_Static_assert(MEOW_BOX_WEIGHT == 1, "box size weight");
|
||
_Static_assert(MEOW_BOX_WRAP == 2, "box size wrap");
|
||
_Static_assert(MEOW_BOX_ALIGN_SPACE_BETWEEN == 3, "box align between");
|
||
_Static_assert(MEOW_BOX_CROSS_STRETCH == 3, "box cross stretch");
|
||
_Static_assert(MEOW_EASE_OVERSHOOT == 3, "ease overshoot");
|
||
_Static_assert(MEOW_ANIM_MAX == 16, "anim pool");
|
||
_Static_assert(MEOW_LIST_SEL_MULTI == 2, "list sel multi");
|
||
_Static_assert(MEOW_NOTIFY_CAT_MEDIA == 5, "notify cat media");
|
||
_Static_assert(MEOW_NOTIFY_URG_CRITICAL == 3, "notify urg critical");
|
||
_Static_assert(MEOW_NOTIFY_TIMEOUT_ONGOING == (-1), "notify ongoing");
|
||
_Static_assert(MEOW_LOG_ERROR == 3, "log error");
|
||
_Static_assert(MEOW_DLG_INPUT == 2, "dlg input");
|
||
_Static_assert(MEOW_FONT_TIER_FULL == 2, "font tier full");
|
||
_Static_assert(MEOW_CFG_ERR_NOENT == (-2), "cfg noent");
|
||
|
||
/* ---- 函数存在性检查(取址即要求已声明;未声明 → 编译错误)---- */
|
||
static void umbrella_smoke(void)
|
||
{
|
||
/* 绘制层(§3)+ 时间/刷新率(§7/§7.1) */
|
||
(void)&meow_ui_init; (void)&meow_ui_flush; (void)&meow_ui_fill_rect_alpha;
|
||
(void)&meow_ui_text_center; (void)&meow_ui_time_ms; (void)&meow_ui_effective_rate;
|
||
/* 图片层(§4) */
|
||
(void)&meow_img_load_file; (void)&meow_ui_img_cover; (void)&meow_img_w;
|
||
/* 主题(§8 + §8.1.5 色板导出/注入) */
|
||
(void)&meow_theme_get; (void)&meow_theme_defaults; (void)&meow_ui_set_style;
|
||
(void)&meow_theme_export; (void)&meow_theme_inject;
|
||
/* 输入法(§5.1) */
|
||
(void)&meow_ui_text_input; (void)&meow_ime_text; (void)&meow_ime_composition;
|
||
/* 控件层(§5/§5.8/§5.8.6/§5.5) */
|
||
(void)&meow_btn_create; (void)&meow_widget_custom_create; (void)&meow_row_create;
|
||
(void)&meow_topappbar_hit; (void)&meow_listview_create; (void)&meow_list_tap_at;
|
||
(void)&meow_widget_set_opts; (void)&meow_widget_state; (void)&meow_progress_set;
|
||
(void)&meow_iconbtn_create; /* M7.0a 缺口#2 */
|
||
/* 输入层/生命周期(§6)+ 长按(§6.3) */
|
||
(void)&meow_ui_run; (void)&meow_ui_swipe_hint; (void)&meow_ui_set_long_press_cb;
|
||
/* Activity 栈(§6.1) */
|
||
(void)&meow_ui_activity_push; (void)&meow_ui_global_add; (void)&meow_ui_activity_depth;
|
||
/* 绘制物注册表 / z 序(§6.2) */
|
||
(void)&meow_widget_set_z; (void)&meow_draw_custom_register; (void)&meow_ui_invalidate;
|
||
(void)&meow_ui_paint_full; (void)&meow_ui_set_page_bg;
|
||
/* 状态栏 / 全屏(§3.1) */
|
||
(void)&meow_ui_set_statusbar; (void)&meow_ui_statusbar_height; (void)&meow_ui_statusbar_hotzone;
|
||
(void)&meow_ui_statusbar_set_collapsed;
|
||
/* 模态(§5.8.6 弹窗/面板) */
|
||
(void)&meow_dialog_create; (void)&meow_dialog_show; (void)&meow_sheet_open;
|
||
/* 日志(§9) */
|
||
(void)&meow_log; (void)&meow_log_get_level;
|
||
/* 通知(§9.1) */
|
||
(void)&meow_notify_send; (void)&meow_notify_category_str; (void)&meow_notify_update_progress;
|
||
/* 配置(§9.2) */
|
||
(void)&meow_config_dir; (void)&meow_config_int; (void)&meow_config_remove;
|
||
/* 字符串资源/i18n(§13,追加式) */
|
||
(void)&meow_str; (void)&meow_strf; (void)&meow_str_set_locale; (void)&meow_str_locale;
|
||
/* 字体(§5.7/§10) */
|
||
(void)&meow_font_enumerate; (void)&meow_font_tier; (void)&meow_font_select_by_id;
|
||
/* 音频(§11) */
|
||
(void)&meow_audio_open; (void)&meow_audio_query; (void)&meow_audio_on_preempt;
|
||
/* §12.1 布局 / §12.2 动画 / §12.3 滚动 */
|
||
(void)&meow_box_new; (void)&meow_box_arrange; (void)&meow_box_add;
|
||
(void)&meow_box_add_sub; (void)&meow_widget_set_rect;
|
||
(void)&meow_anim_start; (void)&meow_anim_cancel; (void)&meow_anim_tick;
|
||
(void)&meow_ease_apply; (void)&meow_anim_set_region;
|
||
(void)&meow_scroll_create; (void)&meow_scroll_wrap; (void)&meow_scroll_track;
|
||
(void)&meow_scroll_fling; (void)&meow_scroll_velocity; (void)&meow_scroll_set_snap;
|
||
}
|
||
|
||
/* 供宿主回归驱动直接调用;不链接本库也没关系(纯地址丢弃)。 */
|
||
void test_umbrella_run(void) { umbrella_smoke(); }
|