Skip to content

Commit

Permalink
Fixed bug 2931 - Large relative mouse motion jumps when using touch i…
Browse files Browse the repository at this point in the history
…nput
  • Loading branch information
slouken committed Aug 13, 2017
1 parent b2e2bcc commit bfd5a13
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
22 changes: 18 additions & 4 deletions src/events/SDL_mouse.c
Expand Up @@ -173,6 +173,7 @@ SDL_SetMouseFocus(SDL_Window * window)
}

mouse->focus = window;
mouse->has_position = SDL_FALSE;

if (mouse->focus) {
SDL_SendWindowEvent(mouse->focus, SDL_WINDOWEVENT_ENTER, 0, 0);
Expand Down Expand Up @@ -223,10 +224,10 @@ SDL_UpdateMouseFocus(SDL_Window * window, int x, int y, Uint32 buttonstate)

if (window != mouse->focus) {
#ifdef DEBUG_MOUSE
printf("Mouse entered window, synthesizing focus gain & move event\n");
printf("Mouse entered window, synthesizing focus gain & move event\n");
#endif
SDL_SetMouseFocus(window);
SDL_PrivateSendMouseMotion(window, mouse->mouseID, 0, x, y);
SDL_SetMouseFocus(window);
SDL_PrivateSendMouseMotion(window, mouse->mouseID, 0, x, y);
}
return SDL_TRUE;
}
Expand Down Expand Up @@ -271,7 +272,7 @@ SDL_PrivateSendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relativ
return 0;
}

if (mouse->relative_mode_warp) {
if (mouseID != SDL_TOUCH_MOUSEID && mouse->relative_mode_warp) {
int center_x = 0, center_y = 0;
SDL_GetWindowSize(window, &center_x, &center_y);
center_x /= 2;
Expand Down Expand Up @@ -309,6 +310,19 @@ SDL_PrivateSendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relativ
return 0;
}

/* Ignore relative motion when first positioning the mouse */
if (!mouse->has_position) {
xrel = 0;
yrel = 0;
mouse->has_position = SDL_TRUE;
}

/* Ignore relative motion positioning the first touch */
if (mouseID == SDL_TOUCH_MOUSEID && !mouse->buttonstate) {
xrel = 0;
yrel = 0;
}

/* Update internal mouse coordinates */
if (!mouse->relative_mode) {
mouse->x = x;
Expand Down
1 change: 1 addition & 0 deletions src/events/SDL_mouse_c.h
Expand Up @@ -81,6 +81,7 @@ typedef struct
int ydelta;
int last_x, last_y; /* the last reported x and y coordinates */
Uint32 buttonstate;
SDL_bool has_position;
SDL_bool relative_mode;
SDL_bool relative_mode_warp;
float normal_speed_scale;
Expand Down

0 comments on commit bfd5a13

Please sign in to comment.