feat(launcher): 批4 Now Playing双页(播放页⇄歌词页) — 方向感知手势(播放页右→左进歌词/左缘右滑回桌面;歌词页左→右回播放)+歌词页用批3数据+批1/2控件实时滚动+空态;宿主G5/G6全过,0warning;meow_ui.a未重编
This commit is contained in:
1 parent
2e5b814059
commit
8c677f127f
4 files changed
+310
-39
No files matched your search
@@ -16,11 +16,15 @@
|
||||
* ../sdk/meow_ui_dialog.c ../sdk/meow_ui_ime.c ../sdk/meow_ui_str.c ../sdk/meow_pinyin.c \
|
||||
* ../sdk/meow_ui_draw.c ../sdk/meow_ui_view.c ../sdk/meow_ui_box.c ../sdk/meow_ui_anim.c \
|
||||
* ../sdk/meow_ui_scroll.c ../sdk/meow_ui_img.c ../sdk/meow_ui_media.c \
|
||||
* ../sdk/meow_notify_ipc.c ../sdk/stb_image.c -I../sdk -I. -DMEOW_UI_HOST_TEST -pthread -lm
|
||||
* ../sdk/meow_notify_ipc.c ../sdk/stb_image.c \
|
||||
* ../sdk/meow_lyric.c ../sdk/meow_lyric_view.c \
|
||||
* -I../sdk -I. -DMEOW_UI_HOST_TEST -pthread -lm
|
||||
* 运行:./test_now_playing_widgets
|
||||
*/
|
||||
#include "meow_ui.h"
|
||||
#include "meow_ui_internal.h" /* meow_ui_back_buf/pitch/bpp */
|
||||
#include "np_gesture.h" /* 批4:双页方向感知手势决策(纯逻辑,宿主可单测) */
|
||||
#include "meow_lyric_view.h" /* 批2:歌词页控件(批4接入,数据批3 meow_media_lyric_*) */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -86,6 +90,13 @@ static void mk_widgets(void)
|
||||
meow_ui_activity_pop();
|
||||
}
|
||||
|
||||
/* 歌词视图宽度测量(宿主:字节数近似,够用不裂屏;launcher 侧为 ui_width)。 */
|
||||
static int lv_test_width(const char *u, int size, void *ctx)
|
||||
{
|
||||
(void)size; (void)ctx;
|
||||
return (int)strlen(u);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
setbuf(stdout, NULL);
|
||||
@@ -168,6 +179,72 @@ int main(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* ============ G5 双页手势方向感知(np_gesture.h,纯逻辑) ============ */
|
||||
printf("G5 dual-page direction-aware gestures\n");
|
||||
/* 播放页:右→左滑 → 进歌词页 */
|
||||
CHECK(np_gesture_decide(NP_PAGE_PLAY, 200, 100, -50, 5) == NP_GEST_NEXT,
|
||||
"play: left-swipe -> lyric");
|
||||
/* 播放页:左缘右滑 → 回桌面(保留 M6.26) */
|
||||
CHECK(np_gesture_decide(NP_PAGE_PLAY, 8, 100, 80, 5) == NP_GEST_EXIT,
|
||||
"play: edge right-swipe -> exit");
|
||||
/* 播放页:非左缘右滑 → 播放页无上一页,忽略(不误切/不误退) */
|
||||
CHECK(np_gesture_decide(NP_PAGE_PLAY, 200, 100, 80, 5) == NP_GEST_NONE,
|
||||
"play: non-edge right-swipe -> none");
|
||||
/* 歌词页:左→右滑 → 回播放页(不是回桌面) */
|
||||
CHECK(np_gesture_decide(NP_PAGE_LYRIC, 200, 100, 60, 5) == NP_GEST_PREV,
|
||||
"lyric: right-swipe -> play");
|
||||
/* 歌词页:左缘右滑 → 回播放页(不接桌面,避免误退) */
|
||||
CHECK(np_gesture_decide(NP_PAGE_LYRIC, 8, 100, 80, 5) == NP_GEST_PREV,
|
||||
"lyric: edge right-swipe -> play (not exit)");
|
||||
/* 歌词页:右→左滑 → 歌词页是末页,忽略 */
|
||||
CHECK(np_gesture_decide(NP_PAGE_LYRIC, 200, 100, -60, 5) == NP_GEST_NONE,
|
||||
"lyric: left-swipe -> none");
|
||||
/* 顶部热区下滑 → 通知中心(两个页面同语义) */
|
||||
CHECK(np_gesture_decide(NP_PAGE_PLAY, 100, 10, 0, 70) == NP_GEST_TOP,
|
||||
"top swipe-down -> notif");
|
||||
/* 近点按 → TAP;纵向主导 → NONE(不误切) */
|
||||
CHECK(np_gesture_decide(NP_PAGE_PLAY, 200, 300, 5, 5) == NP_GEST_TAP,
|
||||
"near tap -> TAP");
|
||||
CHECK(np_gesture_decide(NP_PAGE_PLAY, 200, 300, 5, 80) == NP_GEST_NONE,
|
||||
"vertical dominant -> NONE");
|
||||
|
||||
/* ============ G6 歌词页:空态 + 渲染(批2 控件 + 批3 数据语义) ============ */
|
||||
printf("G6 lyric view: empty + render\n");
|
||||
meow_ui_activity_push(NP_SENTINEL);
|
||||
meow_lyric_view *lv = meow_lyric_view_create(0, 28, 480, 720 - 28, lv_test_width, NULL);
|
||||
meow_lyric_view_set_empty(lv, "暂无歌词");
|
||||
meow_ui_activity_pop();
|
||||
CHECK(lv != NULL, "lyric_view created");
|
||||
if (lv) {
|
||||
/* 无歌词空态:无解析 → 0 行、visible=0(视图内建空态文案) */
|
||||
meow_lyric_clear();
|
||||
CHECK(meow_lyric_count() == 0, "clear -> 0 lines");
|
||||
CHECK(meow_lyric_view_visible(lv, 0, NULL, 0) == 0, "empty -> 0 visible entries");
|
||||
/* 有词:解析两行 → count/line_at/visible/当前行色 */
|
||||
int np = meow_lyric_parse("[00:01.00]第一行歌词\n[00:05.00]第二行歌词", "");
|
||||
CHECK(np == 2, "parse -> 2 lines");
|
||||
CHECK(meow_lyric_count() == 2, "count == 2");
|
||||
CHECK(meow_lyric_line_at(0) == 0, "line_at(0) -> first");
|
||||
CHECK(meow_lyric_line_at(3000) == 0, "line_at(3000) -> first");
|
||||
CHECK(meow_lyric_line_at(6000) == 1, "line_at(6000) -> second");
|
||||
CHECK(strcmp(meow_lyric_line_text(0), "第一行歌词") == 0, "text(0) == 第一行歌词");
|
||||
meow_lyric_view_vis vb[9];
|
||||
int vn = meow_lyric_view_visible(lv, 3000, vb, 9);
|
||||
CHECK(vn > 0, "visible(3000) > 0");
|
||||
CHECK(meow_lyric_view_cur_color(lv) == meow_theme_get()->onSurface,
|
||||
"cur_color == theme onSurface");
|
||||
/* 批5 取色预留:set_colors 可接入(覆盖活动行为主题 accent 后再还原默认) */
|
||||
meow_lyric_view_colors c; memset(&c, 0, sizeof c);
|
||||
c.cur = meow_theme_get()->accent;
|
||||
meow_lyric_view_set_colors(lv, &c);
|
||||
CHECK(meow_lyric_view_cur_color(lv) == meow_theme_get()->accent,
|
||||
"set_colors cur override works");
|
||||
meow_lyric_view_set_colors(lv, NULL); /* 回主题默认 */
|
||||
CHECK(meow_lyric_view_cur_color(lv) == meow_theme_get()->onSurface,
|
||||
"set_colors NULL -> theme default");
|
||||
meow_lyric_view_free(lv);
|
||||
}
|
||||
|
||||
meow_ui_activity_pop();
|
||||
meow_ui_shutdown();
|
||||
printf(g_fail ? "\nRESULT: %d FAIL(S)\n" : "\nRESULT: ALL PASS\n", g_fail);
|
||||
|
||||
Reference in new issue
Block a user