From db4eac140de5ac01c2014f86540ebffcb0d0596b Mon Sep 17 00:00:00 2001 From: der richter Date: Wed, 13 Mar 2024 23:34:29 +0100 Subject: [PATCH] mac/input: move mouse event handling into input helper --- osdep/mac/input_helper.swift | 28 +++++++++++++++++ video/out/mac/view.swift | 59 ++++++++---------------------------- 2 files changed, 40 insertions(+), 47 deletions(-) diff --git a/osdep/mac/input_helper.swift b/osdep/mac/input_helper.swift index 7f2272521a..fdab411deb 100644 --- a/osdep/mac/input_helper.swift +++ b/osdep/mac/input_helper.swift @@ -115,6 +115,16 @@ class InputHelper: NSObject { } } + func processMouse(event: NSEvent) { + if !mouseEnabled() { return } + lock.withLock { + putKey(map(button: event.buttonNumber), modifiers: event.modifierFlags, type: event.type) + if event.clickCount > 1 { + putKey(map(button: event.buttonNumber), modifiers: event.modifierFlags, type: .keyUp) + } + } + } + func draggable(at pos: NSPoint) -> Bool { lock.withLock { guard let input = input else { return false } @@ -158,6 +168,12 @@ class InputHelper: NSObject { let typeMapping: [NSEvent.EventType:UInt32] = [ .keyDown: MP_KEY_STATE_DOWN, .keyUp: MP_KEY_STATE_UP, + .leftMouseDown: MP_KEY_STATE_DOWN, + .leftMouseUp: MP_KEY_STATE_UP, + .rightMouseDown: MP_KEY_STATE_DOWN, + .rightMouseUp: MP_KEY_STATE_UP, + .otherMouseDown: MP_KEY_STATE_DOWN, + .otherMouseUp: MP_KEY_STATE_UP, ] return Int32(typeMapping[type] ?? 0); @@ -182,6 +198,18 @@ class InputHelper: NSObject { return Int32(mask) } + private func map(button: Int) -> Int32 { + let buttonMapping: [Int:Int32] = [ + 0: SWIFT_MBTN_LEFT, + 1: SWIFT_MBTN_RIGHT, + 2: SWIFT_MBTN_MID, + 3: SWIFT_MBTN_BACK, + 4: SWIFT_MBTN_FORWARD, + ] + + return Int32(buttonMapping[button] ?? SWIFT_MBTN9 + Int32(button - 5)); + } + @objc func open(files: [String]) { lock.withLock { guard let input = input else { return } diff --git a/video/out/mac/view.swift b/video/out/mac/view.swift index 8085ec8f20..c001a106ab 100644 --- a/video/out/mac/view.swift +++ b/video/out/mac/view.swift @@ -145,40 +145,34 @@ class View: NSView, CALayerDelegate { } override func mouseDown(with event: NSEvent) { - if input?.mouseEnabled() ?? true { - signalMouseDown(event) - } + hasMouseDown = true + input?.processMouse(event: event) } override func mouseUp(with event: NSEvent) { - if input?.mouseEnabled() ?? true { - signalMouseUp(event) - } + hasMouseDown = false common.window?.isMoving = false + input?.processMouse(event: event) } override func rightMouseDown(with event: NSEvent) { - if input?.mouseEnabled() ?? true { - signalMouseDown(event) - } + hasMouseDown = true + input?.processMouse(event: event) } override func rightMouseUp(with event: NSEvent) { - if input?.mouseEnabled() ?? true { - signalMouseUp(event) - } + hasMouseDown = false + input?.processMouse(event: event) } override func otherMouseDown(with event: NSEvent) { - if input?.mouseEnabled() ?? true { - signalMouseDown(event) - } + hasMouseDown = true + input?.processMouse(event: event) } override func otherMouseUp(with event: NSEvent) { - if input?.mouseEnabled() ?? true { - signalMouseUp(event) - } + hasMouseDown = false + input?.processMouse(event: event) } override func magnify(with event: NSEvent) { @@ -188,23 +182,6 @@ class View: NSView, CALayerDelegate { common.window?.addWindowScale(Double(event.magnification)) } - func signalMouseDown(_ event: NSEvent) { - signalMouseEvent(event, MP_KEY_STATE_DOWN) - if event.clickCount > 1 { - signalMouseEvent(event, MP_KEY_STATE_UP) - } - } - - func signalMouseUp(_ event: NSEvent) { - signalMouseEvent(event, MP_KEY_STATE_UP) - } - - func signalMouseEvent(_ event: NSEvent, _ state: UInt32) { - hasMouseDown = state == MP_KEY_STATE_DOWN - let mpkey = getMpvButton(event) - input?.put(key: (mpkey | Int32(state)), modifiers: event.modifierFlags) - } - func signalMouseMovement(_ event: NSEvent) { var point = convert(event.locationInWindow, from: nil) point = convertToBacking(point) @@ -283,16 +260,4 @@ class View: NSView, CALayerDelegate { guard let window = common.window else { return false } return !hasMouseDown && containsMouseLocation() && window.isKeyWindow } - - func getMpvButton(_ event: NSEvent) -> Int32 { - let buttonNumber = event.buttonNumber - switch (buttonNumber) { - case 0: return SWIFT_MBTN_LEFT - case 1: return SWIFT_MBTN_RIGHT - case 2: return SWIFT_MBTN_MID - case 3: return SWIFT_MBTN_BACK - case 4: return SWIFT_MBTN_FORWARD - default: return SWIFT_MBTN9 + Int32(buttonNumber - 5) - } - } }