Files
MeowOS-For-R3P2/patch_v2/sdk/test_umbrella.c
T
AskaEth a8c51be1fc 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
2026-09-02 16:50:40 +08:00

106 lines
6.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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(); }