mirror of
https://github.com/mpv-player/mpv.git
synced 2024-09-20 03:52:22 +02:00
mac/option: make option helper none optional
gets rid of some unwrapping boilerplate and nil coalescing operators.
This commit is contained in:
parent
6defd49aa1
commit
b480daad88
@ -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 = {
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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) {
|
||||
|
@ -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?
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user