mirror of
https://github.com/yattee/yattee.git
synced 2025-08-05 02:04:07 +00:00
Hello, mpv! 🎉
This commit is contained in:
27
macOS/AVPlayerView.swift
Normal file
27
macOS/AVPlayerView.swift
Normal file
@@ -0,0 +1,27 @@
|
||||
import Defaults
|
||||
import SwiftUI
|
||||
|
||||
struct AVPlayerView: NSViewControllerRepresentable {
|
||||
@EnvironmentObject<PlayerModel> private var player
|
||||
|
||||
@State private var controller: AVPlayerViewController?
|
||||
|
||||
init(controller: AVPlayerViewController? = nil) {
|
||||
self.controller = controller
|
||||
}
|
||||
|
||||
func makeNSViewController(context _: Context) -> AVPlayerViewController {
|
||||
if self.controller != nil {
|
||||
return self.controller!
|
||||
}
|
||||
|
||||
let controller = AVPlayerViewController()
|
||||
|
||||
controller.playerModel = player
|
||||
player.controller = controller
|
||||
|
||||
return controller
|
||||
}
|
||||
|
||||
func updateNSViewController(_: AVPlayerViewController, context _: Context) {}
|
||||
}
|
34
macOS/AVPlayerViewController.swift
Normal file
34
macOS/AVPlayerViewController.swift
Normal file
@@ -0,0 +1,34 @@
|
||||
import AVKit
|
||||
import SwiftUI
|
||||
|
||||
final class AVPlayerViewController: 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.avPlayer
|
||||
pictureInPictureDelegate.playerModel = playerModel
|
||||
|
||||
playerView.allowsPictureInPicturePlayback = true
|
||||
playerView.showsFullScreenToggleButton = true
|
||||
|
||||
playerView.pictureInPictureDelegate = pictureInPictureDelegate
|
||||
|
||||
view = playerView
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user