diff --git a/MTMR/ScrollViewItem.swift b/MTMR/ScrollViewItem.swift index 7fe49ea..d9ff78e 100644 --- a/MTMR/ScrollViewItem.swift +++ b/MTMR/ScrollViewItem.swift @@ -1,6 +1,8 @@ import Foundation -class ScrollViewItem: NSCustomTouchBarItem { +class ScrollViewItem: NSCustomTouchBarItem, NSGestureRecognizerDelegate { + var twofingersPrev: CGFloat = 0.0 + var threefingersPrev: CGFloat = 0.0 init(identifier: NSTouchBarItem.Identifier, items: [NSTouchBarItem]) { super.init(identifier: identifier) @@ -11,10 +13,63 @@ class ScrollViewItem: NSCustomTouchBarItem { let scrollView = NSScrollView(frame: CGRect(origin: .zero, size: stackView.fittingSize)) scrollView.documentView = stackView self.view = scrollView + + let twofingers = NSPanGestureRecognizer(target: self, action: #selector(twofingersHandler(_:))) + twofingers.allowedTouchTypes = .direct + twofingers.numberOfTouchesRequired = 2 + self.view.addGestureRecognizer(twofingers) + + let threefingers = NSPanGestureRecognizer(target: self, action: #selector(threefingersHandler(_:))) + threefingers.allowedTouchTypes = .direct + threefingers.numberOfTouchesRequired = 3 + self.view.addGestureRecognizer(threefingers) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + @objc func twofingersHandler(_ sender: NSGestureRecognizer?) { // Volume + let position = (sender?.location(in: sender?.view).x)! + + switch sender!.state { + case .began: + twofingersPrev = position + case .changed: + if (((position-twofingersPrev) > 10) || ((twofingersPrev-position) > 10)) { + if position > twofingersPrev { + HIDPostAuxKey(NX_KEYTYPE_SOUND_UP) + } else if position < twofingersPrev { + HIDPostAuxKey(NX_KEYTYPE_SOUND_DOWN) + } + twofingersPrev = position + } + case .ended: + twofingersPrev = 0.0 + default: + break + } + } + + @objc func threefingersHandler(_ sender: NSGestureRecognizer?) { // Brightness + let position = (sender?.location(in: sender?.view).x)! + + switch sender!.state { + case .began: + threefingersPrev = position + case .changed: + if (((position-threefingersPrev) > 15) || ((threefingersPrev-position) > 15)) { + if position > threefingersPrev { + GenericKeyPress(keyCode: CGKeyCode(144)).send() + } else if position < threefingersPrev { + GenericKeyPress(keyCode: CGKeyCode(145)).send() + } + threefingersPrev = position + } + case .ended: + threefingersPrev = 0.0 + default: + break + } + } }