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
@@ -52,6 +52,11 @@ void appstate_load_settings(void)
|
||||
if (g_st.level < NCM_LEVEL_STANDARD || g_st.level > NCM_LEVEL_UI_MAX)
|
||||
g_st.level = NCM_LEVEL_EXHIGH;
|
||||
|
||||
/* §22 歌词页背景模式:default(模糊置底) / power_save(封面+黑叠加层);越界回落 default */
|
||||
g_st.player_bg_mode = meow_config_int("ncm.player_bg_mode", NCM_BG_DEFAULT);
|
||||
if (g_st.player_bg_mode != NCM_BG_DEFAULT && g_st.player_bg_mode != NCM_BG_POWER_SAVE)
|
||||
g_st.player_bg_mode = NCM_BG_DEFAULT;
|
||||
|
||||
ncm_cache_set_limit_gb(&g_st.ctx.cache, g_st.cache_limit_gb);
|
||||
g_st.ctx.default_level = g_st.level;
|
||||
}
|
||||
@@ -63,6 +68,8 @@ void appstate_save_settings(void)
|
||||
meow_config_set("ncm.cache_limit_gb", b);
|
||||
snprintf(b, sizeof b, "%d", g_st.level);
|
||||
meow_config_set("ncm.level", b);
|
||||
snprintf(b, sizeof b, "%d", g_st.player_bg_mode);
|
||||
meow_config_set("ncm.player_bg_mode", b);
|
||||
ncm_cache_set_limit_gb(&g_st.ctx.cache, g_st.cache_limit_gb);
|
||||
g_st.ctx.default_level = g_st.level;
|
||||
/* 手动调低上限时立即按 LRU 淘汰(超上限删最旧);未超限则为无操作 */
|
||||
|
||||
@@ -230,3 +230,21 @@ void cover_cache_reset(void)
|
||||
g_gen++;
|
||||
g_acked = g_gen;
|
||||
}
|
||||
|
||||
#ifdef MEOW_UI_HOST_TEST
|
||||
/* 宿主测试桩(仅宿主构建;产品构建无此符号):注入一张本地封面图(不经网络),
|
||||
* 验证封面页方形圆角大图与歌词页模糊置底路径(§22)。0 真实请求纪律不变。 */
|
||||
void cover_host_inject(const char *path)
|
||||
{
|
||||
if (!path || !path[0]) return;
|
||||
meow_img *img = meow_img_load_file(path);
|
||||
if (!img) { meow_log(MEOW_LOG_WARN, "cover host inject: load failed %s", path); return; }
|
||||
pthread_mutex_lock(&g_cm);
|
||||
if (g_cover_img) meow_img_free(g_cover_img);
|
||||
g_cover_img = img;
|
||||
ncm_strlcpy(g_cover_url, path, sizeof g_cover_url);
|
||||
g_cover_path[0] = 0;
|
||||
g_gen++;
|
||||
pthread_mutex_unlock(&g_cm);
|
||||
}
|
||||
#endif
|
||||
@@ -174,6 +174,15 @@ const char *lyric_line_tl(int i)
|
||||
return p;
|
||||
}
|
||||
|
||||
/* 第 i 行时间戳(ms)。越界返回 -1。供播放页「点行跳转」(§22:seek 到该行时间)。 */
|
||||
long lyric_line_time(int i)
|
||||
{
|
||||
pthread_mutex_lock(&g_lyric_mu);
|
||||
long t = (i < 0 || i >= s_n) ? -1 : s_t[i];
|
||||
pthread_mutex_unlock(&g_lyric_mu);
|
||||
return t;
|
||||
}
|
||||
|
||||
int lyric_count(void)
|
||||
{
|
||||
pthread_mutex_lock(&g_lyric_mu);
|
||||
|
||||
Reference in new issue
Block a user