| @@ -125,6 +125,43 @@ class InputHelper: NSObject { · 124 unmodified lines |
| 125 | 125 | } |
| 126 | 126 | } |
| 127 | 127 | |
| 128 | + private func preciseScroll(_ event: NSEvent) { |
| 129 | + var delta: Double |
| 130 | + var cmd: Int32 |
| 131 | + |
| 132 | + if abs(event.deltaY) >= abs(event.deltaX) { |
| 133 | + delta = Double(event.deltaY) * 0.1 |
| 134 | + cmd = delta > 0 ? SWIFT_WHEEL_UP : SWIFT_WHEEL_DOWN |
| 135 | + } else { |
| 136 | + delta = Double(event.deltaX) * 0.1 |
| 137 | + cmd = delta > 0 ? SWIFT_WHEEL_LEFT : SWIFT_WHEEL_RIGHT |
| 138 | + } |
| 139 | + |
| 140 | + putAxis(cmd, modifiers: event.modifierFlags, delta: abs(delta)) |
| 141 | + } |
| 142 | + |
| 143 | + func processWheel(event: NSEvent) { |
| 144 | + if !mouseEnabled() { return } |
| 145 | + lock.withLock { |
| 146 | + if event.hasPreciseScrollingDeltas { |
| 147 | + preciseScroll(event) |
| 148 | + } else { |
| 149 | + let modifiers = event.modifierFlags |
| 150 | + let deltaX = modifiers.contains(.shift) ? event.scrollingDeltaY : event.scrollingDeltaX |
| 151 | + let deltaY = modifiers.contains(.shift) ? event.scrollingDeltaX : event.scrollingDeltaY |
| 152 | + var mpkey: Int32 |
| 153 | + |
| 154 | + if abs(deltaY) >= abs(deltaX) { |
| 155 | + mpkey = deltaY > 0 ? SWIFT_WHEEL_UP : SWIFT_WHEEL_DOWN |
| 156 | + } else { |
| 157 | + mpkey = deltaX > 0 ? SWIFT_WHEEL_LEFT : SWIFT_WHEEL_RIGHT |
| 158 | + } |
| 159 | + |
| 160 | + putKey(mpkey, modifiers: modifiers) |
| 161 | + } |
| 162 | + } |
| 163 | + } |
| 164 | + |
| 128 | 165 | func draggable(at pos: NSPoint) -> Bool { |
| 129 | 166 | lock.withLock { |
| 130 | 167 | guard let input = input else { return false } |
| @@ -147,11 +184,9 @@ class InputHelper: NSObject { · 16 unmodified lines |
| 147 | 184 | } |
| 148 | 185 | } |
| 149 | 186 | |
| 150 | | − func putAxis(_ mpkey: Int32, modifiers: NSEvent.ModifierFlags, delta: Double) { |
| 151 | | − lock.withLock { |
| 152 | | − guard let input = input else { return } |
| 153 | | − mp_input_put_wheel(input, mpkey | mapModifier(modifiers), delta) |
| 154 | | − } |
| 187 | + private func putAxis(_ mpkey: Int32, modifiers: NSEvent.ModifierFlags, delta: Double) { |
| 188 | + guard let input = input else { return } |
| 189 | + mp_input_put_wheel(input, mpkey | mapModifier(modifiers), delta) |
| 155 | 190 | } |
| 156 | 191 | |
| 157 | 192 | @discardableResult @objc func command(_ cmd: String) -> Bool { |