mirror of
https://github.com/yattee/yattee.git
synced 2025-08-05 02:04:07 +00:00
PiP improvements
This commit is contained in:
@@ -1,27 +1,16 @@
|
||||
import Defaults
|
||||
import SwiftUI
|
||||
|
||||
struct AppleAVPlayerView: NSViewControllerRepresentable {
|
||||
struct AppleAVPlayerView: NSViewRepresentable {
|
||||
@EnvironmentObject<PlayerModel> private var player
|
||||
|
||||
@State private var controller: AppleAVPlayerViewController?
|
||||
func makeNSView(context _: Context) -> some NSView {
|
||||
let playerLayerView = PlayerLayerView(frame: .zero)
|
||||
|
||||
init(controller: AppleAVPlayerViewController? = nil) {
|
||||
self.controller = controller
|
||||
playerLayerView.player = player
|
||||
|
||||
return playerLayerView
|
||||
}
|
||||
|
||||
func makeNSViewController(context _: Context) -> AppleAVPlayerViewController {
|
||||
if self.controller != nil {
|
||||
return self.controller!
|
||||
}
|
||||
|
||||
let controller = AppleAVPlayerViewController()
|
||||
|
||||
controller.playerModel = player
|
||||
player.avPlayerBackend.controller = controller
|
||||
|
||||
return controller
|
||||
}
|
||||
|
||||
func updateNSViewController(_: AppleAVPlayerViewController, context _: Context) {}
|
||||
func updateNSView(_: NSViewType, context _: Context) {}
|
||||
}
|
||||
|
@@ -1,34 +0,0 @@
|
||||
import AVKit
|
||||
import SwiftUI
|
||||
|
||||
final class AppleAVPlayerViewController: NSViewController {
|
||||
var playerModel: PlayerModel!
|
||||
var playerView = AVPlayerView()
|
||||
var pictureInPictureDelegate = PictureInPictureDelegate()
|
||||
|
||||
var aspectRatio: Double? {
|
||||
let ratio = Double(playerView.videoBounds.width) / Double(playerView.videoBounds.height)
|
||||
|
||||
if !ratio.isFinite {
|
||||
return VideoPlayerView.defaultAspectRatio
|
||||
}
|
||||
|
||||
return [ratio, 1.0].max()!
|
||||
}
|
||||
|
||||
override func viewDidDisappear() {
|
||||
super.viewDidDisappear()
|
||||
}
|
||||
|
||||
override func loadView() {
|
||||
playerView.player = playerModel.avPlayerBackend.avPlayer
|
||||
pictureInPictureDelegate.playerModel = playerModel
|
||||
|
||||
playerView.controlsStyle = .none
|
||||
playerView.allowsPictureInPicturePlayback = true
|
||||
|
||||
playerView.pictureInPictureDelegate = pictureInPictureDelegate
|
||||
|
||||
view = playerView
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user