[aseprite] 108/134: Fix OS X mouse position issues
Tobias Hansen
thansen at moszumanska.debian.org
Sat Mar 14 17:10:14 UTC 2015
This is an automated email from the git hooks/post-receive script.
thansen pushed a commit to branch master
in repository aseprite.
commit 429c722f73574562141d2b5a72fc9868bf9cb1f7
Author: David Capello <davidcapello at gmail.com>
Date: Sun Jan 25 19:08:41 2015 -0300
Fix OS X mouse position issues
Fix problems using absolute mouse positions in the view when the mouse
were outside the view area.
---
src/allegro/src/macosx/qzmouse.m | 3 -
src/allegro/src/macosx/system.m | 156 +++++++++++++++++++++------------------
2 files changed, 85 insertions(+), 74 deletions(-)
diff --git a/src/allegro/src/macosx/qzmouse.m b/src/allegro/src/macosx/qzmouse.m
index cb6fd14..acbf35a 100644
--- a/src/allegro/src/macosx/qzmouse.m
+++ b/src/allegro/src/macosx/qzmouse.m
@@ -131,9 +131,6 @@ void osx_mouse_handler(int ax, int ay, int x, int y, int z, int buttons)
_mouse_y = ay;
_mouse_z += z;
- _mouse_x = CLAMP(mouse_minx, _mouse_x, mouse_maxx);
- _mouse_y = CLAMP(mouse_miny, _mouse_y, mouse_maxy);
-
_handle_mouse_input();
}
diff --git a/src/allegro/src/macosx/system.m b/src/allegro/src/macosx/system.m
index 9acefaa..d368c45 100644
--- a/src/allegro/src/macosx/system.m
+++ b/src/allegro/src/macosx/system.m
@@ -153,25 +153,14 @@ static RETSIGTYPE osx_signal_handler(int num)
-static BOOL handle_mouse_enter(
- NSRect frame, NSRect view, NSPoint point,
- int* mx, int* my, int* buttons)
+static void handle_mouse_enter()
{
- if (_mouse_installed && !_mouse_on &&
- (osx_window) && (NSPointInRect(point, view))) {
- *mx = point.x;
- *my = frame.size.height - point.y;
- *buttons = 0;
-
+ if (_mouse_installed && !_mouse_on && osx_window) {
_mouse_on = TRUE;
osx_hide_native_mouse();
if (osx_mouse_enter_callback)
osx_mouse_enter_callback();
-
- return YES;
}
- else
- return NO;
}
@@ -200,9 +189,8 @@ void osx_event_handler()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSEvent *event;
- NSDate *distant_past = [NSDate distantPast];
NSPoint point;
- NSRect frame, view;
+ NSView* view;
int dx = 0, dy = 0, dz = 0;
int mx = _mouse_x;
int my = _mouse_y;
@@ -211,10 +199,12 @@ void osx_event_handler()
BOOL gotmouseevent = NO;
while ((event = [NSApp nextEventMatchingMask: NSAnyEventMask
- untilDate: distant_past
- inMode: NSDefaultRunLoopMode
- dequeue: YES]) != nil)
+ untilDate: [NSDate distantPast]
+ inMode: NSDefaultRunLoopMode
+ dequeue: YES]))
{
+ BOOL send_event = YES;
+
_unix_lock_mutex(osx_skip_events_processing_mutex);
int skip_events_processing = osx_skip_events_processing;
_unix_unlock_mutex(osx_skip_events_processing_mutex);
@@ -224,16 +214,15 @@ void osx_event_handler()
continue;
}
- view = NSMakeRect(0, 0, gfx_driver->w, gfx_driver->h);
+ view = [osx_window contentView];
point = [event locationInWindow];
- if (osx_window)
- {
- frame = [[osx_window contentView] frame];
- }
- else
- {
- frame = [[NSScreen mainScreen] frame];
+ if (osx_window) {
+ if ([event window] == nil)
+ point = [osx_window convertScreenToBase:point];
+
+ point = [view convertPoint:point fromView:nil];
}
+
event_type = [event type];
switch (event_type) {
@@ -241,10 +230,11 @@ void osx_event_handler()
if (_keyboard_installed)
osx_keyboard_handler(TRUE, event);
-#if 0 // Avoid beeps TODO uncomment this when the OS X menus are ready
- if ([event modifierFlags] & NSCommandKeyMask && )
+#if 0 // Avoid beeps TODO comment this when the OS X menus are ready
+ if ([event modifierFlags] & NSCommandKeyMask)
[NSApp sendEvent: event];
#endif
+ send_event = NO;
break;
case NSKeyUp:
@@ -255,6 +245,7 @@ void osx_event_handler()
if ([event modifierFlags] & NSCommandKeyMask)
[NSApp sendEvent: event];
#endif
+ send_event = NO;
break;
case NSFlagsChanged:
@@ -267,87 +258,109 @@ void osx_event_handler()
case NSRightMouseDown:
/* App is regaining focus */
if (![NSApp isActive]) {
- handle_mouse_enter(frame, view, point, &mx, &my, &buttons);
+ handle_mouse_enter();
if (osx_window)
- [osx_window invalidateCursorRectsForView: [osx_window contentView]];
+ [osx_window invalidateCursorRectsForView:view];
+
if (_keyboard_installed)
osx_keyboard_focused(TRUE, 0);
+
_switch_in();
- gotmouseevent = YES;
- [NSApp sendEvent: event];
- break;
}
- buttons |= ((event_type == NSLeftMouseDown) ? 0x1 : 0);
- buttons |= ((event_type == NSRightMouseDown) ? 0x2 : 0);
- buttons |= ((event_type == NSOtherMouseDown) ? 0x4 : 0);
+ if (_mouse_on) {
+ buttons |= ((event_type == NSLeftMouseDown) ? 0x1 : 0);
+ buttons |= ((event_type == NSRightMouseDown) ? 0x2 : 0);
+ buttons |= ((event_type == NSOtherMouseDown) ? 0x4 : 0);
+ mx = point.x;
+ my = point.y;
- [NSApp sendEvent: event];
- gotmouseevent = YES;
+ gotmouseevent = YES;
+ }
break;
case NSLeftMouseUp:
case NSOtherMouseUp:
case NSRightMouseUp:
if ([NSApp isActive])
- handle_mouse_enter(frame, view, point, &mx, &my, &buttons);
+ handle_mouse_enter();
- buttons &= ~((event_type == NSLeftMouseUp) ? 0x1 : 0);
- buttons &= ~((event_type == NSRightMouseUp) ? 0x2 : 0);
- buttons &= ~((event_type == NSOtherMouseUp) ? 0x4 : 0);
+ if (_mouse_on) {
+ buttons &= ~((event_type == NSLeftMouseUp) ? 0x1 : 0);
+ buttons &= ~((event_type == NSRightMouseUp) ? 0x2 : 0);
+ buttons &= ~((event_type == NSOtherMouseUp) ? 0x4 : 0);
- [NSApp sendEvent: event];
- gotmouseevent = YES;
+ mx = point.x;
+ my = point.y;
+
+ gotmouseevent = YES;
+ }
break;
case NSLeftMouseDragged:
case NSRightMouseDragged:
case NSOtherMouseDragged:
case NSMouseMoved:
- if ([NSApp isActive])
- handle_mouse_enter(frame, view, point, &mx, &my, &buttons);
-
- dx += [event deltaX];
- dy += [event deltaY];
+ if ([NSApp isActive] && [view mouse:point inRect:[view frame]])
+ handle_mouse_enter();
- mx = point.x;
- my = frame.size.height - point.y;
+ if (_mouse_on) {
+ dx += [event deltaX];
+ dy += [event deltaY];
+ mx = point.x;
+ my = point.y;
- [NSApp sendEvent: event];
- gotmouseevent = YES;
+ gotmouseevent = YES;
+ }
break;
case NSScrollWheel:
- dz += [event deltaY];
+ if (_mouse_on)
+ dz += [event deltaY];
+
+ mx = point.x;
+ my = point.y;
+
gotmouseevent = YES;
break;
case NSMouseEntered:
- if (([event trackingNumber] == osx_mouse_tracking_rect) && ([NSApp isActive])) {
- if (handle_mouse_enter(frame, view, point, &mx, &my, &buttons))
+ if ([event window] == osx_window &&
+ [event trackingNumber] == osx_mouse_tracking_rect) {
+ handle_mouse_enter();
+
+ if (_mouse_on) {
+ mx = point.x;
+ my = point.y;
gotmouseevent = YES;
+ }
}
- [NSApp sendEvent: event];
break;
case NSMouseExited:
- if ([event trackingNumber] == osx_mouse_tracking_rect) {
- if (handle_mouse_leave())
- gotmouseevent = YES;
+ if (handle_mouse_leave()) {
+ mx = point.x;
+ my = point.y;
+ gotmouseevent = YES;
}
- [NSApp sendEvent: event];
break;
case NSAppKitDefined:
switch ([event subtype]) {
case NSApplicationActivatedEventType:
if (osx_window) {
- [osx_window invalidateCursorRectsForView: [osx_window contentView]];
+ [osx_window invalidateCursorRectsForView:view];
if (_keyboard_installed)
osx_keyboard_focused(TRUE, 0);
- handle_mouse_enter(frame, view, point, &mx, &my, &buttons);
+ handle_mouse_enter();
+
+ if (_mouse_on) {
+ mx = point.x;
+ my = point.y;
+ gotmouseevent = YES;
+ }
}
_switch_in();
break;
@@ -355,6 +368,7 @@ void osx_event_handler()
case NSApplicationDeactivatedEventType:
if (osx_window && _keyboard_installed)
osx_keyboard_focused(FALSE, 0);
+
handle_mouse_leave();
_switch_out();
break;
@@ -370,20 +384,20 @@ void osx_event_handler()
osx_window_first_expose = FALSE;
[osx_window setHasShadow: NO];
[osx_window setHasShadow: YES];
- [osx_window invalidateCursorRectsForView: [osx_window contentView]];
+ [osx_window invalidateCursorRectsForView:view];
}
break;
}
- [NSApp sendEvent: event];
- break;
-
- default:
- [NSApp sendEvent: event];
break;
}
+
+ if (send_event == YES)
+ [NSApp sendEvent: event];
+
+ if (gotmouseevent == YES)
+ osx_mouse_handler(mx, my, dx, dy, dz, buttons);
}
- if (gotmouseevent == YES)
- osx_mouse_handler(mx, my, dx, dy, dz, buttons);
+
[pool release];
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git
More information about the Pkg-games-commits
mailing list