summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorder richter <der.richter@gmx.de>2024-03-19 22:25:39 +0100
committerder richter <der.richter@gmx.de>2024-03-21 18:33:15 +0100
commitb480daad88706b216bceb79f5c78f55c05ce65ae (patch)
tree84b3401263b820663a37f42713bd5431679012ee
parent6defd49aa1f1d7b8a4d536c2a9fbf856dcf541db (diff)
downloadmpv-b480daad88706b216bceb79f5c78f55c05ce65ae.tar.bz2
mpv-b480daad88706b216bceb79f5c78f55c05ce65ae.tar.xz
mac/option: make option helper none optional
gets rid of some unwrapping boilerplate and nil coalescing operators.
-rw-r--r--osdep/mac/precise_timer.swift2
-rw-r--r--video/out/cocoa_cb_common.swift13
-rw-r--r--video/out/mac/common.swift64
-rw-r--r--video/out/mac/title_bar.swift8
-rw-r--r--video/out/mac/view.swift2
-rw-r--r--video/out/mac/window.swift24
-rw-r--r--video/out/mac_common.swift17
7 files changed, 50 insertions, 80 deletions
diff --git a/osdep/mac/precise_timer.swift b/osdep/mac/precise_timer.swift
index 586925f1f9..d685a18d94 100644
--- a/osdep/mac/precise_timer.swift
+++ b/osdep/mac/precise_timer.swift
@@ -24,7 +24,7 @@ struct Timing {
class PreciseTimer {
unowned var common: Common
- var option: OptionHelper? { get { return common.option } }
+ var option: OptionHelper { get { return common.option } }
let nanoPerSecond: Double = 1e+9
let machToNano: Double = {
diff --git a/video/out/cocoa_cb_common.swift b/video/out/cocoa_cb_common.swift
index b482499646..10485778f0 100644
--- a/video/out/cocoa_cb_common.swift
+++ b/video/out/cocoa_cb_common.swift
@@ -32,10 +32,10 @@ class CocoaCB: Common {
@objc init(_ mpvHandle: OpaquePointer) {
- let newlog = mp_log_new(UnsafeMutablePointer<MPContext>(mpvHandle), mp_client_get_log(mpvHandle), "cocoacb")
+ let newlog = mp_log_new(UnsafeMutablePointer(mpvHandle), mp_client_get_log(mpvHandle), "cocoacb")
+ let option = OptionHelper(UnsafeMutablePointer(mpvHandle), mp_client_get_global(mpvHandle))
libmpv = LibmpvHelper(mpvHandle, newlog)
- super.init(newlog)
- option = OptionHelper(UnsafeMutablePointer(mpvHandle), mp_client_get_global(mpvHandle))
+ super.init(option, newlog)
layer = GLLayer(cocoaCB: self)
}
@@ -59,18 +59,17 @@ class CocoaCB: Common {
func uninit() {
window?.orderOut(nil)
window?.close()
- option = nil
}
func reconfig(_ vo: UnsafeMutablePointer<vo>) {
self.vo = vo
if backendState == .needsInit {
DispatchQueue.main.sync { self.initBackend(vo) }
- } else if option?.opts.auto_window_resize ?? true {
+ } else if option.opts.auto_window_resize {
DispatchQueue.main.async {
self.updateWindowSize(vo)
self.layer?.update(force: true)
- if self.option?.opts.focus_on ?? 1 == 2 {
+ if self.option.opts.focus_on == 2 {
NSApp.activate(ignoringOtherApps: true)
}
}
@@ -205,7 +204,7 @@ class CocoaCB: Common {
func shutdown(_ destroy: Bool = false) {
isShuttingDown = window?.isAnimating ?? false ||
- window?.isInFullscreen ?? false && option?.opts.native_fs ?? true
+ window?.isInFullscreen ?? false && option.opts.native_fs
if window?.isInFullscreen ?? false && !(window?.isAnimating ?? false) {
window?.close()
}
diff --git a/video/out/mac/common.swift b/video/out/mac/common.swift
index 7fcc4b607a..504c20bea5 100644
--- a/video/out/mac/common.swift
+++ b/video/out/mac/common.swift
@@ -19,7 +19,7 @@ import Cocoa
import IOKit.pwr_mgt
class Common: NSObject {
- var option: OptionHelper?
+ var option: OptionHelper
var input: InputHelper?
var log: LogHelper
var vo: UnsafeMutablePointer<vo>?
@@ -48,16 +48,12 @@ class Common: NSObject {
didSet { if let window = window { window.title = title } }
}
- init(_ mpLog: OpaquePointer?) {
+ init(_ opt: OptionHelper, _ mpLog: OpaquePointer?) {
+ option = opt
log = LogHelper(mpLog)
}
func initMisc(_ vo: UnsafeMutablePointer<vo>) {
- guard let option = option else {
- log.sendError("Something went wrong, no OptionHelper was initialized")
- exit(1)
- }
-
startDisplayLink(vo)
initLightSensor()
addDisplayReconfigureObserver()
@@ -66,11 +62,6 @@ class Common: NSObject {
}
func initApp() {
- guard let option = option else {
- log.sendError("Something went wrong, no OptionHelper was initialized")
- exit(1)
- }
-
var policy: NSApplication.ActivationPolicy = .regular
switch option.macOpts.macos_app_activation_policy {
case 0:
@@ -88,7 +79,7 @@ class Common: NSObject {
}
func initWindow(_ vo: UnsafeMutablePointer<vo>, _ previousActiveApp: NSRunningApplication?) {
- let (option, targetScreen, wr) = getInitProperties(vo)
+ let (targetScreen, wr) = getInitProperties(vo)
guard let view = self.view else {
log.sendError("Something went wrong, no View was initialized")
@@ -133,7 +124,7 @@ class Common: NSObject {
}
func initView(_ vo: UnsafeMutablePointer<vo>, _ layer: CALayer) {
- let (_, _, wr) = getInitProperties(vo)
+ let (_, wr) = getInitProperties(vo)
view = View(frame: wr, common: self)
guard let view = self.view else {
@@ -148,7 +139,7 @@ class Common: NSObject {
}
func initWindowState() {
- if option?.opts.fullscreen ?? false {
+ if option.opts.fullscreen {
DispatchQueue.main.async {
self.window?.toggleFullScreen(nil)
}
@@ -410,11 +401,6 @@ class Common: NSObject {
}
func getTargetScreen(forFullscreen fs: Bool) -> NSScreen? {
- guard let option = option else {
- log.sendWarning("Unexpected nil value in getTargetScreen")
- return nil
- }
-
let screenID = fs ? option.opts.fsscreen_id : option.opts.screen_id
var name: String?
if let screenName = fs ? option.opts.fsscreen_name : option.opts.screen_name {
@@ -432,7 +418,7 @@ class Common: NSObject {
func getWindowGeometry(forScreen screen: NSScreen,
videoOut vo: UnsafeMutablePointer<vo>) -> NSRect {
let r = screen.convertRectToBacking(screen.frame)
- let targetFrame = (option?.macOpts.macos_geometry_calculation ?? Int32(FRAME_VISIBLE)) == FRAME_VISIBLE
+ let targetFrame = option.macOpts.macos_geometry_calculation == FRAME_VISIBLE
? screen.visibleFrame : screen.frame
let rv = screen.convertRectToBacking(targetFrame)
@@ -459,11 +445,7 @@ class Common: NSObject {
return screen.convertRectFromBacking(NSMakeRect(x, y, width, height))
}
- func getInitProperties(_ vo: UnsafeMutablePointer<vo>) -> (OptionHelper, NSScreen, NSRect) {
- guard let option = option else {
- log.sendError("Something went wrong, no OptionHelper was initialized")
- exit(1)
- }
+ func getInitProperties(_ vo: UnsafeMutablePointer<vo>) -> (NSScreen, NSRect) {
guard let targetScreen = getTargetScreen(forFullscreen: false) ?? NSScreen.main else {
log.sendError("Something went wrong, no Screen was found")
exit(1)
@@ -471,7 +453,7 @@ class Common: NSObject {
let wr = getWindowGeometry(forScreen: targetScreen, videoOut: vo)
- return (option, targetScreen, wr)
+ return (targetScreen, wr)
}
// call before initApp, because on macOS +10.15 it changes the active App
@@ -516,11 +498,6 @@ class Common: NSObject {
request: UInt32,
data: UnsafeMutableRawPointer?) -> Int32
{
- guard let option = option else {
- log.sendWarning("Unexpected nil value in Control Callback")
- return VO_FALSE
- }
-
switch mp_voctrl(request) {
case VOCTRL_CHECK_EVENTS:
events.pointee |= Int32(checkEvents())
@@ -531,7 +508,7 @@ class Common: NSObject {
switch opt {
case TypeHelper.toPointer(&option.optsPtr.pointee.border):
DispatchQueue.main.async {
- self.window?.border = Bool(option.opts.border)
+ self.window?.border = Bool(self.option.opts.border)
}
case TypeHelper.toPointer(&option.optsPtr.pointee.fullscreen):
DispatchQueue.main.async {
@@ -540,34 +517,34 @@ class Common: NSObject {
case TypeHelper.toPointer(&option.optsPtr.pointee.ontop): fallthrough
case TypeHelper.toPointer(&option.optsPtr.pointee.ontop_level):
DispatchQueue.main.async {
- self.window?.setOnTop(Bool(option.opts.ontop), Int(option.opts.ontop_level))
+ self.window?.setOnTop(Bool(self.option.opts.ontop), Int(self.option.opts.ontop_level))
}
case TypeHelper.toPointer(&option.optsPtr.pointee.all_workspaces):
DispatchQueue.main.async {
- self.window?.setOnAllWorkspaces(Bool(option.opts.all_workspaces))
+ self.window?.setOnAllWorkspaces(Bool(self.option.opts.all_workspaces))
}
case TypeHelper.toPointer(&option.optsPtr.pointee.keepaspect_window):
DispatchQueue.main.async {
- self.window?.keepAspect = Bool(option.opts.keepaspect_window)
+ self.window?.keepAspect = Bool(self.option.opts.keepaspect_window)
}
case TypeHelper.toPointer(&option.optsPtr.pointee.window_minimized):
DispatchQueue.main.async {
- self.window?.setMinimized(Bool(option.opts.window_minimized))
+ self.window?.setMinimized(Bool(self.option.opts.window_minimized))
}
case TypeHelper.toPointer(&option.optsPtr.pointee.window_maximized):
DispatchQueue.main.async {
- self.window?.setMaximized(Bool(option.opts.window_maximized))
+ self.window?.setMaximized(Bool(self.option.opts.window_maximized))
}
case TypeHelper.toPointer(&option.optsPtr.pointee.cursor_passthrough):
DispatchQueue.main.async {
- self.window?.ignoresMouseEvents = option.opts.cursor_passthrough
+ self.window?.ignoresMouseEvents = self.option.opts.cursor_passthrough
}
case TypeHelper.toPointer(&option.optsPtr.pointee.geometry): fallthrough
case TypeHelper.toPointer(&option.optsPtr.pointee.autofit): fallthrough
case TypeHelper.toPointer(&option.optsPtr.pointee.autofit_smaller): fallthrough
case TypeHelper.toPointer(&option.optsPtr.pointee.autofit_larger):
DispatchQueue.main.async {
- let (_, _, wr) = self.getInitProperties(vo)
+ let (_, wr) = self.getInitProperties(vo)
self.window?.updateFrame(wr)
}
default:
@@ -643,7 +620,7 @@ class Common: 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 = self.window?.currentScreen, !Bool(self.option?.opts.hidpi_window_scale ?? true) {
+ if let screen = self.window?.currentScreen, !Bool(self.option.opts.hidpi_window_scale) {
rect = screen.convertRectFromBacking(rect)
}
self.window?.updateSize(rect.size)
@@ -693,11 +670,6 @@ class Common: NSObject {
}
func macOptsUpdate() {
- guard let option = option else {
- log.sendWarning("Unexpected nil value in mac opts update")
- return
- }
-
var opt: UnsafeMutableRawPointer?
while option.nextChangedMacOption(property: &opt) {
switch opt {
diff --git a/video/out/mac/title_bar.swift b/video/out/mac/title_bar.swift
index f878eeaff5..dd717869d7 100644
--- a/video/out/mac/title_bar.swift
+++ b/video/out/mac/title_bar.swift
@@ -19,7 +19,7 @@ import Cocoa
class TitleBar: NSVisualEffectView {
unowned var common: Common
- var option: OptionHelper? { get { return common.option } }
+ var option: OptionHelper { get { return common.option } }
var systemBar: NSView? {
get { return common.window?.standardWindowButton(.closeButton)?.superview }
@@ -64,9 +64,9 @@ class TitleBar: NSVisualEffectView {
window.contentView?.addSubview(self, positioned: .above, relativeTo: nil)
window.titlebarAppearsTransparent = true
window.styleMask.insert(.fullSizeContentView)
- set(appearance: Int(option?.macOpts.macos_title_bar_appearance ?? 0))
- set(material: Int(option?.macOpts.macos_title_bar_material ?? 0))
- set(color: option?.macOpts.macos_title_bar_color ?? "#00000000")
+ set(appearance: Int(option.macOpts.macos_title_bar_appearance))
+ set(material: Int(option.macOpts.macos_title_bar_material))
+ set(color: option.macOpts.macos_title_bar_color)
}
required init?(coder: NSCoder) {
diff --git a/video/out/mac/view.swift b/video/out/mac/view.swift
index c6e9e6ddac..f779120696 100644
--- a/video/out/mac/view.swift
+++ b/video/out/mac/view.swift
@@ -19,7 +19,7 @@ import Cocoa
class View: NSView, CALayerDelegate {
unowned var common: Common
- var option: OptionHelper? { get { return common.option } }
+ var option: OptionHelper { get { return common.option } }
var input: InputHelper? { get { return common.input } }
var tracker: NSTrackingArea?
diff --git a/video/out/mac/window.swift b/video/out/mac/window.swift
index 87afae7047..5949aa1337 100644
--- a/video/out/mac/window.swift
+++ b/video/out/mac/window.swift
@@ -19,7 +19,7 @@ import Cocoa
class Window: NSWindow, NSWindowDelegate {
weak var common: Common! = nil
- var option: OptionHelper? { get { return common.option } }
+ var option: OptionHelper { get { return common.option } }
var input: InputHelper? { get { return common.input } }
var targetScreen: NSScreen?
@@ -92,7 +92,7 @@ class Window: NSWindow, NSWindowDelegate {
title = com.title
minSize = NSMakeSize(160, 90)
collectionBehavior = .fullScreenPrimary
- ignoresMouseEvents = option?.opts.cursor_passthrough ?? false
+ ignoresMouseEvents = option.opts.cursor_passthrough
delegate = self
if let cView = contentView {
@@ -143,7 +143,7 @@ class Window: NSWindow, NSWindowDelegate {
setFrame(frame, display: true)
}
- if Bool(option?.opts.native_fs ?? true) {
+ if Bool(option.opts.native_fs) {
super.toggleFullScreen(sender)
} else {
if !isInFullscreen {
@@ -194,7 +194,7 @@ class Window: NSWindow, NSWindowDelegate {
func windowDidEnterFullScreen(_ notification: Notification) {
isInFullscreen = true
- option?.setOption(fullscreen: isInFullscreen)
+ option.setOption(fullscreen: isInFullscreen)
common.updateCursorVisibility()
endAnimation(frame)
common.titleBar?.show()
@@ -203,7 +203,7 @@ class Window: NSWindow, NSWindowDelegate {
func windowDidExitFullScreen(_ notification: Notification) {
guard let tScreen = targetScreen else { return }
isInFullscreen = false
- option?.setOption(fullscreen: isInFullscreen)
+ option.setOption(fullscreen: isInFullscreen)
endAnimation(calculateWindowPosition(for: tScreen, withoutBounds: targetScreen == screen))
common.view?.layerContentsPlacement = .scaleProportionallyToFit
}
@@ -251,7 +251,7 @@ class Window: NSWindow, NSWindowDelegate {
setFrame(targetFrame, display: true)
endAnimation()
isInFullscreen = true
- option?.setOption(fullscreen: isInFullscreen)
+ option.setOption(fullscreen: isInFullscreen)
common.windowSetToFullScreen()
}
@@ -270,7 +270,7 @@ class Window: NSWindow, NSWindowDelegate {
setFrame(newFrame, display: true)
endAnimation()
isInFullscreen = false
- option?.setOption(fullscreen: isInFullscreen)
+ option.setOption(fullscreen: isInFullscreen)
common.windowSetToWindow()
}
@@ -283,7 +283,7 @@ class Window: NSWindow, NSWindowDelegate {
}
func getFsAnimationDuration(_ def: Double) -> Double {
- let duration = option?.macOpts.macos_fs_animation_duration ?? -1
+ let duration = option.macOpts.macos_fs_animation_duration
if duration < 0 {
return def
} else {
@@ -542,7 +542,7 @@ class Window: NSWindow, NSWindowDelegate {
func windowDidEndLiveResize(_ notification: Notification) {
common.windowDidEndLiveResize()
- option?.setOption(maximized: isZoomed)
+ option.setOption(maximized: isZoomed)
if let contentViewFrame = contentView?.frame,
!isAnimating && !isInFullscreen
@@ -561,11 +561,11 @@ class Window: NSWindow, NSWindowDelegate {
}
func windowDidMiniaturize(_ notification: Notification) {
- option?.setOption(minimized: true)
+ option.setOption(minimized: true)
}
func windowDidDeminiaturize(_ notification: Notification) {
- option?.setOption(minimized: false)
+ option.setOption(minimized: false)
}
func windowDidResignKey(_ notification: Notification) {
@@ -588,6 +588,6 @@ class Window: NSWindow, NSWindowDelegate {
}
func windowDidMove(_ notification: Notification) {
- option?.setOption(maximized: isZoomed)
+ option.setOption(maximized: isZoomed)
}
}
diff --git a/video/out/mac_common.swift b/video/out/mac_common.swift
index 364cd59319..b356cc6e1b 100644
--- a/video/out/mac_common.swift
+++ b/video/out/mac_common.swift
@@ -26,9 +26,9 @@ class MacCommon: Common {
@objc init(_ vo: UnsafeMutablePointer<vo>) {
let newlog = mp_log_new(vo, vo.pointee.log, "mac")
- super.init(newlog)
+ let option = OptionHelper(vo, vo.pointee.global)
+ super.init(option, newlog)
self.vo = vo
- option = OptionHelper(vo, vo.pointee.global)
input = InputHelper(vo.pointee.input_ctx, option)
timer = PreciseTimer(common: self)
@@ -45,7 +45,7 @@ class MacCommon: Common {
let previousActiveApp = getActiveApp()
initApp()
- let (_, _, wr) = getInitProperties(vo)
+ let (_, wr) = getInitProperties(vo)
guard let layer = self.layer else {
log.sendError("Something went wrong, no MetalLayer was initialized")
@@ -59,12 +59,12 @@ class MacCommon: Common {
}
if !NSEqualSizes(window?.unfsContentFramePixel.size ?? NSZeroSize, wr.size) &&
- option?.opts.auto_window_resize ?? true
+ option.opts.auto_window_resize
{
window?.updateSize(wr.size)
}
- if option?.opts.focus_on ?? 1 == 2 {
+ if option.opts.focus_on == 2 {
NSApp.activate(ignoringOtherApps: true)
}
@@ -89,7 +89,7 @@ class MacCommon: Common {
}
@objc func swapBuffer() {
- if option?.macOpts.macos_render_timer ?? Int32(RENDER_TIMER_CALLBACK) != RENDER_TIMER_SYSTEM {
+ if option.macOpts.macos_render_timer != RENDER_TIMER_SYSTEM {
swapLock.lock()
while(swapTime < 1) {
swapLock.wait()
@@ -105,7 +105,6 @@ class MacCommon: Common {
_ flagsIn: CVOptionFlags,
_ flagsOut: UnsafeMutablePointer<CVOptionFlags>) -> CVReturn
{
- let frameTimer = option?.macOpts.macos_render_timer ?? Int32(RENDER_TIMER_CALLBACK)
let signalSwap = {
self.swapLock.lock()
self.swapTime += 1
@@ -113,8 +112,8 @@ class MacCommon: Common {
self.swapLock.unlock()
}
- if frameTimer != RENDER_TIMER_SYSTEM {
- if let timer = self.timer, frameTimer == RENDER_TIMER_PRECISE {
+ if option.macOpts.macos_render_timer != RENDER_TIMER_SYSTEM {
+ if let timer = self.timer, option.macOpts.macos_render_timer == RENDER_TIMER_PRECISE {
timer.scheduleAt(time: inOutputTime.pointee.hostTime, closure: signalSwap)
return kCVReturnSuccess
}