fix(ui): finish pending Qt interaction polish

Keep segmented controls within their visual well, use the active theme for playback indicators, disconnect inactive pulse receivers and improve near-fit song metadata.

cx
This commit is contained in:
vicrodh committed 2026-08-25 18:25:05 -06:00
1 parent 52fd887f15
commit 1bd99aed67
8 files changed
+55 -23

No files matched your search

@@ -206,7 +206,6 @@ Item {
// Track info (shared, homologated across the panels, :173-176).
ImmersiveTrackMeta {
width: root.width
equalizerTint: "#7c3aed"
}
}
}
@@ -354,7 +354,6 @@ Item {
// fan + metadata read as one balanced group (:276-283).
ImmersiveTrackMeta {
width: root.width
equalizerTint: "#7c3aed"
}
}
}
+13 -7
View File
@@ -25,12 +25,15 @@
import QtQuick
import com.blitzfc.qbz
import "../theme"
Item {
id: root
/// Bar color — every immersive mount passes #7c3aed.
property color tint: "#7c3aed"
QbzTheme { id: theme }
/// Bar color follows the active theme unless a host deliberately overrides it.
property color tint: theme.accent
width: 18
height: 14
@@ -43,8 +46,12 @@ Item {
// (180 Hz on the owner's panel) and every update is a whole-window
// present. The wave's period is 800 ms, so the 30 Hz pulse samples it
// ~24 times per loop — indistinguishable. Riding the pulse also means
// ZERO extra presents: the bars move in the same frame as everything
// else the pulse moves.
// ZERO extra clocks: the bars move in the same frame as everything else
// the pulse moves. A pulse receiver still has CPU cost, though, so an
// inactive indicator disconnects structurally instead of waking a JS
// handler just to return. TrackRow also loads this object only for the
// one active, visible play cell; a long expanded box set therefore owns
// one receiver rather than one receiver per track.
//
// The `active` gate belongs to the HOST, because this component mounts
// in always-alive-but-invisible trees (the immersive overlay) where a
@@ -58,10 +65,9 @@ Item {
property real t: 0
readonly property int _tickMs: 33
Connections {
target: QbzShell
target: root.active && root.visible ? QbzShell : null
function onPulseMsChanged() {
if (root.active && root.visible)
root.t = (root.t + root._tickMs / 800.0) % 1.0
root.t = (root.t + root._tickMs / 800.0) % 1.0
}
}
@@ -20,12 +20,15 @@
import QtQuick
import com.blitzfc.qbz
import "../controls"
import "../theme"
Column {
id: root
/// Equalizer tint + "Now Playing" label color (Slint equalizer-tint).
property color equalizerTint: "#7c3aed"
QbzTheme { id: theme }
/// Equalizer tint + "Now Playing" label follow the active theme.
property color equalizerTint: theme.accent
spacing: 6
@@ -541,7 +541,6 @@ Item {
ImmersiveTrackMeta {
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width - 44
equalizerTint: "#7c3aed"
}
}
}
@@ -116,7 +116,6 @@ Item {
// Track info (shared, homologated across the panels, :106-109).
ImmersiveTrackMeta {
width: root.width
equalizerTint: "#7c3aed"
}
}
}