fix(qt): header atmosphere, NPB button order, small-bar alignment, sidebar collage

The album/artist header band painted the 128x128 atmosphere as ONE Image at
anchors.fill + Image.Stretch, mapping the field 1:1 onto the band. That field
is vignetted in Rust, so a 1:1 map puts its bright core dead centre and the
vignette ring on the edges - the "plasta en medio" the owner reported.
ImmersiveAtmosphere.slint:21-67 lays FOUR copies, each larger than the band
(+520/+620/+700/+560 wide) and pulled back by a negative offset with
image-fit: cover, so what shows is a crop of a magnified field. Ported with
the opaque #0a0a0b base and the header's own base/warp opacities. The phase
constants are the .slint expressions with tick = 0 (animated: false), signs
included: copy 2 subtracts where copy 1 adds, and equalising them stacks the
four into one brighter copy.

PlayerBar mounted Cast before Connect; PlayerBar.slint has ConnectButton at
:401 and cast at :646. NowPlayingBarSmall already matched and is untouched.

Seven children of the small bar's right-cluster Row carried no vertical
anchor, and a QML Row top-aligns children that do not anchor themselves, so
the 32px buttons rendered at y=0 against the 3px seek line with all the slack
below. The queue button was among them.

The sidebar playlist micro-collage used radius + clip, and clip is a
rectangular scissor that ignores radius, so the cover tiles kept hard
corners. Rounded with the MultiEffect mask idiom PlaylistCollage.qml
documents, on the same _noShaders predicate so a software renderer degrades
to square corners rather than a blank tile. Its tile layout also diverged
from SidebarPlaylistCollage.slint, which draws ONE full-bleed cover below
four covers and only splits into a 2x2 at four, with a 1px seam.

cc
This commit is contained in:
vicrodh committed 2026-08-02 16:32:03 -06:00
1 parent 9ce7ef4ca0
commit 5c2577c7ce
4 files changed
+345 -46

No files matched your search

+21 -12
View File
@@ -31,9 +31,14 @@
// Slint TransportControls/PlayerBar that descend from it):
// transport: info · shuffle · prev · play · next · repeat · "+" (Add to…)
// (+ the inline favorite heart in Classic, like Tauri)
// right: Cast · Connect · Lyrics · Now-Playing view · Audio settings
// right: Connect · Cast · Lyrics · Now-Playing view · Audio settings
// (normalization) · [6px] · Mute · slider · −/+ steppers ·
// [6px] · Queue
// Connect BEFORE Cast is the reference's order, not a preference: PlayerBar.
// slint mounts the ConnectButton at :395-401 and the cast IconButton at
// :646-653. This file had the pair inverted (Cast first) until the order was
// homologated; NowPlayingBarSmall.qml always matched (PlayerBarSmall.slint
// ConnectButton :368, cast :603).
// Tauri's Miniplayer + Full screen buttons live inside the Now-Playing view
// flyout (ViewModeMenu) since 2.0 — that ONE button holds both.
//
@@ -451,17 +456,6 @@ Rectangle {
}
Item { visible: root.largeActive; width: 12; height: 1 }
// Cast (Chromecast / DLNA) — Tauri's first right-cluster
// button. Opens the picker modal and, with it, discovery
// (PlayerBar.slint:646-664: picker-open = true +
// CastActions.open()); lit while a renderer is connected.
QbzIconButton {
name: "cast"
active: QbzPlayer.npCastActive
anchors.verticalCenter: parent.verticalCenter
onClicked: QbzCast.openPicker()
}
// Qobuz Connect — the Slint ConnectButton (PlayerBar.
// slint:32-77): monitor-speaker glyph, GOLDEN over a soft
// golden tint whenever a session is on — whether qbz is
@@ -471,6 +465,10 @@ Rectangle {
// gold tint + 1px border + gold glyph, which the shared
// button's accent-glyph `active` cannot express. The
// "amber" tint IS the reference's gold (#e0b341).
//
// FIRST of the icon cluster, ahead of Cast — the order the
// reference lays out (PlayerBar.slint:395-401 Connect,
// :646-653 Cast) and the one the Small bar already used.
Rectangle {
id: qconnectBtn
readonly property bool qcActive: QbzQConnect.qconnectConnected
@@ -518,6 +516,17 @@ Rectangle {
}
}
// Cast (Chromecast / DLNA) — SECOND, straight after
// Connect. Opens the picker modal and, with it, discovery
// (PlayerBar.slint:646-664: picker-open = true +
// CastActions.open()); lit while a renderer is connected.
QbzIconButton {
name: "cast"
active: QbzPlayer.npCastActive
anchors.verticalCenter: parent.verticalCenter
onClicked: QbzCast.openPicker()
}
// Lyrics.
QbzIconButton {
name: "mic-vocal"