fix(launcher): ①移除播放页底部歌词占位符(歌词页已做,删NP_LYRIC_Y+占位块) ②封面'空→复原'不恢复修复(meta_changed补artwork/np_cover_load缓存去重改为空也重载/歌词页补载封面);宿主test_np_cover 14项PASS,0warning
This commit is contained in:
1 parent
18014eb2b9
commit
b988d64653
2 files changed
+218
-11
No files matched your search
@@ -31,7 +31,6 @@
|
||||
#define NP_NEXT_CX (NP_PLAY_CX + 78)
|
||||
#define NP_PLAY_R 30
|
||||
#define NP_PREV_R 22
|
||||
#define NP_LYRIC_Y 640
|
||||
|
||||
static meow_img *g_np_cover = NULL;
|
||||
static char g_np_cover_path[200] = "";
|
||||
@@ -53,15 +52,17 @@ static int np_lyric_width(const char *u, int size, void *ctx)
|
||||
return ui_width(u, size);
|
||||
}
|
||||
|
||||
/* 封面解码缓存(artwork 路径变化才重载)。 */
|
||||
/* 封面解码缓存(artwork 路径变化才重载;路径未变但上次加载失败→允许重试)。
|
||||
* M6.33 修「artwork 空→复原」封面不重载:原「路径未变即跳过」在「空 artwork 清空封面后再
|
||||
* 以同路径复原」或「首载失败同路径重报」时封面永不恢复(g_np_cover==NULL 时即使路径未变也重载)。 */
|
||||
static void np_cover_load(const meow_media_session_t *s)
|
||||
{
|
||||
if (!s) return;
|
||||
if (strcmp(g_np_cover_path, s->artwork) == 0) return;
|
||||
if (g_np_cover && strcmp(g_np_cover_path, s->artwork) == 0) return; /* 已载且未变 → 跳过 */
|
||||
if (g_np_cover) { meow_img_free(g_np_cover); g_np_cover = NULL; }
|
||||
snprintf(g_np_cover_path, sizeof g_np_cover_path, "%s", s->artwork);
|
||||
if (!s->artwork[0]) return;
|
||||
char path[200];
|
||||
char path[240]; /* 相对 artwork 加前缀最坏 191+19=210 < 240,防 -Wformat-truncation 实际截断 */
|
||||
if (s->artwork[0] == '/') snprintf(path, sizeof path, "%s", s->artwork);
|
||||
else snprintf(path, sizeof path, "/usr/data/mnt/sd_0/%s", s->artwork);
|
||||
g_np_cover = meow_img_load_file(path);
|
||||
@@ -347,7 +348,10 @@ static void np_draw_lyric_page(int redraw_sb)
|
||||
if (redraw_sb) fill_rect(0, 0, W, SB_BAR_H, th->surface);
|
||||
/* 批5:封面取色背景(主→次渐变)或主题面;并注入歌词页 set_colors。
|
||||
* 批6:有封面时以封面作整页背景(衬在 lyric_view 半透明 scrim 之下),取色只做附加;
|
||||
* 无封面回退渐变/主题面。 */
|
||||
* 无封面回退渐变/主题面。
|
||||
* M6.33:先 np_cover_load(artwork 空→复原/换源时重载封面)再取色——顺序不能反,
|
||||
* 取色读 g_np_cover,须在封面载入后(否则歌词页在 artwork 复原后仍无封面)。 */
|
||||
np_cover_load(meow_media_current());
|
||||
np_cover_theme_update();
|
||||
np_apply_lyric_colors();
|
||||
if (g_np_cover)
|
||||
@@ -420,9 +424,8 @@ static void np_draw_page(int redraw_sb)
|
||||
np_draw_progress(s, pos, th);
|
||||
/* 控制按钮(SDK meow_iconbtn,命中/状态走 SDK) */
|
||||
np_draw_ctl(s);
|
||||
/* 歌词占位(M7.0b 文案走 meow_str) */
|
||||
const char *ly = meow_str_zh("np.lyric_placeholder", "歌词(占位)");
|
||||
ui_draw((W - ui_width(ly, 16)) / 2, NP_LYRIC_Y, ly, th->on_surface_variant, 16);
|
||||
/* 播放页底部干净(M6.33:歌词占位已移除——已有独立歌词页,占位多余;
|
||||
* 歌词页无歌词时的空态由歌词页自身承载,播放页不再显示歌词占位文案)。 */
|
||||
if (redraw_sb) draw_statusbar();
|
||||
}
|
||||
|
||||
@@ -504,6 +507,7 @@ void run_now_playing(struct app *apps, int napps)
|
||||
char last_title[128] = "";
|
||||
uint32_t last_state = 0xFFFFFFFFu;
|
||||
char last_app[MEOW_APP_ID_MAX] = "";
|
||||
char last_art[200] = ""; /* M6.33:上次已刷新封面 artwork 路径(artwork 变化也触发整页重绘) */
|
||||
|
||||
meow_ui_activity_push(NP_SENTINEL_ACT); /* M7.0b:进入 push 哨兵(与函数尾 pop 配对)。
|
||||
* 控件 owner 一直钉哨兵,命中要走 meow_widget_hit 的
|
||||
@@ -644,16 +648,20 @@ void run_now_playing(struct app *apps, int napps)
|
||||
/* 息屏期只低频轮询按键(唤醒用),不重画不读触摸(FBIOBLANK 已挂起 goodix) */
|
||||
if (!meow_screen_on) { usleep(100 * 1000); continue; }
|
||||
|
||||
/* 媒体变化检测(元数据/源/状态):立即整页重画 */
|
||||
/* 媒体变化检测(元数据/源/状态/artwork):立即整页重画。
|
||||
* M6.33 补 artwork:ncm 状态切换可能先报空 artwork 再复原(标题/源/状态未变),
|
||||
* 原检测漏 artwork → 封面清空后不再触发整页重绘 → 播放页/歌词页封面永不恢复。 */
|
||||
const meow_media_session_t *s = meow_media_current();
|
||||
int meta_changed = !s || strcmp(last_app, s->app_id) ||
|
||||
strcmp(last_title, s->title) || last_state != s->state;
|
||||
strcmp(last_title, s->title) || strcmp(last_art, s->artwork) ||
|
||||
last_state != s->state;
|
||||
if (meta_changed) {
|
||||
if (s) {
|
||||
snprintf(last_app, sizeof last_app, "%s", s->app_id);
|
||||
snprintf(last_title, sizeof last_title, "%s", s->title);
|
||||
snprintf(last_art, sizeof last_art, "%s", s->artwork);
|
||||
last_state = s->state;
|
||||
} else { last_app[0] = 0; last_title[0] = 0; last_state = 0xFFFFFFFFu; }
|
||||
} else { last_app[0] = 0; last_title[0] = 0; last_art[0] = 0; last_state = 0xFFFFFFFFu; }
|
||||
need_redraw = 1;
|
||||
}
|
||||
/* M2.92 修死循环:空态/停止态只在「变化」时画一次(meta_changed 已覆盖
|
||||
|
||||
Reference in new issue
Block a user