fix(player): refine immersive lyrics and seekbars

Reuse the split lyrics renderer for full-screen timed fill, add a contrast shadow and expose the immersive song card there. Render the compact seekbar as a stable three-sine motif and make the larger waveform use normalized rounded capsules with stronger peaks.

cx
This commit is contained in:
vicrodh committed 2026-08-25 09:38:43 -06:00
1 parent 5501221fdc
commit 9b4bb865bf
6 files changed
+172 -53

No files matched your search

@@ -29,8 +29,8 @@
// spectrum band and the viz eye toggle; port of the Slint root
// TouchArea :1283-1286). Stacked BELOW panels + chrome.
// 3. FOCUS panels (viewMode==0 && mode==N) / the SPLIT layout (viewMode==1)
// 4. ImmersiveSongCard (viewMode==0 && mode==6 && npHasTrack — trap 19;
// does NOT fade with the chrome, :1602-1605)
// 4. ImmersiveSongCard (Wave Bed, full Lyrics and shader scenes;
// does NOT fade with the chrome)
// 5. ImmersivePlayerBar (B5, :1607-1616) — centered, y = height-90-24,
// fades with the chrome like the header
// 6. ImmersiveHeader band
@@ -356,7 +356,7 @@ Item {
}
}
}
// FOCUS Lyrics (mode 4, B4 §6.6): the giant-line variant. It shares the
// FOCUS Lyrics (mode 4, B4 §6.6): the one-line variant. It shares the
// immersive LyricsSyncEngine with the split lyrics mount (trap 22 — the
// gate covers BOTH lyric surfaces and nothing else). No entry load: Qt
// fetches lyrics automatically per track (§5.5).
@@ -638,9 +638,10 @@ Item {
}
// --- Layer 4: ImmersiveSongCard (§5.1, :1602-1605) ----------------------
// Slint shows it bottom-right ONLY over the shader backgrounds OR in
// WaveBed (shader-mode > 0 || (view-mode == 0 && mode == 6)) &&
// has-track — the focus panels render their own metadata. In v1
// Keep the compact bottom-right metadata over shader backgrounds,
// Wave Bed and full-screen Lyrics. The lyrics surface deliberately keeps
// one line at a time, so the card supplies the otherwise absent track
// context without competing with the active line.
// shader-mode was constant 0 so the first arm was dead (trap 19); A1
// makes it real. NON-interactive; does NOT fade with the auto-hide
// chrome (no opacity binding here — that is deliberate).
@@ -651,7 +652,8 @@ Item {
anchors.rightMargin: 24
anchors.bottomMargin: 24
visible: (QbzShaderScene.scene > 0
|| (QbzImmersive.viewMode === 0 && QbzImmersive.mode === 6))
|| (QbzImmersive.viewMode === 0
&& (QbzImmersive.mode === 4 || QbzImmersive.mode === 6)))
&& QbzPlayer.npHasTrack
}