feat(ncm §22): 播放页重做——封面页/歌词页双页(NCM_CACHE_DESIGN §6 定案)
- 去标题栏(不再用 ncm_topbar);返回=左缘手势/系统返回钮语义 - 双页结构:封面页/歌词页,屏幕正中左/右滑切换(与左缘≤24px返回、顶部通知分流), 页面指示点显示当前页;中部横滑=on_touch_move 锁存 page-drag + on_tap/on_swipe 判向 - 封面页:方形大图+圆角(无旋转动画)+进度条(点 seek)+MD3 矢量控制钮(prev/play/pause/next, 新增 app/ui/ncm_icons.h 32x32 单通道 alpha,参照 sb_icons.h 范式)+元信息+实际音质档 - 歌词页:LRC 滚动(当前行居中高亮、上下渐隐)+点行跳转(新增 lyric_line_time); 默认=封面模糊置底(封面铺底+主题 scrim),省电=封面背景+黑色半透明叠加层(设置 ncm.player_bg_mode) - 日夜间:主题配色只映射到半透明叠加层/scrim/accent(红),不动沉浸底(NCM_PLAYER_BG 恒定) - 分带刷新沿用:封面页=封面静态带+动态带(互不重叠 bbox,tick 只刷动态带);歌词页换行(~5s)才重画 - 性能:宿主 4 页 PPM 核验+手势自检 PASS;mipsel -Wall -Wextra 0 warning;qemu core 回归 PASS; 0 真实请求(封面/歌词用本地样本注入)。未部署真机(主会话统一) md5: ncm 730e0b6e / ncm_host 500ac85 / player.c 00934de / ncm_icons.h 20f0bba
This commit is contained in:
1 parent
ed2ae10320
commit
7bd6962ccb
13 files changed
+795
-343
No files matched your search
@@ -39,6 +39,15 @@
|
||||
#define APP_OP_W 48 /* 行右侧操作区触达宽 */
|
||||
#define APP_FOOTER_H 26
|
||||
|
||||
/* ---- 播放页(§22 重做:封面页/歌词页双页,NCM_CACHE_DESIGN §6)----
|
||||
* 沉浸底恒 NCM_PLAYER_BG(不随系统明暗反转——「不动沉浸底」);日夜间主题配色只映射到
|
||||
* 半透明叠加层(歌词页 scrim)与 accent(红)。 */
|
||||
#define NCM_PLAYER_BG 0x101014 /* 播放页固定沉浸底(中性近黑) */
|
||||
|
||||
/* 歌词页背景模式(设置 ncm.player_bg_mode:default/power_save,§22) */
|
||||
#define NCM_BG_DEFAULT 0 /* default:封面模糊置底(封面缩放铺底 + 主题 scrim 叠加) */
|
||||
#define NCM_BG_POWER_SAVE 1 /* power_save:封面背景 + 黑色半透明叠加层(更暗,省电观感) */
|
||||
|
||||
/* ---- 数据规模(内存纪律:歌单/歌曲大列表虚拟化显示,数组有界;硬约束 R3P2 ~14MB)---- */
|
||||
#define NCM_PLAYLIST_MAX 120 /* 我的歌单上限 */
|
||||
/* 滑动窗口(REPORT §17,三期第三批,取代 §14 的 NCM_SONG_MAX=1000 硬截断):
|
||||
@@ -158,6 +167,7 @@ typedef struct ncm_app_state {
|
||||
/* 设置(持久化 MeowData/dev.player.ncm/data)*/
|
||||
int level; /* NCM_LEVEL_* */
|
||||
int cache_limit_gb;
|
||||
int player_bg_mode; /* 歌词页背景模式(§22):NCM_BG_DEFAULT / NCM_BG_POWER_SAVE */
|
||||
|
||||
/* 搜索(结果复用 g_st.songs[] 浅拷贝区;仅搜索页上下文有效)*/
|
||||
char search_query[256];
|
||||
@@ -248,8 +258,12 @@ void player_play_song(int idx); /* 从歌单第 idx 首开始播放 */
|
||||
void player_pause_toggle(int on);
|
||||
void player_next(int dir); /* dir=+1 下一首 / -1 上一首 */
|
||||
void player_seek(int64_t ms);
|
||||
void player_on_swipe(int dir, int dist); /* 横屏切换/返回 */
|
||||
int player_set_screen(int landscape); /* 1=横屏 0=竖屏;返回之前 */
|
||||
void player_on_swipe(int dir, int dist); /* 中部横滑页切换(DIR=RIGHT→封面页;PPAGE 由 touch 拖拽+on_tap 判向) */
|
||||
int player_set_page(int page); /* 0=封面页 1=歌词页;返回旧页。拖动/程序切页用 */
|
||||
int player_page(void); /* 当前页(0/1) */
|
||||
void player_touch_down(int x, int y); /* 中部横滑跟踪(与左缘返回/顶部通知分流,§22) */
|
||||
void player_touch_move(int x, int y);
|
||||
int player_set_screen(int landscape); /* 兼容:重做后恒竖屏(返回旧值 0) */
|
||||
int player_screen(void);
|
||||
|
||||
/* settings */
|
||||
@@ -319,6 +333,7 @@ const char *lyric_line_tl(int i);
|
||||
int lyric_count(void);
|
||||
void lyric_clear(void);
|
||||
int lyric_state(void); /* 0=空闲/未拉 1=加载中 2=已拉完(可能 0 行=无词) */
|
||||
long lyric_line_time(int i);/* 第 i 行时间戳(ms;越界 -1)。播放页点行跳转(§22) */
|
||||
|
||||
/* cover */
|
||||
void cover_request(const char *url); /* 提交目标封面 URL(后台线程下载+解码) */
|
||||
@@ -328,6 +343,9 @@ int cover_changed(void); /* 1=有新封面待绘制(UI tick
|
||||
void cover_ack(void); /* UI 消费一次(已见当前版本) */
|
||||
const char *cover_current_path(void); /* 封面原始文件路径(供 launcher 媒体卡片读);NULL=无 */
|
||||
void cover_cache_reset(void);
|
||||
#ifdef MEOW_UI_HOST_TEST
|
||||
void cover_host_inject(const char *path); /* 宿主测试桩:本地封面注入(验证封面/模糊底图) */
|
||||
#endif
|
||||
|
||||
/* ---- play(app/play/)---- */
|
||||
/* audio_out(后端:默认 SINK_AUDIOD=meow_audiod 独占服务;env NCM_AUDIO_SINK=file/null/alsa
|
||||
|
||||
Reference in new issue
Block a user