From c989037e54108dcfd4cb53c670fdf5eef05e3447 Mon Sep 17 00:00:00 2001 From: Serg Date: Sun, 14 Oct 2018 10:54:19 +0700 Subject: [PATCH] fix broken brightness buttons; consolidated brightness control --- MTMR.xcodeproj/project.pbxproj | 4 ++ MTMR/ItemsParsing.swift | 8 +++- MTMR/ScrollViewItem.swift | 4 +- MTMR/SupportBrightness.swift | 52 +++++++++++++++++++++ MTMR/Widgets/BrightnessViewController.swift | 29 ++---------- 5 files changed, 67 insertions(+), 30 deletions(-) create mode 100644 MTMR/SupportBrightness.swift diff --git a/MTMR.xcodeproj/project.pbxproj b/MTMR.xcodeproj/project.pbxproj index a319333..e0b0a90 100644 --- a/MTMR.xcodeproj/project.pbxproj +++ b/MTMR.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 36C2ECDD207C723B003CDA33 /* ParseConfigTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36C2ECDC207C723B003CDA33 /* ParseConfigTests.swift */; }; 36C2ECDE207C82DE003CDA33 /* ItemsParsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36C2ECDA207C3FE7003CDA33 /* ItemsParsing.swift */; }; 36C2ECE0207CB1B0003CDA33 /* defaultPreset.json in Resources */ = {isa = PBXBuildFile; fileRef = 36C2ECDF207CB1B0003CDA33 /* defaultPreset.json */; }; + 36DD28E32172EA34001FD6AD /* SupportBrightness.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36DD28E22172EA34001FD6AD /* SupportBrightness.swift */; }; 60173D3E20C0031B002C305F /* LaunchAtLoginController.m in Sources */ = {isa = PBXBuildFile; fileRef = 60173D3D20C0031B002C305F /* LaunchAtLoginController.m */; }; 6027D1B92080E52A004FFDC7 /* BrightnessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6027D1B72080E52A004FFDC7 /* BrightnessViewController.swift */; }; 6027D1BA2080E52A004FFDC7 /* VolumeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6027D1B82080E52A004FFDC7 /* VolumeViewController.swift */; }; @@ -87,6 +88,7 @@ 36C2ECDA207C3FE7003CDA33 /* ItemsParsing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemsParsing.swift; sourceTree = ""; }; 36C2ECDC207C723B003CDA33 /* ParseConfigTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseConfigTests.swift; sourceTree = ""; }; 36C2ECDF207CB1B0003CDA33 /* defaultPreset.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = defaultPreset.json; sourceTree = ""; }; + 36DD28E22172EA34001FD6AD /* SupportBrightness.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportBrightness.swift; sourceTree = ""; }; 60173D3C20C0031B002C305F /* LaunchAtLoginController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LaunchAtLoginController.h; sourceTree = ""; }; 60173D3D20C0031B002C305F /* LaunchAtLoginController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LaunchAtLoginController.m; sourceTree = ""; }; 6027D1B72080E52A004FFDC7 /* BrightnessViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrightnessViewController.swift; sourceTree = ""; }; @@ -220,6 +222,7 @@ B05600D22083E9BB00EB218D /* CustomSlider.swift */, 36A778BD20A6C27100B38714 /* GeneralExtensions.swift */, B0F3112420C9E35F0076BB88 /* SupportNSTouchBar.swift */, + 36DD28E22172EA34001FD6AD /* SupportBrightness.swift */, ); path = MTMR; sourceTree = ""; @@ -444,6 +447,7 @@ B0F3112520C9E35F0076BB88 /* SupportNSTouchBar.swift in Sources */, 6042B6AA2083E27000C525C8 /* DeprecatedCarbonAPI.c in Sources */, B09EB1E4207C082000D5C1E0 /* HapticFeedback.swift in Sources */, + 36DD28E32172EA34001FD6AD /* SupportBrightness.swift in Sources */, B08173272135F02B005D4908 /* NightShiftBarItem.swift in Sources */, 60F7D454208CC31400ABF5D2 /* InputSourceBarItem.swift in Sources */, 36A778BE20A6C27100B38714 /* GeneralExtensions.swift in Sources */, diff --git a/MTMR/ItemsParsing.swift b/MTMR/ItemsParsing.swift index 79ea8c9..c8f0f2c 100644 --- a/MTMR/ItemsParsing.swift +++ b/MTMR/ItemsParsing.swift @@ -50,12 +50,16 @@ class SupportedTypesHolder { "brightnessUp": { _ in let imageParameter = GeneralParameter.image(source: #imageLiteral(resourceName: "brightnessUp")) - return (item: .staticButton(title: ""), action: .keyPress(keycode: 144), longAction: .none, parameters: [.image: imageParameter]) + return (item: .staticButton(title: ""), action: .custom(closure: { + sharedBrightnessController.increase() + }), longAction: .none, parameters: [.image: imageParameter]) }, "brightnessDown": { _ in let imageParameter = GeneralParameter.image(source: #imageLiteral(resourceName: "brightnessDown")) - return (item: .staticButton(title: ""), action: .keyPress(keycode: 145), longAction: .none, parameters: [.image: imageParameter]) + return (item: .staticButton(title: ""), action: .custom(closure: { + sharedBrightnessController.decrease() + }), longAction: .none, parameters: [.image: imageParameter]) }, "illuminationUp": { _ in diff --git a/MTMR/ScrollViewItem.swift b/MTMR/ScrollViewItem.swift index d9ff78e..e5778c2 100644 --- a/MTMR/ScrollViewItem.swift +++ b/MTMR/ScrollViewItem.swift @@ -60,9 +60,9 @@ class ScrollViewItem: NSCustomTouchBarItem, NSGestureRecognizerDelegate { case .changed: if (((position-threefingersPrev) > 15) || ((threefingersPrev-position) > 15)) { if position > threefingersPrev { - GenericKeyPress(keyCode: CGKeyCode(144)).send() + sharedBrightnessController.increase() } else if position < threefingersPrev { - GenericKeyPress(keyCode: CGKeyCode(145)).send() + sharedBrightnessController.decrease() } threefingersPrev = position } diff --git a/MTMR/SupportBrightness.swift b/MTMR/SupportBrightness.swift new file mode 100644 index 0000000..57f8bc8 --- /dev/null +++ b/MTMR/SupportBrightness.swift @@ -0,0 +1,52 @@ +import Foundation + +public let sharedBrightnessController: BrightnessController = { + if #available(OSX 10.13, *) { + return CoreDisplayBrightnessController() + } else { + return IOServiceBrightnessController() + } +}() + +public protocol BrightnessController: class { + var brightness: Float { get set } +} + +public extension BrightnessController { + func increase() { + brightness += 0.1 + } + func decrease() { + brightness -= 0.1 + } +} + +@available(OSX 10.13, *) +private class CoreDisplayBrightnessController : BrightnessController { + var brightness: Float { + get { + return Float(CoreDisplay_Display_GetUserBrightness(0)) + } + set { + CoreDisplay_Display_SetUserBrightness(0, Double(newValue)); + } + } +} + +private class IOServiceBrightnessController : BrightnessController { + var brightness: Float { + get { + var level: Float32 = 0.5 + let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect")) + + IODisplayGetFloatParameter(service, 0, kIODisplayBrightnessKey as CFString, &level) + return Float(level) + } + set { + let service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect")) + + IODisplaySetFloatParameter(service, 1, kIODisplayBrightnessKey as CFString, newValue) + IOObjectRelease(service) + } + } +} diff --git a/MTMR/Widgets/BrightnessViewController.swift b/MTMR/Widgets/BrightnessViewController.swift index bd036f5..ba6cccd 100644 --- a/MTMR/Widgets/BrightnessViewController.swift +++ b/MTMR/Widgets/BrightnessViewController.swift @@ -18,7 +18,7 @@ class BrightnessViewController: NSCustomTouchBarItem { sliderItem.action = #selector(BrightnessViewController.sliderValueChanged(_:)) sliderItem.minValue = 0.0 sliderItem.maxValue = 100.0 - sliderItem.floatValue = getBrightness() * 100 + sliderItem.floatValue = sharedBrightnessController.brightness * 100 self.view = sliderItem @@ -36,37 +36,14 @@ class BrightnessViewController: NSCustomTouchBarItem { @objc func updateBrightnessSlider() { DispatchQueue.main.async { - self.sliderItem.floatValue = self.getBrightness() * 100 + self.sliderItem.floatValue = sharedBrightnessController.brightness * 100 } } @objc func sliderValueChanged(_ sender: Any) { if let sliderItem = sender as? NSSlider { - setBrightness(level: Float32(sliderItem.intValue)/100.0) + sharedBrightnessController.brightness = sliderItem.floatValue / 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) - } - - } }