diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-29 13:04:12 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-29 13:04:12 +0200 |
| commit | b33c7f5ec094469becd4f842e2bed37efb85dcfb (patch) | |
| tree | eb924a74094f15dd4511fbc43172a2902d4a63d3 /desktop/modules/sound/README.md | |
| parent | ae193343b9633eb79287c4e2589b95c02f538e48 (diff) | |
| download | quickshell-b33c7f5ec094469becd4f842e2bed37efb85dcfb.tar.gz quickshell-b33c7f5ec094469becd4f842e2bed37efb85dcfb.zip | |
feat(sound): crossfade album art, fade to plain without it
The OSD background held one Image, so a track change swapped covers in a
single frame. Two images now take turns: the new cover loads into the
hidden one and is brought to the front only once it reports Ready, then
both fade over 300ms. Waiting for Ready is what keeps a slow or remote
art server from fading through black.
The blur, scrim, sheen and grain are grouped under one item whose
opacity follows artOn. It goes false when the player has no art or the
cover for the current track errors, so the panel fades back to its plain
translucent look instead of snapping, or keeping a stale cover that
reads as a fault. It goes true again only when a new cover has loaded,
so returning from plain never flashes the previous one.
The back image's source is cleared before being set, so a URL it
already holds still reloads and reports a status. onWantChanged misses
the value at load, hence the Component.onCompleted call.
Not yet seen on screen: the shell reloaded it cleanly but the fade was
not watched through a track change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'desktop/modules/sound/README.md')
| -rw-r--r-- | desktop/modules/sound/README.md | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/desktop/modules/sound/README.md b/desktop/modules/sound/README.md index d92d017..5205be8 100644 --- a/desktop/modules/sound/README.md +++ b/desktop/modules/sound/README.md @@ -44,7 +44,13 @@ When the track has art, it also fills the whole panel as a blurred background under a dark scrim (`Theme.base` at 0.82), and the thumbnail stays sharp in the row. The palette is dark, so the scrim is what keeps text legible on a light cover; blur alone did not. The art is opaque, so it hides the -compositor's frosting while it shows. Without art the panel is unchanged. +compositor's frosting while it shows, so a faint sheen and grain fake it on +the scrim. Without art the panel is unchanged. + +A new cover crossfades in once it has decoded, so a slow art server never +fades through black. When the track has no art, or its cover fails to load, +the whole art layer fades out to the plain panel instead of keeping the last +cover. Hovering the panel freezes its fade so the buttons can be clicked; moving away starts the countdown again. Without a hover it behaves exactly as it did before |
