diff options
author | Michael Lutz <michi@icosahedron.de> | 2021-02-07 14:00:59 +0100 |
---|---|---|
committer | Michael Lutz <michi@icosahedron.de> | 2021-02-13 22:21:17 +0100 |
commit | 649ff5f9f9777e0c8b66e868d24af37af6c942be (patch) | |
tree | b949cf676ab8b1b77acfa034922e9bb45f3b2be4 | |
parent | 43326d11d8861721c9db45922bc7d42cf99dccba (diff) | |
download | openttd-649ff5f9f9777e0c8b66e868d24af37af6c942be.tar.xz |
Codechange: [OSX] Use relative mouse handling during scrolling.
-rw-r--r-- | src/video/cocoa/cocoa_wnd.mm | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/video/cocoa/cocoa_wnd.mm b/src/video/cocoa/cocoa_wnd.mm index 2755b26ff..8c947fe04 100644 --- a/src/video/cocoa/cocoa_wnd.mm +++ b/src/video/cocoa/cocoa_wnd.mm @@ -524,22 +524,25 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel - (void)internalMouseMoveEvent:(NSEvent *)event { - NSPoint pt = [ self mousePositionFromEvent:event ]; - - if (_cursor.UpdateCursorPosition(pt.x, pt.y, false) && [ NSApp isActive ]) { - /* Warping cursor when in foreground */ - NSPoint warp = [ self convertPoint:NSMakePoint(_cursor.pos.x, self.bounds.size.height - _cursor.pos.y) toView:nil ]; - warp = [ self.window convertRectToScreen:NSMakeRect(warp.x, warp.y, 0, 0) ].origin; - warp.y = NSScreen.screens[0].frame.size.height - warp.y; - - /* Do the actual warp */ - CGWarpMouseCursorPosition(NSPointToCGPoint(warp)); - /* this is the magic call that fixes cursor "freezing" after warp */ - CGAssociateMouseAndMouseCursorPosition(true); + if (_cursor.fix_at) { + _cursor.UpdateCursorPositionRelative(event.deltaX, event.deltaY); + } else { + NSPoint pt = [ self mousePositionFromEvent:event ]; + _cursor.UpdateCursorPosition(pt.x, pt.y, false); } + HandleMouseEvents(); } +- (void)internalMouseButtonEvent +{ + bool cur_fix = _cursor.fix_at; + HandleMouseEvents(); + + /* Cursor fix mode was changed, synchronize with OS. */ + if (cur_fix != _cursor.fix_at) CGAssociateMouseAndMouseCursorPosition(!_cursor.fix_at); +} + - (BOOL)emulateRightButton:(NSEvent *)event { uint32 keymask = 0; @@ -564,7 +567,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel [ self rightMouseDown:event ]; } else { _left_button_down = true; - [ self internalMouseMoveEvent:event ]; + [ self internalMouseButtonEvent ]; } } - (void)mouseUp:(NSEvent *)event @@ -574,7 +577,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel } else { _left_button_down = false; _left_button_clicked = false; - [ self internalMouseMoveEvent:event ]; + [ self internalMouseButtonEvent ]; } } @@ -586,12 +589,12 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel { _right_button_down = true; _right_button_clicked = true; - [ self internalMouseMoveEvent:event ]; + [ self internalMouseButtonEvent ]; } - (void)rightMouseUp:(NSEvent *)event { _right_button_down = false; - [ self internalMouseMoveEvent:event ]; + [ self internalMouseButtonEvent ]; } - (void)scrollWheel:(NSEvent *)event |