From 3a57293206c13071b3b9577b889c0c8b934ef17c Mon Sep 17 00:00:00 2001 From: Toxblh Date: Fri, 13 Apr 2018 17:21:51 +0100 Subject: [PATCH 1/3] add brightness icons like original Touch Bar --- .../brightnessDown.imageset/Contents.json | 24 ++++++++++++++++++ .../brightnessDown.png | Bin 0 -> 5059 bytes .../brightnessUp.imageset/Contents.json | 24 ++++++++++++++++++ .../brightnessUp.imageset/brightnessUp.png | Bin 0 -> 6313 bytes MTMR/ItemsParsing.swift | 10 ++++++-- 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 MTMR/Assets.xcassets/brightnessDown.imageset/Contents.json create mode 100644 MTMR/Assets.xcassets/brightnessDown.imageset/brightnessDown.png create mode 100644 MTMR/Assets.xcassets/brightnessUp.imageset/Contents.json create mode 100644 MTMR/Assets.xcassets/brightnessUp.imageset/brightnessUp.png diff --git a/MTMR/Assets.xcassets/brightnessDown.imageset/Contents.json b/MTMR/Assets.xcassets/brightnessDown.imageset/Contents.json new file mode 100644 index 0000000..cd7e69d --- /dev/null +++ b/MTMR/Assets.xcassets/brightnessDown.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "brightnessDown.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MTMR/Assets.xcassets/brightnessDown.imageset/brightnessDown.png b/MTMR/Assets.xcassets/brightnessDown.imageset/brightnessDown.png new file mode 100644 index 0000000000000000000000000000000000000000..a7bc8a90f8e93a0e27e74d80eeaf5dd234438574 GIT binary patch literal 5059 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 literal 0 HcmV?d00001 diff --git a/MTMR/Assets.xcassets/brightnessUp.imageset/Contents.json b/MTMR/Assets.xcassets/brightnessUp.imageset/Contents.json new file mode 100644 index 0000000..d038817 --- /dev/null +++ b/MTMR/Assets.xcassets/brightnessUp.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "brightnessUp.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/MTMR/Assets.xcassets/brightnessUp.imageset/brightnessUp.png b/MTMR/Assets.xcassets/brightnessUp.imageset/brightnessUp.png new file mode 100644 index 0000000000000000000000000000000000000000..028aa26d2283d0c0e735729f65e39b6dd39db61b GIT binary patch literal 6313 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 z(item: ItemType, action: ActionType, parameters: [GeneralParameter]) private var supportedTypes: [String: ParametersDecoder] = [ "escape": { _ in return (item: .staticButton(title: "esc"), action: .keyPress(keycode: 53), parameters: []) }, - "brightnessUp": { _ in return (item: .staticButton(title: "🔆"), action: .keyPress(keycode: 113), parameters: []) }, - "brightnessDown": { _ in return (item: .staticButton(title: "🔅"), action: .keyPress(keycode: 107), parameters: []) }, + "brightnessUp": { _ in + let imageParameter = GeneralParameter.image(source: #imageLiteral(resourceName: "brightnessUp")) + return (item: .staticButton(title: ""), action: .keyPress(keycode: 113), parameters: [imageParameter]) + }, + "brightnessDown": { _ in + let imageParameter = GeneralParameter.image(source: #imageLiteral(resourceName: "brightnessDown")) + return (item: .staticButton(title: ""), action: .keyPress(keycode: 107), parameters: [imageParameter]) + }, "volumeDown": { _ in let imageParameter = GeneralParameter.image(source: NSImage(named: .touchBarVolumeDownTemplate)!) return (item: .staticButton(title: ""), action: .hidKey(keycode: NX_KEYTYPE_SOUND_DOWN), parameters: [imageParameter]) From 621cb3242b44ee843aa4795adc7ec29a89293603 Mon Sep 17 00:00:00 2001 From: ad Date: Fri, 13 Apr 2018 21:27:59 +0300 Subject: [PATCH 2/3] + listener for changes of sytem volume known bug: sound not mutes at value 0.0 --- MTMR/VolumeViewController.swift | 43 ++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/MTMR/VolumeViewController.swift b/MTMR/VolumeViewController.swift index 73517f1..ee13dad 100644 --- a/MTMR/VolumeViewController.swift +++ b/MTMR/VolumeViewController.swift @@ -16,6 +16,39 @@ class VolumeViewController: NSCustomTouchBarItem { } self.view = sliderItem + + var forPropertyAddress = AudioObjectPropertyAddress( + mSelector: kAudioHardwareServiceDeviceProperty_VirtualMasterVolume, + mScope: kAudioDevicePropertyScopeOutput, + mElement: kAudioObjectPropertyElementMaster) + + addListenerBlock(listenerBlock: audioObjectPropertyListenerBlock, + onAudioObjectID: defaultDeviceID, + forPropertyAddress: &forPropertyAddress) + } + + func addListenerBlock( listenerBlock: @escaping AudioObjectPropertyListenerBlock, onAudioObjectID: AudioObjectID, forPropertyAddress: UnsafePointer) { + + if (kAudioHardwareNoError != AudioObjectAddPropertyListenerBlock(onAudioObjectID, forPropertyAddress, nil, listenerBlock)) { + print("Error calling: AudioObjectAddPropertyListenerBlock") } + } + + func audioObjectPropertyListenerBlock (numberAddresses: UInt32, addresses: UnsafePointer) { + var index: UInt32 = 0 + while index < numberAddresses { + let address: AudioObjectPropertyAddress = addresses[Int(index)] + switch address.mSelector { + case kAudioHardwareServiceDeviceProperty_VirtualMasterVolume: + DispatchQueue.main.async { + self.sliderItem.floatValue = self.getInputGain() * 100 + } + default: + + print("We didn't expect this!") + + } + index += 1 + } } required init?(coder: NSCoder) { @@ -24,7 +57,7 @@ class VolumeViewController: NSCustomTouchBarItem { @objc func sliderValueChanged(_ sender: Any) { if let sliderItem = sender as? NSSlider { - setInputGain(Float32(sliderItem.intValue)/100.0) + _ = setInputGain(Float32(sliderItem.intValue)/100.0) } } @@ -51,10 +84,14 @@ class VolumeViewController: NSCustomTouchBarItem { } private func setInputGain(_ volume: Float32) -> OSStatus { - var inputVolume: Float32 = volume + var inputVolume: Float32 = volume //0.0 //roundf(volume * 100) / 100 let size: UInt32 = UInt32(MemoryLayout.size(ofValue: inputVolume)) var address: AudioObjectPropertyAddress = AudioObjectPropertyAddress() - address.mSelector = AudioObjectPropertySelector(kAudioHardwareServiceDeviceProperty_VirtualMasterVolume) + if inputVolume == 0.0 { + address.mSelector = AudioObjectPropertySelector(kAudioDevicePropertyMute) + } else { + address.mSelector = AudioObjectPropertySelector(kAudioHardwareServiceDeviceProperty_VirtualMasterVolume) + } address.mScope = AudioObjectPropertyScope(kAudioDevicePropertyScopeOutput) address.mElement = AudioObjectPropertyElement(kAudioObjectPropertyElementMaster) return AudioObjectSetPropertyData(defaultDeviceID, &address, 0, nil, size, &inputVolume) From 849b5b6db0c61bef902e87c32c448c9fbcfc45a3 Mon Sep 17 00:00:00 2001 From: ad Date: Fri, 13 Apr 2018 21:40:34 +0300 Subject: [PATCH 3/3] * fixed bug with mute at 0.0 --- MTMR/VolumeViewController.swift | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/MTMR/VolumeViewController.swift b/MTMR/VolumeViewController.swift index ee13dad..b73aeb7 100644 --- a/MTMR/VolumeViewController.swift +++ b/MTMR/VolumeViewController.swift @@ -84,18 +84,31 @@ class VolumeViewController: NSCustomTouchBarItem { } private func setInputGain(_ volume: Float32) -> OSStatus { - var inputVolume: Float32 = volume //0.0 //roundf(volume * 100) / 100 + var inputVolume: Float32 = volume + + if inputVolume == 0.0 { + _ = setMute( mute: 1) + } else { + _ = setMute( mute: 0) + } + let size: UInt32 = UInt32(MemoryLayout.size(ofValue: inputVolume)) var address: AudioObjectPropertyAddress = AudioObjectPropertyAddress() - if inputVolume == 0.0 { - address.mSelector = AudioObjectPropertySelector(kAudioDevicePropertyMute) - } else { - address.mSelector = AudioObjectPropertySelector(kAudioHardwareServiceDeviceProperty_VirtualMasterVolume) - } address.mScope = AudioObjectPropertyScope(kAudioDevicePropertyScopeOutput) address.mElement = AudioObjectPropertyElement(kAudioObjectPropertyElementMaster) + address.mSelector = AudioObjectPropertySelector(kAudioHardwareServiceDeviceProperty_VirtualMasterVolume) return AudioObjectSetPropertyData(defaultDeviceID, &address, 0, nil, size, &inputVolume) } + + private func setMute( mute: Int) -> OSStatus { + var muteVal: Int = mute + var address: AudioObjectPropertyAddress = AudioObjectPropertyAddress() + address.mSelector = AudioObjectPropertySelector(kAudioDevicePropertyMute) + let size: UInt32 = UInt32(MemoryLayout.size(ofValue: muteVal)) + address.mScope = AudioObjectPropertyScope(kAudioDevicePropertyScopeOutput) + address.mElement = AudioObjectPropertyElement(kAudioObjectPropertyElementMaster) + return AudioObjectSetPropertyData(defaultDeviceID, &address, 0, nil, size, &muteVal) + } } class CustomSliderCell: NSSliderCell {