mirror of https://github.com/OpenTTD/OpenTTD
(svn r18177) -Fix (r18001): [SDL] Viewport could jump when mouse moved and right button pressed at the same time.
parent
4ade749532
commit
b0049500a6
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue