mirror of
https://github.com/mpv-player/mpv
synced 2024-12-28 18:12:22 +00:00
a8c2e29868
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
76 lines
2.7 KiB
Swift
76 lines
2.7 KiB
Swift
/*
|
|
* This file is part of mpv.
|
|
*
|
|
* mpv is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* mpv is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with mpv. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
import Cocoa
|
|
|
|
extension NSDeviceDescriptionKey {
|
|
static let screenNumber = NSDeviceDescriptionKey("NSScreenNumber")
|
|
}
|
|
|
|
extension NSScreen {
|
|
|
|
public var displayID: CGDirectDisplayID {
|
|
get {
|
|
return deviceDescription[.screenNumber] as? CGDirectDisplayID ?? 0
|
|
}
|
|
}
|
|
|
|
public var displayName: String? {
|
|
get {
|
|
var name: String? = nil
|
|
var object: io_object_t
|
|
var iter = io_iterator_t()
|
|
let matching = IOServiceMatching("IODisplayConnect")
|
|
let result = IOServiceGetMatchingServices(kIOMasterPortDefault, matching, &iter)
|
|
|
|
if result != KERN_SUCCESS || iter == 0 { return nil }
|
|
|
|
repeat {
|
|
object = IOIteratorNext(iter)
|
|
if let info = IODisplayCreateInfoDictionary(object, IOOptionBits(kIODisplayOnlyPreferredName)).takeRetainedValue() as? [String:AnyObject],
|
|
(info[kDisplayVendorID] as? UInt32 == CGDisplayVendorNumber(displayID) &&
|
|
info[kDisplayProductID] as? UInt32 == CGDisplayModelNumber(displayID) &&
|
|
info[kDisplaySerialNumber] as? UInt32 ?? 0 == CGDisplaySerialNumber(displayID))
|
|
{
|
|
if let productNames = info["DisplayProductName"] as? [String:String],
|
|
let productName = productNames.first?.value
|
|
{
|
|
name = productName
|
|
break
|
|
}
|
|
}
|
|
} while object != 0
|
|
|
|
IOObjectRelease(iter)
|
|
return name
|
|
}
|
|
}
|
|
}
|
|
|
|
extension NSColor {
|
|
|
|
convenience init(hex: String) {
|
|
let int = Int(hex.dropFirst(), radix: 16) ?? 0
|
|
let alpha = CGFloat((int >> 24) & 0x000000FF)/255
|
|
let red = CGFloat((int >> 16) & 0x000000FF)/255
|
|
let green = CGFloat((int >> 8) & 0x000000FF)/255
|
|
let blue = CGFloat((int) & 0x000000FF)/255
|
|
|
|
self.init(calibratedRed: red, green: green, blue: blue, alpha: alpha)
|
|
}
|
|
}
|