fix: let queue rows scroll beneath header fade

This commit is contained in:
2026-10-18 21:29:40 +02:00
parent c551203af2
commit 82f88c8cab
2 changed files with 2 additions and 2 deletions
+1 -1
View File
@@ -73,7 +73,7 @@ Resizing with the queue open preserves the video's aspect ratio while keeping th
While the sidebar is open, its persistent top-right overlay holds the pin, Cast and settings controls above the list without a surrounding glass container, with matching top and right button insets; these and the bottom queue controls do not fade with the video controls. The native layout check verifies that all three header glyphs actually render. Closing the sidebar returns the pin, Cast and settings controls to the auto-hiding video titlebar with its glass container. The queue toggle stays in the playback controls. Space and configured playback shortcuts continue working with queue-list focus; Tab navigation, deliberately focused buttons/sliders and text entry keep their native keyboard behavior. While the sidebar is open, its persistent top-right overlay holds the pin, Cast and settings controls above the list without a surrounding glass container, with matching top and right button insets; these and the bottom queue controls do not fade with the video controls. The native layout check verifies that all three header glyphs actually render. Closing the sidebar returns the pin, Cast and settings controls to the auto-hiding video titlebar with its glass container. The queue toggle stays in the playback controls. Space and configured playback shortcuts continue working with queue-list focus; Tab navigation, deliberately focused buttons/sliders and text entry keep their native keyboard behavior.
The sidebar, top controls and queue footer share an opaque playlist background. The top backing fades downward over 20 points; the list starts below the full 32-point control row and its fade so the first entry is unobscured. The footer backing fades upward into the list by the same amount, keeping scrolled filenames from interfering with the controls without hard edges. The sidebar, top controls and queue footer share an opaque playlist background. The top backing fades downward over 20 points. A 52-point top scroll-content margin clears the 32-point control row and its fade for the first entry, while the list viewport extends behind the controls so scrolling rows pass beneath the gradient rather than a hard clipping edge. The footer backing fades upward into the list by the same amount, keeping scrolled filenames from interfering with the controls without hard edges.
Playback advances automatically and stops at the end, without wrapping. **Previous Queue Item** and **Next Queue Item** are available in the sidebar and Playback menu and are disabled at their respective ends. Reordering or removing another item does not interrupt playback; removing the current item plays its next neighbor, or stops if there is none. A playback error stays on that item rather than skipping it. Playback advances automatically and stops at the end, without wrapping. **Previous Queue Item** and **Next Queue Item** are available in the sidebar and Playback menu and are disabled at their respective ends. Reordering or removing another item does not interrupt playback; removing the current item plays its next neighbor, or stops if there is none. A playback error stays on that item rather than skipping it.
+1 -1
View File
@@ -2307,7 +2307,6 @@ private struct PlayerContent: View {
private var queueSidebar: some View { private var queueSidebar: some View {
VStack(spacing: 0) { VStack(spacing: 0) {
Color.clear.frame(height: 52)
List { List {
ForEach(model.queue.items) { item in ForEach(model.queue.items) { item in
let isCurrent = item.id == model.queue.currentID let isCurrent = item.id == model.queue.currentID
@@ -2376,6 +2375,7 @@ private struct PlayerContent: View {
.listStyle(.plain) .listStyle(.plain)
.scrollContentBackground(.hidden) .scrollContentBackground(.hidden)
.contentMargins(.horizontal, 0, for: .scrollContent) .contentMargins(.horizontal, 0, for: .scrollContent)
.contentMargins(.top, 52, for: .scrollContent)
.overlay { .overlay {
if model.queue.items.isEmpty { if model.queue.items.isEmpty {
Text("Drop local files here to add them to the queue.") Text("Drop local files here to add them to the queue.")