mirror of
https://github.com/Toxblh/MTMR.git
synced 2026-01-11 17:38:38 +00:00
72 lines
2.3 KiB
Swift
72 lines
2.3 KiB
Swift
import AppKit
|
|
import AVFoundation
|
|
import Cocoa
|
|
import CoreAudio
|
|
|
|
class BrightnessViewController: NSCustomTouchBarItem {
|
|
private(set) var sliderItem: CustomSlider!
|
|
|
|
init(identifier: NSTouchBarItem.Identifier, refreshInterval: Double, image: NSImage? = nil) {
|
|
super.init(identifier: identifier)
|
|
|
|
if image == nil {
|
|
sliderItem = CustomSlider()
|
|
} else {
|
|
sliderItem = CustomSlider(knob: image!)
|
|
}
|
|
sliderItem.target = self
|
|
sliderItem.action = #selector(BrightnessViewController.sliderValueChanged(_:))
|
|
sliderItem.minValue = 0.0
|
|
sliderItem.maxValue = 100.0
|
|
sliderItem.floatValue = getBrightness() * 100
|
|
|
|
view = sliderItem
|
|
|
|
let timer = Timer.scheduledTimer(timeInterval: refreshInterval, target: self, selector: #selector(BrightnessViewController.updateBrightnessSlider), userInfo: nil, repeats: true)
|
|
RunLoop.current.add(timer, forMode: RunLoop.Mode.common)
|
|
}
|
|
|
|
required init?(coder _: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
deinit {
|
|
sliderItem.unbind(NSBindingName.value)
|
|
}
|
|
|
|
@objc func updateBrightnessSlider() {
|
|
DispatchQueue.main.async {
|
|
self.sliderItem.floatValue = self.getBrightness() * 100
|
|
}
|
|
}
|
|
|
|
@objc func sliderValueChanged(_ sender: Any) {
|
|
if let sliderItem = sender as? NSSlider {
|
|
setBrightness(level: Float32(sliderItem.intValue) / 100.0)
|
|
}
|
|
}
|
|
|
|
private func getBrightness() -> Float32 {
|
|
if #available(OSX 10.13, *) {
|
|
return Float32(CoreDisplay_Display_GetUserBrightness(0))
|
|
} else {
|
|
var level: Float32 = 0.5
|
|
let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect"))
|
|
|
|
IODisplayGetFloatParameter(service, 0, kIODisplayBrightnessKey as CFString, &level)
|
|
return level
|
|
}
|
|
}
|
|
|
|
private func setBrightness(level: Float) {
|
|
if #available(OSX 10.13, *) {
|
|
CoreDisplay_Display_SetUserBrightness(0, Double(level))
|
|
} else {
|
|
let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect"))
|
|
|
|
IODisplaySetFloatParameter(service, 1, kIODisplayBrightnessKey as CFString, level)
|
|
IOObjectRelease(service)
|
|
}
|
|
}
|
|
}
|