mirror of https://github.com/encounter/SDL.git
cocoa: Revised synthesized mouse/touch event strategy.
I _think_ I understand what Sylvain is working on here now, so hopefully I got this right. Fixes Bugzilla #4576. (I think!)
This commit is contained in:
parent
50f5123190
commit
294574647d
|
@ -103,7 +103,11 @@ SDL_TouchMouseEventsChanged(void *userdata, const char *name, const char *oldVal
|
||||||
if (hint && (*hint == '0' || SDL_strcasecmp(hint, "false") == 0)) {
|
if (hint && (*hint == '0' || SDL_strcasecmp(hint, "false") == 0)) {
|
||||||
mouse->touch_mouse_events = SDL_FALSE;
|
mouse->touch_mouse_events = SDL_FALSE;
|
||||||
} else {
|
} else {
|
||||||
|
#if defined(__MACOSX__) /* macOS synthesizes its own events for this. */
|
||||||
|
mouse->touch_mouse_events = SDL_FALSE;
|
||||||
|
#else
|
||||||
mouse->touch_mouse_events = SDL_TRUE;
|
mouse->touch_mouse_events = SDL_TRUE;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -408,8 +408,7 @@ Cocoa_HandleMouseEvent(_THIS, NSEvent *event)
|
||||||
DLog("Motion was (%g, %g), offset to (%g, %g)", [event deltaX], [event deltaY], deltaX, deltaY);
|
DLog("Motion was (%g, %g), offset to (%g, %g)", [event deltaX], [event deltaY], deltaX, deltaY);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SDL_MouseID mouseID = ([event subtype] == NSEventSubtypeTouch) ? SDL_TOUCH_MOUSEID : mouse->mouseID;
|
SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 1, (int)deltaX, (int)deltaY);
|
||||||
SDL_SendMouseMotion(mouse->focus, mouseID, 1, (int)deltaX, (int)deltaY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -437,8 +436,8 @@ Cocoa_HandleMouseWheel(SDL_Window *window, NSEvent *event)
|
||||||
} else if (y < 0) {
|
} else if (y < 0) {
|
||||||
y = SDL_floor(y);
|
y = SDL_floor(y);
|
||||||
}
|
}
|
||||||
const SDL_MouseID mouseID = ([event subtype] == NSEventSubtypeTouch) ? SDL_TOUCH_MOUSEID : mouse->mouseID;
|
|
||||||
SDL_SendMouseWheel(window, mouseID, x, y, direction);
|
SDL_SendMouseWheel(window, mouse->mouseID, x, y, direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -933,14 +933,8 @@ SetWindowStyle(SDL_Window * window, NSUInteger style)
|
||||||
|
|
||||||
clicks = (int) [theEvent clickCount];
|
clicks = (int) [theEvent clickCount];
|
||||||
|
|
||||||
SDL_MouseID mouseID;
|
const SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
if ([theEvent subtype] == NSEventSubtypeTouch) {
|
const SDL_MouseID mouseID = mouse ? mouse->mouseID : 0;
|
||||||
mouseID = SDL_TOUCH_MOUSEID;
|
|
||||||
} else {
|
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
|
||||||
mouseID = mouse ? mouse->mouseID : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_SendMouseButtonClicks(_data->window, mouseID, SDL_PRESSED, button, clicks);
|
SDL_SendMouseButtonClicks(_data->window, mouseID, SDL_PRESSED, button, clicks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -986,14 +980,8 @@ SetWindowStyle(SDL_Window * window, NSUInteger style)
|
||||||
|
|
||||||
clicks = (int) [theEvent clickCount];
|
clicks = (int) [theEvent clickCount];
|
||||||
|
|
||||||
SDL_MouseID mouseID;
|
const SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
if ([theEvent subtype] == NSEventSubtypeTouch) {
|
const SDL_MouseID mouseID = mouse ? mouse->mouseID : 0;
|
||||||
mouseID = SDL_TOUCH_MOUSEID;
|
|
||||||
} else {
|
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
|
||||||
mouseID = mouse ? mouse->mouseID : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_SendMouseButtonClicks(_data->window, mouseID, SDL_RELEASED, button, clicks);
|
SDL_SendMouseButtonClicks(_data->window, mouseID, SDL_RELEASED, button, clicks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1058,8 +1046,7 @@ SetWindowStyle(SDL_Window * window, NSUInteger style)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const SDL_MouseID mouseID = ([theEvent subtype] == NSEventSubtypeTouch) ? SDL_TOUCH_MOUSEID : mouse->mouseID;
|
SDL_SendMouseMotion(window, mouse->mouseID, 0, x, y);
|
||||||
SDL_SendMouseMotion(window, mouseID, 0, x, y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseDragged:(NSEvent *)theEvent
|
- (void)mouseDragged:(NSEvent *)theEvent
|
||||||
|
@ -1093,8 +1080,7 @@ SetWindowStyle(SDL_Window * window, NSUInteger style)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (existingTouchCount == 0) {
|
if (existingTouchCount == 0) {
|
||||||
const BOOL ismouse = ([theEvent subtype] == NSEventSubtypeMouseEvent);
|
const SDL_TouchID touchID = (SDL_TouchID)(intptr_t)[[touches anyObject] device];
|
||||||
const SDL_TouchID touchID = ismouse ? SDL_MOUSE_TOUCHID : (SDL_TouchID)(intptr_t)[[touches anyObject] device];
|
|
||||||
int numFingers = SDL_GetNumTouchFingers(touchID);
|
int numFingers = SDL_GetNumTouchFingers(touchID);
|
||||||
DLog("Reset Lost Fingers: %d", numFingers);
|
DLog("Reset Lost Fingers: %d", numFingers);
|
||||||
for (--numFingers; numFingers >= 0; --numFingers) {
|
for (--numFingers; numFingers >= 0; --numFingers) {
|
||||||
|
@ -1124,11 +1110,10 @@ SetWindowStyle(SDL_Window * window, NSUInteger style)
|
||||||
|
|
||||||
- (void)handleTouches:(NSTouchPhase) phase withEvent:(NSEvent *) theEvent
|
- (void)handleTouches:(NSTouchPhase) phase withEvent:(NSEvent *) theEvent
|
||||||
{
|
{
|
||||||
const BOOL ismouse = ([theEvent subtype] == NSEventSubtypeMouseEvent);
|
|
||||||
NSSet *touches = [theEvent touchesMatchingPhase:phase inView:nil];
|
NSSet *touches = [theEvent touchesMatchingPhase:phase inView:nil];
|
||||||
|
|
||||||
for (NSTouch *touch in touches) {
|
for (NSTouch *touch in touches) {
|
||||||
const SDL_TouchID touchId = ismouse ? SDL_MOUSE_TOUCHID : (SDL_TouchID)(intptr_t)[touch device];
|
const SDL_TouchID touchId = (SDL_TouchID)(intptr_t)[touch device];
|
||||||
SDL_TouchDeviceType devtype = SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE;
|
SDL_TouchDeviceType devtype = SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE;
|
||||||
|
|
||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101202 /* Added in the 10.12.2 SDK. */
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101202 /* Added in the 10.12.2 SDK. */
|
||||||
|
|
Loading…
Reference in New Issue