From b480daad88706b216bceb79f5c78f55c05ce65ae Mon Sep 17 00:00:00 2001 From: der richter Date: Tue, 19 Mar 2024 22:25:39 +0100 Subject: mac/option: make option helper none optional gets rid of some unwrapping boilerplate and nil coalescing operators. --- video/out/cocoa_cb_common.swift | 13 ++++----- video/out/mac/common.swift | 64 ++++++++++++----------------------------- video/out/mac/title_bar.swift | 8 +++--- video/out/mac/view.swift | 2 +- video/out/mac/window.swift | 24 ++++++++-------- video/out/mac_common.swift | 17 ++++++----- 6 files changed, 49 insertions(+), 79 deletions(-) (limited to 'video/out') 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(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) { 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? @@ -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) { - 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, _ 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, _ 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) -> 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) -> (OptionHelper, NSScreen, NSRect) { - guard let option = option else { - log.sendError("Something went wrong, no OptionHelper was initialized") - exit(1) - } + func getInitProperties(_ vo: UnsafeMutablePointer) -> (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) { 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) -> 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 } -- cgit v1.2.3