History

mac/input: move scroll wheel event handling into input helper

der richter committed 2 years ago

Commit a4eddf71 parent 9a4c6732 files · +41 −40Browse files

Unified · Split

2 files
  1. osdep/mac/input_helper.swift +40 −5
  2. video/out/mac/view.swift +1 −35
osdep/mac/input_helper.swift+40−5
@@ -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 func draggable(at pos: NSPoint) -> Bool {165 func draggable(at pos: NSPoint) -> Bool {
129 lock.withLock {166 lock.withLock {
130 guard let input = input else { return false }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) {187 private func putAxis(_ mpkey: Int32, modifiers: NSEvent.ModifierFlags, delta: Double) {
151 lock.withLock {188 guard let input = input else { return }
152 guard let input = input else { return }189 mp_input_put_wheel(input, mpkey | mapModifier(modifiers), delta)
153 mp_input_put_wheel(input, mpkey | mapModifier(modifiers), delta)
154 }
155 }190 }
156 191
157 @discardableResult @objc func command(_ cmd: String) -> Bool {192 @discardableResult @objc func command(_ cmd: String) -> Bool {
video/out/mac/view.swift+1−35
@@ -189,42 +189,8 @@ class View: NSView, CALayerDelegate { · 188 unmodified lines
189 }189 }
190 }190 }
191 191
192 func preciseScroll(_ event: NSEvent) {
193 var delta: Double
194 var cmd: Int32
195
196 if abs(event.deltaY) >= abs(event.deltaX) {
197 delta = Double(event.deltaY) * 0.1
198 cmd = delta > 0 ? SWIFT_WHEEL_UP : SWIFT_WHEEL_DOWN
199 } else {
200 delta = Double(event.deltaX) * 0.1
201 cmd = delta > 0 ? SWIFT_WHEEL_LEFT : SWIFT_WHEEL_RIGHT
202 }
203
204 input?.putAxis(cmd, modifiers: event.modifierFlags, delta: abs(delta))
205 }
206
207 override func scrollWheel(with event: NSEvent) {192 override func scrollWheel(with event: NSEvent) {
208 if !(input?.mouseEnabled() ?? true) {193 input?.processWheel(event: event)
209 return
210 }
211
212 if event.hasPreciseScrollingDeltas {
213 preciseScroll(event)
214 } else {
215 let modifiers = event.modifierFlags
216 let deltaX = modifiers.contains(.shift) ? event.scrollingDeltaY : event.scrollingDeltaX
217 let deltaY = modifiers.contains(.shift) ? event.scrollingDeltaX : event.scrollingDeltaY
218 var mpkey: Int32
219
220 if abs(deltaY) >= abs(deltaX) {
221 mpkey = deltaY > 0 ? SWIFT_WHEEL_UP : SWIFT_WHEEL_DOWN
222 } else {
223 mpkey = deltaX > 0 ? SWIFT_WHEEL_LEFT : SWIFT_WHEEL_RIGHT
224 }
225
226 input?.put(key: mpkey, modifiers: modifiers)
227 }
228 }194 }
229 195
230 func containsMouseLocation() -> Bool {196 func containsMouseLocation() -> Bool {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t