summaryrefslogtreecommitdiffstats
path: root/video/out/cocoa_cb_common.swift
diff options
context:
space:
mode:
authorder richter <der.richter@gmx.de>2019-11-30 23:47:52 +0100
committerder richter <der.richter@gmx.de>2019-12-15 20:07:11 +0100
commitc8cc203735d73f62def2692d1027f45ac10c03db (patch)
tree021ddf9157de39ea066f727f7bc298eb2915531b /video/out/cocoa_cb_common.swift
parente5676a67eef087aba1ccc0ab707cc5f96cc09470 (diff)
downloadmpv-c8cc203735d73f62def2692d1027f45ac10c03db.tar.bz2
mpv-c8cc203735d73f62def2692d1027f45ac10c03db.tar.xz
cocoa-cb: use m_config_cache and new VOCTRL for option handling
this removes the direct access of the mp_vo_opts stuct via the vo struct and replaces it with the m_config_cache usage. this updates the fullscreen and window-minimized property via m_config_cache_write_opt instead of the old mechanism via VOCTRL and event flagging. also use the new VOCTRL_VO_OPTS_CHANGED event for fullscreen and border changes.
Diffstat (limited to 'video/out/cocoa_cb_common.swift')
-rw-r--r--video/out/cocoa_cb_common.swift67
1 files changed, 34 insertions, 33 deletions
diff --git a/video/out/cocoa_cb_common.swift b/video/out/cocoa_cb_common.swift
index 504f0dfad6..aa1315fbbf 100644
--- a/video/out/cocoa_cb_common.swift
+++ b/video/out/cocoa_cb_common.swift
@@ -59,7 +59,6 @@ class CocoaCB: NSObject {
layer = VideoLayer(cocoaCB: self)
libmpv.observeFlag("ontop")
- libmpv.observeFlag("border")
libmpv.observeFlag("keepaspect-window")
libmpv.observeString("macos-title-bar-style")
libmpv.observeString("macos-title-bar-appearance")
@@ -68,10 +67,10 @@ class CocoaCB: NSObject {
}
func preinit(_ vo: UnsafeMutablePointer<vo>) {
+ mpv = MPVHelper(vo, "cocoacb")
+
if backendState == .uninitialized {
backendState = .needsInit
-
- mpv = MPVHelper(vo, "cocoacb")
view = EventsView(cocoaCB: self)
view?.layer = layer
view?.wantsLayer = true
@@ -84,6 +83,7 @@ class CocoaCB: NSObject {
func uninit() {
window?.orderOut(nil)
+ mpv = nil
}
func reconfig(_ vo: UnsafeMutablePointer<vo>) {
@@ -99,10 +99,13 @@ class CocoaCB: NSObject {
}
func initBackend(_ vo: UnsafeMutablePointer<vo>) {
- let opts: mp_vo_opts = vo.pointee.opts.pointee
NSApp.setActivationPolicy(.regular)
setAppIcon()
+ guard let opts: mp_vo_opts = mpv?.opts else {
+ libmpv.sendError("Something went wrong, no MPVHelper was initialized")
+ exit(1)
+ }
guard let view = self.view else {
libmpv.sendError("Something went wrong, no View was initialized")
exit(1)
@@ -144,8 +147,9 @@ class CocoaCB: NSObject {
}
func updateWindowSize(_ vo: UnsafeMutablePointer<vo>) {
- let opts: mp_vo_opts = vo.pointee.opts.pointee
- guard let targetScreen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main else {
+ guard let opts: mp_vo_opts = mpv?.opts,
+ let targetScreen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main else
+ {
libmpv.sendWarning("Couldn't update Window size, no Screen available")
return
}
@@ -177,13 +181,13 @@ class CocoaCB: NSObject {
}
func startDisplayLink(_ vo: UnsafeMutablePointer<vo>) {
- let opts: mp_vo_opts = vo.pointee.opts.pointee
CVDisplayLinkCreateWithActiveCGDisplays(&link)
- guard let screen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main,
+ guard let opts: mp_vo_opts = mpv?.opts,
+ let screen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main,
let link = self.link else
{
- libmpv.sendWarning("Couldn't start DisplayLink, no Screen or DisplayLink available")
+ libmpv.sendWarning("Couldn't start DisplayLink, no MPVHelper, Screen or DisplayLink available")
return
}
@@ -426,8 +430,8 @@ class CocoaCB: NSObject {
var controlCallback: mp_render_cb_control_fn = { ( vo, ctx, events, request, data ) -> Int32 in
let ccb = unsafeBitCast(ctx, to: CocoaCB.self)
- guard let vout = vo, let opts: mp_vo_opts = vout.pointee.opts?.pointee else {
- ccb.libmpv.sendWarning("Nil vo or opts in Control Callback")
+ guard let vout = vo else {
+ ccb.libmpv.sendWarning("Nil vo in Control Callback")
return VO_FALSE
}
@@ -438,17 +442,25 @@ class CocoaCB: NSObject {
return VO_TRUE
}
return VO_FALSE
- case VOCTRL_FULLSCREEN:
- DispatchQueue.main.async {
- ccb.window?.toggleFullScreen(nil)
+ case VOCTRL_VO_OPTS_CHANGED:
+ guard let mpv: MPVHelper = ccb.mpv else {
+ return VO_FALSE
}
- return VO_TRUE
- case VOCTRL_GET_FULLSCREEN:
- if let fsData = data?.assumingMemoryBound(to: Int32.self) {
- fsData.pointee = (ccb.window?.isInFullscreen ?? false) ? 1 : 0
- return VO_TRUE
+
+ var opt: UnsafeMutableRawPointer?
+ while mpv.nextChangedConfig(property: &opt) {
+ if opt! == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.border) {
+ DispatchQueue.main.async {
+ ccb.window?.border = Bool(mpv.opts.border)
+ }
+ }
+ if opt! == UnsafeMutableRawPointer(&mpv.optsPtr.pointee.fullscreen) {
+ DispatchQueue.main.async {
+ ccb.window?.toggleFullScreen(nil)
+ }
+ }
}
- return VO_FALSE
+ return VO_TRUE
case VOCTRL_GET_DISPLAY_FPS:
if let fps = data?.assumingMemoryBound(to: CDouble.self) {
fps.pointee = ccb.currentFps()
@@ -475,7 +487,7 @@ class CocoaCB: NSObject {
let size = UnsafeBufferPointer(start: sizeData, count: 2)
var rect = NSMakeRect(0, 0, CGFloat(size[0]), CGFloat(size[1]))
DispatchQueue.main.async {
- if let screen = ccb.window?.currentScreen, !Bool(opts.hidpi_window_scale) {
+ if let screen = ccb.window?.currentScreen, !Bool(ccb.mpv?.opts.hidpi_window_scale ?? 1) {
rect = screen.convertRectFromBacking(rect)
}
ccb.window?.updateSize(rect.size)
@@ -483,19 +495,12 @@ class CocoaCB: NSObject {
return VO_TRUE
}
return VO_FALSE
- case VOCTRL_GET_WIN_STATE:
- if let minimized = data?.assumingMemoryBound(to: Int32.self) {
- minimized.pointee = ccb.window?.isMiniaturized ?? false ?
- VO_WIN_STATE_MINIMIZED : Int32(0)
- return VO_TRUE
- }
- return VO_FALSE
case VOCTRL_GET_DISPLAY_NAMES:
if let dnames = data?.assumingMemoryBound(to: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?.self) {
var array: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>? = nil
var count: Int32 = 0
let screen = ccb.window != nil ? ccb.window?.screen :
- ccb.getScreenBy(id: Int(opts.screen_id)) ??
+ ccb.getScreenBy(id: Int(ccb.mpv?.opts.screen_id ?? 0)) ??
NSScreen.main
let displayName = screen?.displayName ?? "Unknown"
@@ -569,10 +574,6 @@ class CocoaCB: NSObject {
}
switch String(cString: property.name) {
- case "border":
- if let data = LibmpvHelper.mpvFlagToBool(property.data) {
- window?.border = data
- }
case "ontop":
if let data = LibmpvHelper.mpvFlagToBool(property.data) {
window?.setOnTop(data, Int(mpv?.opts.ontop_level ?? -1))