diff options
Diffstat (limited to 'video/out')
-rw-r--r-- | video/out/cocoa-cb/events_view.swift | 39 | ||||
-rw-r--r-- | video/out/cocoa-cb/title_bar.swift | 22 | ||||
-rw-r--r-- | video/out/cocoa-cb/window.swift | 28 | ||||
-rw-r--r-- | video/out/cocoa_cb_common.swift | 40 |
4 files changed, 60 insertions, 69 deletions
diff --git a/video/out/cocoa-cb/events_view.swift b/video/out/cocoa-cb/events_view.swift index 9c30e32ca0..59441d9793 100644 --- a/video/out/cocoa-cb/events_view.swift +++ b/video/out/cocoa-cb/events_view.swift @@ -32,11 +32,9 @@ class EventsView: NSView { init(cocoaCB ccb: CocoaCB) { cocoaCB = ccb super.init(frame: NSMakeRect(0, 0, 960, 480)) - autoresizingMask = [.viewWidthSizable, .viewHeightSizable] + autoresizingMask = [.width, .height] wantsBestResolutionOpenGLSurface = true - register(forDraggedTypes: [ NSFilenamesPboardType, - NSURLPboardType, - NSPasteboardTypeString ]) + registerForDraggedTypes([ .fileURLCompat, .URLCompat, .string ]) } required init?(coder: NSCoder) { @@ -60,11 +58,8 @@ class EventsView: NSView { } override func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation { - guard let types = sender.draggingPasteboard().types else { return [] } - if types.contains(NSFilenamesPboardType) || - types.contains(NSURLPboardType) || - types.contains(NSPasteboardTypeString) - { + guard let types = sender.draggingPasteboard.types else { return [] } + if types.contains(.fileURLCompat) || types.contains(.URLCompat) || types.contains(.string) { return .copy } return [] @@ -81,21 +76,17 @@ class EventsView: NSView { } override func performDragOperation(_ sender: NSDraggingInfo) -> Bool { - let pb = sender.draggingPasteboard() - guard let types = sender.draggingPasteboard().types else { return false } - if types.contains(NSFilenamesPboardType) { - if let files = pb.propertyList(forType: NSFilenamesPboardType) as? [Any] { + let pb = sender.draggingPasteboard + guard let types = pb.types else { return false } + + if types.contains(.fileURLCompat) || types.contains(.URLCompat) { + if let urls = pb.readObjects(forClasses: [NSURL.self]) as? [URL] { + let files = urls.map { $0.absoluteString } EventsResponder.sharedInstance().handleFilesArray(files) return true } - } else if types.contains(NSURLPboardType) { - if var url = pb.propertyList(forType: NSURLPboardType) as? [String] { - url = url.filter{ !$0.isEmpty } - EventsResponder.sharedInstance().handleFilesArray(url) - return true - } - } else if types.contains(NSPasteboardTypeString) { - guard let str = pb.string(forType: NSPasteboardTypeString) else { return false } + } else if types.contains(.string) { + guard let str = pb.string(forType: .string) else { return false } var filesArray: [String] = [] for val in str.components(separatedBy: "\n") { @@ -220,7 +211,7 @@ class EventsView: NSView { var delta: Double var cmd: Int32 - if fabs(event.deltaY) >= fabs(event.deltaX) { + if abs(event.deltaY) >= abs(event.deltaX) { delta = Double(event.deltaY) * 0.1; cmd = delta > 0 ? SWIFT_WHEEL_UP : SWIFT_WHEEL_DOWN; } else { @@ -228,7 +219,7 @@ class EventsView: NSView { cmd = delta > 0 ? SWIFT_WHEEL_RIGHT : SWIFT_WHEEL_LEFT; } - mpv.putAxis(cmd, delta: fabs(delta)) + mpv.putAxis(cmd, delta: abs(delta)) } override func scrollWheel(with event: NSEvent) { @@ -244,7 +235,7 @@ class EventsView: NSView { let deltaY = modifiers.contains(.shift) ? event.scrollingDeltaX : event.scrollingDeltaY var mpkey: Int32 - if fabs(deltaY) >= fabs(deltaX) { + if abs(deltaY) >= abs(deltaX) { mpkey = deltaY > 0 ? SWIFT_WHEEL_UP : SWIFT_WHEEL_DOWN; } else { mpkey = deltaX > 0 ? SWIFT_WHEEL_RIGHT : SWIFT_WHEEL_LEFT; diff --git a/video/out/cocoa-cb/title_bar.swift b/video/out/cocoa-cb/title_bar.swift index f5979c71e9..f961b1908a 100644 --- a/video/out/cocoa-cb/title_bar.swift +++ b/video/out/cocoa-cb/title_bar.swift @@ -29,7 +29,7 @@ class TitleBar: NSVisualEffectView { get { return NSWindow.frameRect(forContentRect: CGRect.zero, styleMask: .titled).size.height } } var buttons: [NSButton] { - get { return ([.closeButton, .miniaturizeButton, .zoomButton] as [NSWindowButton]).flatMap { cocoaCB.window?.standardWindowButton($0) } } + get { return ([.closeButton, .miniaturizeButton, .zoomButton] as [NSWindow.ButtonType]).compactMap { cocoaCB.window?.standardWindowButton($0) } } } override var material: NSVisualEffectView.Material { @@ -57,7 +57,7 @@ class TitleBar: NSVisualEffectView { super.init(frame: f) alphaValue = 0 blendingMode = .withinWindow - autoresizingMask = [.viewWidthSizable, .viewMinYMargin] + autoresizingMask = [.width, .minYMargin] systemBar?.alphaValue = 0 state = .followsWindowActiveState wantsLayer = true @@ -148,7 +148,7 @@ class TitleBar: NSVisualEffectView { } } - func hide() { + @objc func hide() { guard let window = cocoaCB.window else { return } if window.isInFullscreen && !window.isAnimating { alphaValue = 0 @@ -175,26 +175,26 @@ class TitleBar: NSVisualEffectView { func appearanceFrom(string: String) -> NSAppearance? { switch string { case "1", "aqua": - return NSAppearance(named: NSAppearanceNameAqua) + return NSAppearance(named: .aqua) case "3", "vibrantLight": - return NSAppearance(named: NSAppearanceNameVibrantLight) + return NSAppearance(named: .vibrantLight) case "4", "vibrantDark": - return NSAppearance(named: NSAppearanceNameVibrantDark) + return NSAppearance(named: .vibrantDark) default: break } if #available(macOS 10.14, *) { switch string { case "2", "darkAqua": - return NSAppearance(named: NSAppearanceNameDarkAqua) + return NSAppearance(named: .darkAqua) case "5", "aquaHighContrast": - return NSAppearance(named: NSAppearanceNameAccessibilityHighContrastAqua) + return NSAppearance(named: .accessibilityHighContrastAqua) case "6", "darkAquaHighContrast": - return NSAppearance(named: NSAppearanceNameAccessibilityHighContrastDarkAqua) + return NSAppearance(named: .accessibilityHighContrastDarkAqua) case "7", "vibrantLightHighContrast": - return NSAppearance(named: NSAppearanceNameAccessibilityHighContrastVibrantLight) + return NSAppearance(named: .accessibilityHighContrastVibrantLight) case "8", "vibrantDarkHighContrast": - return NSAppearance(named: NSAppearanceNameAccessibilityHighContrastVibrantDark) + return NSAppearance(named: .accessibilityHighContrastVibrantDark) case "0", "auto": fallthrough default: return nil diff --git a/video/out/cocoa-cb/window.swift b/video/out/cocoa-cb/window.swift index dc7762c5af..2f87711d22 100644 --- a/video/out/cocoa-cb/window.swift +++ b/video/out/cocoa-cb/window.swift @@ -54,7 +54,7 @@ class Window: NSWindow, NSWindowDelegate { override var canBecomeKey: Bool { return true } override var canBecomeMain: Bool { return true } - override var styleMask: NSWindowStyleMask { + override var styleMask: NSWindow.StyleMask { get { return super.styleMask } set { let responder = firstResponder @@ -72,7 +72,7 @@ class Window: NSWindow, NSWindowDelegate { // workaround for an AppKit bug where the NSWindow can't be placed on a // none Main screen NSScreen outside the Main screen's frame bounds - if let wantedScreen = screen, screen != NSScreen.main() { + if let wantedScreen = screen, screen != NSScreen.main { var absoluteWantedOrigin = contentRect.origin absoluteWantedOrigin.x += wantedScreen.frame.origin.x absoluteWantedOrigin.y += wantedScreen.frame.origin.y @@ -255,26 +255,26 @@ class Window: NSWindow, NSWindowDelegate { } func setOnTop(_ state: Bool, _ ontopLevel: Any) { - let stdLevel = Int(CGWindowLevelForKey(.normalWindow)) + let stdLevel: NSWindow.Level = .normal if state { if ontopLevel is Int { switch ontopLevel as? Int { case .some(-1): - level = Int(CGWindowLevelForKey(.floatingWindow)) + level = .floating case .some(-2): - level = Int(CGWindowLevelForKey(.statusWindow))+1 + level = .statusBar + 1 default: - level = ontopLevel as? Int ?? stdLevel + level = NSWindow.Level(ontopLevel as? Int ?? stdLevel.rawValue) } } else { switch ontopLevel as? String { case .some("window"): - level = Int(CGWindowLevelForKey(.floatingWindow)) + level = .floating case .some("system"): - level = Int(CGWindowLevelForKey(.statusWindow))+1 + level = .statusBar + 1 default: - level = Int(ontopLevel as? String ?? "") ?? stdLevel + level = NSWindow.Level(Int(ontopLevel as? String ?? "") ?? stdLevel.rawValue) } } collectionBehavior.remove(.transient) @@ -410,7 +410,7 @@ class Window: NSWindow, NSWindowDelegate { return frameRect } - guard let ts: NSScreen = tScreen ?? screen ?? NSScreen.main() else { + guard let ts: NSScreen = tScreen ?? screen ?? NSScreen.main else { return frameRect } var nf: NSRect = frameRect @@ -443,9 +443,9 @@ class Window: NSWindow, NSWindowDelegate { return nf } - func setNormalWindowSize() { setWindowScale(1.0) } - func setHalfWindowSize() { setWindowScale(0.5) } - func setDoubleWindowSize() { setWindowScale(2.0) } + @objc func setNormalWindowSize() { setWindowScale(1.0) } + @objc func setHalfWindowSize() { setWindowScale(0.5) } + @objc func setDoubleWindowSize() { setWindowScale(2.0) } func setWindowScale(_ scale: Double) { mpv.commandAsync(["osd-auto", "set", "window-scale", "\(scale)"]) @@ -480,7 +480,7 @@ class Window: NSWindow, NSWindowDelegate { cocoaCB.layer?.inLiveResize = false } - func windowShouldClose(_ sender: Any) -> Bool { + func windowShouldClose(_ sender: NSWindow) -> Bool { cocoa_put_key(SWIFT_KEY_CLOSE_WIN) return false } diff --git a/video/out/cocoa_cb_common.swift b/video/out/cocoa_cb_common.swift index 21f6d3f95d..b08f102964 100644 --- a/video/out/cocoa_cb_common.swift +++ b/video/out/cocoa_cb_common.swift @@ -29,7 +29,7 @@ class CocoaCB: NSObject { var cursorHidden: Bool = false var cursorVisibilityWanted: Bool = true - var isShuttingDown: Bool = false + @objc var isShuttingDown: Bool = false var title: String = "mpv" { didSet { if let window = window { window.title = title } } @@ -52,7 +52,7 @@ class CocoaCB: NSObject { let queue: DispatchQueue = DispatchQueue(label: "io.mpv.queue") - init(_ mpvHandle: OpaquePointer) { + @objc init(_ mpvHandle: OpaquePointer) { mpv = MPVHelper(mpvHandle) super.init() layer = VideoLayer(cocoaCB: self) @@ -97,7 +97,7 @@ class CocoaCB: NSObject { mpv.sendError("Something went wrong, no View was initialized") exit(1) } - guard let targetScreen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main() else { + guard let targetScreen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main else { mpv.sendError("Something went wrong, no Screen was found") exit(1) } @@ -135,7 +135,7 @@ 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 targetScreen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main else { mpv.sendWarning("Couldn't update Window size, no Screen available") return } @@ -170,7 +170,7 @@ class CocoaCB: NSObject { let opts: mp_vo_opts = vo.pointee.opts.pointee CVDisplayLinkCreateWithActiveCGDisplays(&link) - guard let screen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main(), + guard let screen = getScreenBy(id: Int(opts.screen_id)) ?? NSScreen.main, let link = self.link else { mpv.sendWarning("Couldn't start DisplayLink, no Screen or DisplayLink available") @@ -279,18 +279,19 @@ class CocoaCB: NSObject { // the polinomial approximation for apple lmu value -> lux was empirically // derived by firefox developers (Apple provides no documentation). // https://bugzilla.mozilla.org/show_bug.cgi?id=793728 - let power_c4 = 1 / pow(10, 27) - let power_c3 = 1 / pow(10, 19) - let power_c2 = 1 / pow(10, 12) - let power_c1 = 1 / pow(10, 5) + let power_c4: Double = 1 / pow(10, 27) + let power_c3: Double = 1 / pow(10, 19) + let power_c2: Double = 1 / pow(10, 12) + let power_c1: Double = 1 / pow(10, 5) - let term4 = -3.0 * power_c4 * pow(Decimal(v), 4) - let term3 = 2.6 * power_c3 * pow(Decimal(v), 3) - let term2 = -3.4 * power_c2 * pow(Decimal(v), 2) - let term1 = 3.9 * power_c1 * Decimal(v) + let lum = Double(v) + let term4: Double = -3.0 * power_c4 * pow(lum, 4.0) + let term3: Double = 2.6 * power_c3 * pow(lum, 3.0) + let term2: Double = -3.4 * power_c2 * pow(lum, 2.0) + let term1: Double = 3.9 * power_c1 * lum - let lux = Int(ceil( Double((term4 + term3 + term2 + term1 - 0.19) as NSNumber))) - return Int(lux > 0 ? lux : 0) + let lux = Int(ceil(term4 + term3 + term2 + term1 - 0.19)) + return lux > 0 ? lux : 0 } var lightSensorCallback: IOServiceInterestCallback = { (ctx, service, messageType, messageArgument) -> Void in @@ -370,14 +371,13 @@ class CocoaCB: NSObject { } func getScreenBy(id screenID: Int) -> NSScreen? { - guard let screens = NSScreen.screens() else { return nil} - if screenID >= screens.count { + if screenID >= NSScreen.screens.count { mpv.sendInfo("Screen ID \(screenID) does not exist, falling back to current device") return nil } else if screenID < 0 { return nil } - return screens[screenID] + return NSScreen.screens[screenID] } func getWindowGeometry(forScreen targetScreen: NSScreen, @@ -486,7 +486,7 @@ class CocoaCB: NSObject { var count: Int32 = 0 let screen = ccb.window != nil ? ccb.window?.screen : ccb.getScreenBy(id: Int(opts.screen_id)) ?? - NSScreen.main() + NSScreen.main let displayName = screen?.displayName ?? "Unknown" SWIFT_TARRAY_STRING_APPEND(nil, &array, &count, ta_xstrdup(nil, displayName)) @@ -545,7 +545,7 @@ class CocoaCB: NSObject { } } - func processEvent(_ event: UnsafePointer<mpv_event>) { + @objc func processEvent(_ event: UnsafePointer<mpv_event>) { switch event.pointee.event_id { case MPV_EVENT_SHUTDOWN: shutdown() |