History

mac/input: move mouse event handling into input helper

der richter committed 2 years ago

Commit db4eac11 parent ab419a62 files · +40 −47Browse files

Unified · Split

2 files
  1. osdep/mac/input_helper.swift +28 −0
  2. video/out/mac/view.swift +12 −47
osdep/mac/input_helper.swift+28−0
@@ -115,6 +115,16 @@ class InputHelper: NSObject { · 114 unmodified lines
115 }115 }
116 }116 }
117 117
118 func processMouse(event: NSEvent) {
119 if !mouseEnabled() { return }
120 lock.withLock {
121 putKey(map(button: event.buttonNumber), modifiers: event.modifierFlags, type: event.type)
122 if event.clickCount > 1 {
123 putKey(map(button: event.buttonNumber), modifiers: event.modifierFlags, type: .keyUp)
124 }
125 }
126 }
127
118 func draggable(at pos: NSPoint) -> Bool {128 func draggable(at pos: NSPoint) -> Bool {
119 lock.withLock {129 lock.withLock {
120 guard let input = input else { return false }130 guard let input = input else { return false }
@@ -158,6 +168,12 @@ class InputHelper: NSObject { · 37 unmodified lines
158 let typeMapping: [NSEvent.EventType:UInt32] = [168 let typeMapping: [NSEvent.EventType:UInt32] = [
159 .keyDown: MP_KEY_STATE_DOWN,169 .keyDown: MP_KEY_STATE_DOWN,
160 .keyUp: MP_KEY_STATE_UP,170 .keyUp: MP_KEY_STATE_UP,
171 .leftMouseDown: MP_KEY_STATE_DOWN,
172 .leftMouseUp: MP_KEY_STATE_UP,
173 .rightMouseDown: MP_KEY_STATE_DOWN,
174 .rightMouseUp: MP_KEY_STATE_UP,
175 .otherMouseDown: MP_KEY_STATE_DOWN,
176 .otherMouseUp: MP_KEY_STATE_UP,
161 ]177 ]
162 178
163 return Int32(typeMapping[type] ?? 0);179 return Int32(typeMapping[type] ?? 0);
@@ -182,6 +198,18 @@ class InputHelper: NSObject { · 18 unmodified lines
182 return Int32(mask)198 return Int32(mask)
183 }199 }
184 200
201 private func map(button: Int) -> Int32 {
202 let buttonMapping: [Int:Int32] = [
203 0: SWIFT_MBTN_LEFT,
204 1: SWIFT_MBTN_RIGHT,
205 2: SWIFT_MBTN_MID,
206 3: SWIFT_MBTN_BACK,
207 4: SWIFT_MBTN_FORWARD,
208 ]
209
210 return Int32(buttonMapping[button] ?? SWIFT_MBTN9 + Int32(button - 5));
211 }
212
185 @objc func open(files: [String]) {213 @objc func open(files: [String]) {
186 lock.withLock {214 lock.withLock {
187 guard let input = input else { return }215 guard let input = input else { return }
video/out/mac/view.swift+12−47
@@ -145,40 +145,34 @@ class View: NSView, CALayerDelegate { · 144 unmodified lines
145 }145 }
146 146
147 override func mouseDown(with event: NSEvent) {147 override func mouseDown(with event: NSEvent) {
148 if input?.mouseEnabled() ?? true {148 hasMouseDown = true
149 signalMouseDown(event)149 input?.processMouse(event: event)
150 }
151 }150 }
152 151
153 override func mouseUp(with event: NSEvent) {152 override func mouseUp(with event: NSEvent) {
154 if input?.mouseEnabled() ?? true {153 hasMouseDown = false
155 signalMouseUp(event)
156 }
157 common.window?.isMoving = false154 common.window?.isMoving = false
155 input?.processMouse(event: event)
158 }156 }
159 157
160 override func rightMouseDown(with event: NSEvent) {158 override func rightMouseDown(with event: NSEvent) {
161 if input?.mouseEnabled() ?? true {159 hasMouseDown = true
162 signalMouseDown(event)160 input?.processMouse(event: event)
163 }
164 }161 }
165 162
166 override func rightMouseUp(with event: NSEvent) {163 override func rightMouseUp(with event: NSEvent) {
167 if input?.mouseEnabled() ?? true {164 hasMouseDown = false
168 signalMouseUp(event)165 input?.processMouse(event: event)
169 }
170 }166 }
171 167
172 override func otherMouseDown(with event: NSEvent) {168 override func otherMouseDown(with event: NSEvent) {
173 if input?.mouseEnabled() ?? true {169 hasMouseDown = true
174 signalMouseDown(event)170 input?.processMouse(event: event)
175 }
176 }171 }
177 172
178 override func otherMouseUp(with event: NSEvent) {173 override func otherMouseUp(with event: NSEvent) {
179 if input?.mouseEnabled() ?? true {174 hasMouseDown = false
180 signalMouseUp(event)175 input?.processMouse(event: event)
181 }
182 }176 }
183 177
184 override func magnify(with event: NSEvent) {178 override func magnify(with event: NSEvent) {
@@ -188,23 +182,6 @@ class View: NSView, CALayerDelegate { · 3 unmodified lines
188 common.window?.addWindowScale(Double(event.magnification))182 common.window?.addWindowScale(Double(event.magnification))
189 }183 }
190 184
191 func signalMouseDown(_ event: NSEvent) {
192 signalMouseEvent(event, MP_KEY_STATE_DOWN)
193 if event.clickCount > 1 {
194 signalMouseEvent(event, MP_KEY_STATE_UP)
195 }
196 }
197
198 func signalMouseUp(_ event: NSEvent) {
199 signalMouseEvent(event, MP_KEY_STATE_UP)
200 }
201
202 func signalMouseEvent(_ event: NSEvent, _ state: UInt32) {
203 hasMouseDown = state == MP_KEY_STATE_DOWN
204 let mpkey = getMpvButton(event)
205 input?.put(key: (mpkey | Int32(state)), modifiers: event.modifierFlags)
206 }
207
208 func signalMouseMovement(_ event: NSEvent) {185 func signalMouseMovement(_ event: NSEvent) {
209 var point = convert(event.locationInWindow, from: nil)186 var point = convert(event.locationInWindow, from: nil)
210 point = convertToBacking(point)187 point = convertToBacking(point)
@@ -283,16 +260,4 @@ class View: NSView, CALayerDelegate { · 72 unmodified lines
283 guard let window = common.window else { return false }260 guard let window = common.window else { return false }
284 return !hasMouseDown && containsMouseLocation() && window.isKeyWindow261 return !hasMouseDown && containsMouseLocation() && window.isKeyWindow
285 }262 }
286
287 func getMpvButton(_ event: NSEvent) -> Int32 {
288 let buttonNumber = event.buttonNumber
289 switch (buttonNumber) {
290 case 0: return SWIFT_MBTN_LEFT
291 case 1: return SWIFT_MBTN_RIGHT
292 case 2: return SWIFT_MBTN_MID
293 case 3: return SWIFT_MBTN_BACK
294 case 4: return SWIFT_MBTN_FORWARD
295 default: return SWIFT_MBTN9 + Int32(buttonNumber - 5)
296 }
297 }
298}263}

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