subtree pull sdk 来自主仓 pub/sdk(主仓 commit 68ce46a 等)。新增: - 布局引擎 meow_ui_box / 动画基座 meow_ui_anim / 滚动物理 meow_ui_scroll - §6.4 事件分发形式化 / W_LISTVIEW 虚拟化多行 / meow_str 字符串资源 i18n - sb_icons 动作图标扩充 + topbar 位图图标 / meow_img_downscale - tools/ 图标生成脚本与 SVG 源 - 对应宿主 test_*.c 与 demo_box_scroll.c build_sdk.sh 冲突解析:保留公开仓自包含版(vendored meow_font + -Iinclude -I.), OBJS 手工并入 4 个新模块(meow_ui_box/anim/scroll/str)。保留 vendored meow_font.c/ meow_ipc.h/meow_font.h/meow_notif.h,剔除宿主测试二进制与编译产物。
104 lines
6.0 KiB
C
104 lines
6.0 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) */
|
||
(void)&meow_theme_get; (void)&meow_theme_defaults; (void)&meow_ui_set_style;
|
||
/* 输入法(§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;
|
||
/* 输入层/生命周期(§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(); }
|