summaryrefslogtreecommitdiffstats
path: root/osdep
diff options
context:
space:
mode:
authorder richter <der.richter@gmx.de>2019-07-20 12:16:37 +0200
committerJan Ekström <jeebjp@gmail.com>2019-07-21 18:13:07 +0300
commita8c2e2986838dccbcc4bd218b501f0bf86b36e2c (patch)
tree0f9ce3f16cc72c47dd70e9961e6c9b9f1cdabd43 /osdep
parent0602f082cb9775b4c9c8e256b1cb9de218a3b5fc (diff)
downloadmpv-a8c2e2986838dccbcc4bd218b501f0bf86b36e2c.tar.bz2
mpv-a8c2e2986838dccbcc4bd218b501f0bf86b36e2c.tar.xz
cocoa-cb: migrate to swift 5 with swift 4 fallback
this migrates our current swift code to version 5 and 4. building is support from 10.12.6 and xcode 9.1 onwards. dynamic linking is the new default, since Apple removed static libs from their new toolchains and it's the recommended way. additionally the found macOS SDK version is printed since it's an important information for finding possible errors now. Fixes #6470
Diffstat (limited to 'osdep')
-rw-r--r--osdep/macOS_mpv_helper.swift8
-rw-r--r--osdep/macOS_swift_compat.swift69
-rw-r--r--osdep/macOS_swift_extensions.swift6
3 files changed, 74 insertions, 9 deletions
diff --git a/osdep/macOS_mpv_helper.swift b/osdep/macOS_mpv_helper.swift
index 35435835de..fdc458e834 100644
--- a/osdep/macOS_mpv_helper.swift
+++ b/osdep/macOS_mpv_helper.swift
@@ -177,9 +177,11 @@ class MPVHelper: NSObject {
sendWarning("Invalid ICC profile data.")
return
}
- let iccSize = iccData.count
- iccData.withUnsafeMutableBytes { (u8Ptr: UnsafeMutablePointer<UInt8>) in
- let iccBstr = bstrdup(nil, bstr(start: u8Ptr, len: iccSize))
+ iccData.withUnsafeMutableBytes { (ptr: UnsafeMutableRawBufferPointer) in
+ guard let baseAddress = ptr.baseAddress, ptr.count > 0 else { return }
+
+ let u8Ptr = baseAddress.assumingMemoryBound(to: UInt8.self)
+ let iccBstr = bstrdup(nil, bstr(start: u8Ptr, len: ptr.count))
var icc = mpv_byte_array(data: iccBstr.start, size: iccBstr.len)
let params = mpv_render_param(type: MPV_RENDER_PARAM_ICC_PROFILE, data: &icc)
mpv_render_context_set_parameter(mpvRenderContext, params)
diff --git a/osdep/macOS_swift_compat.swift b/osdep/macOS_swift_compat.swift
index 1a57a1e1c3..381398e1bf 100644
--- a/osdep/macOS_swift_compat.swift
+++ b/osdep/macOS_swift_compat.swift
@@ -16,9 +16,68 @@
*/
#if !HAVE_MACOS_10_14_FEATURES
-let NSAppearanceNameDarkAqua = "NSAppearanceNameDarkAqua"
-let NSAppearanceNameAccessibilityHighContrastAqua = "NSAppearanceNameAccessibilityAqua"
-let NSAppearanceNameAccessibilityHighContrastDarkAqua = "NSAppearanceNameAccessibilityDarkAqua"
-let NSAppearanceNameAccessibilityHighContrastVibrantLight = "NSAppearanceNameAccessibilityVibrantLight"
-let NSAppearanceNameAccessibilityHighContrastVibrantDark = "NSAppearanceNameAccessibilityVibrantDark"
+extension NSAppearance.Name {
+ static let darkAqua: NSAppearance.Name = NSAppearance.Name(rawValue: "NSAppearanceNameDarkAqua")
+ static let accessibilityHighContrastAqua: NSAppearance.Name = NSAppearance.Name(rawValue: "NSAppearanceNameAccessibilityAqua")
+ static let accessibilityHighContrastDarkAqua: NSAppearance.Name = NSAppearance.Name(rawValue: "NSAppearanceNameAccessibilityDarkAqua")
+ static let accessibilityHighContrastVibrantLight: NSAppearance.Name = NSAppearance.Name(rawValue: "NSAppearanceNameAccessibilityVibrantLight")
+ static let accessibilityHighContrastVibrantDark: NSAppearance.Name = NSAppearance.Name(rawValue: "NSAppearanceNameAccessibilityVibrantDark")
+}
#endif
+
+extension NSPasteboard.PasteboardType {
+
+ static let fileURLCompat: NSPasteboard.PasteboardType = {
+ if #available(OSX 10.13, *) {
+ return .fileURL
+ } else {
+ return NSPasteboard.PasteboardType(kUTTypeURL as String)
+ }
+ } ()
+
+ static let URLCompat: NSPasteboard.PasteboardType = {
+ if #available(OSX 10.13, *) {
+ return .URL
+ } else {
+ return NSPasteboard.PasteboardType(kUTTypeFileURL as String)
+ }
+ } ()
+}
+
+#if !swift(>=5.0)
+extension Data {
+
+ mutating func withUnsafeMutableBytes<Type>(_ body: (UnsafeMutableRawBufferPointer) throws -> Type) rethrows -> Type {
+ let dataCount = count
+ return try withUnsafeMutableBytes { (ptr: UnsafeMutablePointer<UInt8>) throws -> Type in
+ try body(UnsafeMutableRawBufferPointer(start: ptr, count: dataCount))
+ }
+ }
+}
+#endif
+
+#if !swift(>=4.2)
+extension NSDraggingInfo {
+
+ var draggingPasteboard: NSPasteboard {
+ get { return draggingPasteboard() }
+ }
+}
+#endif
+
+#if !swift(>=4.1)
+extension Array {
+
+ func compactMap<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult] {
+ return try self.flatMap(transform)
+ }
+}
+
+extension NSWindow.Level {
+
+ static func +(left: NSWindow.Level, right: Int) -> NSWindow.Level {
+ return NSWindow.Level(left.rawValue + right)
+ }
+}
+#endif
+
diff --git a/osdep/macOS_swift_extensions.swift b/osdep/macOS_swift_extensions.swift
index 7929d48f9a..1e30cf4df7 100644
--- a/osdep/macOS_swift_extensions.swift
+++ b/osdep/macOS_swift_extensions.swift
@@ -17,11 +17,15 @@
import Cocoa
+extension NSDeviceDescriptionKey {
+ static let screenNumber = NSDeviceDescriptionKey("NSScreenNumber")
+}
+
extension NSScreen {
public var displayID: CGDirectDisplayID {
get {
- return deviceDescription["NSScreenNumber"] as? CGDirectDisplayID ?? 0
+ return deviceDescription[.screenNumber] as? CGDirectDisplayID ?? 0
}
}