fix: expand window outward for playback queue

This commit is contained in:
2026-10-18 00:37:21 +02:00
parent ce903e2367
commit 1d33f5d572
3 changed files with 31 additions and 4 deletions
+20 -4
View File
@@ -32,7 +32,22 @@ final class PlayerModel: ObservableObject {
@Published private(set) var fileIcon: NSImage?
@Published private(set) var commandError: String?
@Published private(set) var queue = PlaybackQueue()
@Published var showsQueue = false
@Published var showsQueue = false {
didSet {
guard showsQueue != oldValue, let window, !isFullScreen,
!isCompact, !compactWindow.isTransitioning else { return }
window.aspectRatio = .zero
var frame = window.frame
frame.size.width += showsQueue ? 261 : -261
if let screen = window.screen?.visibleFrame {
frame.origin.x = max(screen.minX, min(frame.minX, screen.maxX - frame.width))
}
window.setFrame(frame, display: true)
if !showsQueue, state.has_video, state.video_aspect_ratio > 0 {
window.aspectRatio = NSSize(width: state.video_aspect_ratio, height: 1)
}
}
}
private var queuePlaybackRevision: UInt64?
private var queueCompletionHandled = false
private var queueCastDevice: CastDevice?
@@ -968,14 +983,15 @@ final class PlayerModel: ObservableObject {
return
}
let screen = (window.screen ?? NSScreen.main)?.visibleFrame ?? window.frame
let width = min(window.frame.width, screen.width, screen.height * aspect)
let size = NSSize(width: width, height: width / aspect)
let sidebarWidth: CGFloat = showsQueue ? 261 : 0
let width = min(window.frame.width - sidebarWidth, screen.width - sidebarWidth, screen.height * aspect)
let size = NSSize(width: width + sidebarWidth, height: width / aspect)
// ponytail: extreme ratios retain letterboxing; compact controls if exact fitting is needed.
guard size.width >= window.minSize.width, size.height >= window.minSize.height else {
window.aspectRatio = .zero
return
}
window.aspectRatio = NSSize(width: aspect, height: 1)
window.aspectRatio = showsQueue ? .zero : NSSize(width: aspect, height: 1)
let frame = NSRect(
x: min(max(window.frame.midX - size.width / 2, screen.minX), screen.maxX - size.width),
y: min(max(window.frame.midY - size.height / 2, screen.minY), screen.maxY - size.height),