diff --git a/Sources/MiniPlayerApp.swift b/Sources/MiniPlayerApp.swift index 19eca2c..04ecd91 100644 --- a/Sources/MiniPlayerApp.swift +++ b/Sources/MiniPlayerApp.swift @@ -42,20 +42,22 @@ struct MiniPlayerApp: App { } } -// MARK: - 主内容视图 +// MARK: - 主内容视图(直接渲染视频,不走BricksView) struct ContentView: View { @ObservedObject var bridge: PlayerBridge var body: some View { ZStack { - // 视频背景 - if let engine = bridge.engine, let schema = bridge.schema { - BricksView(schema: schema, engine: engine) - } else { - Color.black - } + // 直接渲染视频(跳过BricksView,避免VBox高度压缩问题) + VideoPlayerRepresentable(player: bridge.player) + .background(Color.black) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .ignoresSafeArea() + .contentShape(Rectangle()) + .onTapGesture { bridge.togglePlayPause() } + .onTapGesture(count: 2) { bridge.toggleFullscreen() } - // Logo 图标(左上角) + // Logo 图标(左上角,点击显示/隐藏Toolbar) VStack { HStack { Button(action: { bridge.showToolbar.toggle() }) { @@ -73,7 +75,7 @@ struct ContentView: View { Spacer() } - // 底部 Toolbar(半透明) + // 底部 Toolbar(半透明,初始隐藏) if bridge.showToolbar { VStack { Spacer() @@ -95,7 +97,6 @@ struct ContentView: View { } } } - .ignoresSafeArea() .sheet(isPresented: $bridge.showURLDialog) { URLInputDialog(bridge: bridge) } diff --git a/Sources/PlayerBridge.swift b/Sources/PlayerBridge.swift index 19477e3..235fa2f 100644 --- a/Sources/PlayerBridge.swift +++ b/Sources/PlayerBridge.swift @@ -72,9 +72,6 @@ final class PlayerBridge: ObservableObject { private var itemStatusObserver: NSKeyValueObservation? private var cancellables = Set() - // 视频全屏 - private var fullscreenWindow: NSWindow? - // 缓存时长 private var cachedDuration: Double = 0 @@ -406,34 +403,8 @@ final class PlayerBridge: ObservableObject { func toggleFullscreen() { #if os(macOS) - if let fw = fullscreenWindow { - fw.close() - fullscreenWindow = nil - isFullscreen = false - return - } - - guard let screen = NSScreen.main else { return } - let win = NSWindow(contentRect: screen.frame, styleMask: .borderless, backing: .buffered, defer: false) - win.level = .screenSaver - win.backgroundColor = .black - win.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] - win.hasShadow = false - win.ignoresMouseEvents = false - - let hostView = NSHostingView(rootView: - VideoPlayerRepresentable(player: player) - .background(Color.black) - .frame(maxWidth: .infinity, maxHeight: .infinity) - .contentShape(Rectangle()) - .onTapGesture { [weak self] in self?.toggleFullscreen() } - ) - hostView.frame = screen.frame - win.contentView = hostView - win.makeKeyAndOrderFront(nil) - NSApp.hide(nil) - fullscreenWindow = win - isFullscreen = true + guard let window = NSApp.keyWindow ?? NSApp.windows.first else { return } + window.toggleFullScreen(nil) #endif }