1
0
Fork 0

(svn r18177) -Fix (r18001): [SDL] Viewport could jump when mouse moved and right button pressed at the same time.

release/1.0
peter1138 2009-11-18 23:07:29 +00:00
parent 4ade749532
commit b0049500a6
1 changed files with 19 additions and 14 deletions

View File

@ -365,25 +365,23 @@ static int PollEvent()
{ {
SDL_Event ev; SDL_Event ev;
if (_cursor.fix_at != _last_fix_at) {
_last_fix_at = _cursor.fix_at;
if (_last_fix_at) {
/* Move to centre of window */
SDL_CALL SDL_WarpMouse(_screen.width / 2, _screen.height / 2);
} else {
/* Restore position */
SDL_CALL SDL_WarpMouse(_cursor.pos.x, _cursor.pos.y);
}
}
if (!SDL_CALL SDL_PollEvent(&ev)) return -2; if (!SDL_CALL SDL_PollEvent(&ev)) return -2;
switch (ev.type) { switch (ev.type) {
case SDL_MOUSEMOTION: case SDL_MOUSEMOTION:
if (_cursor.fix_at) { if (_cursor.fix_at) {
int dx = ev.motion.x - _screen.width / 2; int dx;
int dy = ev.motion.y - _screen.height / 2; int dy;
if (_last_fix_at) {
dx = ev.motion.x - _screen.width / 2;
dy = ev.motion.y - _screen.height / 2;
} else {
/* Mouse hasn't been warped yet, so our movement is
* relative to the old position. */
dx = ev.motion.x - _cursor.pos.x;
dy = ev.motion.y - _cursor.pos.y;
_last_fix_at = true;
}
if (dx != 0 || dy != 0) { if (dx != 0 || dy != 0) {
_cursor.delta.x = dx; _cursor.delta.x = dx;
_cursor.delta.y = dy; _cursor.delta.y = dy;
@ -434,6 +432,13 @@ static int PollEvent()
_right_button_down = false; _right_button_down = false;
} }
HandleMouseEvents(); HandleMouseEvents();
if (_cursor.fix_at != _last_fix_at) {
/* Mouse fixing changed during a mouse button up event, so it
* must have been released. */
_last_fix_at = false;
SDL_CALL SDL_WarpMouse(_cursor.pos.x, _cursor.pos.y);
}
break; break;
case SDL_ACTIVEEVENT: case SDL_ACTIVEEVENT: