summaryrefslogtreecommitdiff
path: root/src/video
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2015-02-22 23:06:45 +0000
committerfrosch <frosch@openttd.org>2015-02-22 23:06:45 +0000
commit352e528cdab81f1903f13260dedb34d1b113b6e8 (patch)
tree138854a4db9517f6455825ad79acdfbac9151d9d /src/video
parentfece468d9678fd11ed5435286dd32353c61b1dcc (diff)
downloadopenttd-352e528cdab81f1903f13260dedb34d1b113b6e8.tar.xz
(svn r27167) -Fix: [SDL, Windows] Right-mouse-button scrolling scrolled/jumped way to far, when OpenTTD lagged during mouse event processing.
Diffstat (limited to 'src/video')
-rw-r--r--src/video/allegro_v.cpp18
-rw-r--r--src/video/cocoa/event.mm18
-rw-r--r--src/video/sdl_v.cpp16
-rw-r--r--src/video/win32_v.cpp24
4 files changed, 12 insertions, 64 deletions
diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp
index c75bcfb2e..01628f99c 100644
--- a/src/video/allegro_v.cpp
+++ b/src/video/allegro_v.cpp
@@ -388,22 +388,10 @@ static void PollEvent()
}
/* Mouse movement */
- int dx = mouse_x - _cursor.pos.x;
- int dy = mouse_y - _cursor.pos.y;
- if (dx != 0 || dy != 0) {
- if (_cursor.fix_at) {
- _cursor.delta.x = dx;
- _cursor.delta.y = dy;
- position_mouse(_cursor.pos.x, _cursor.pos.y);
- } else {
- _cursor.delta.x = dx;
- _cursor.delta.y = dy;
- _cursor.pos.x = mouse_x;
- _cursor.pos.y = mouse_y;
- _cursor.dirty = true;
- }
- mouse_action = true;
+ if (_cursor.UpdateCursorPosition(mouse_x, mouse_y, false)) {
+ position_mouse(_cursor.pos.x, _cursor.pos.y);
}
+ if (_cursor.delta.x != 0 || _cursor.delta.y) mouse_action = true;
static int prev_mouse_z = 0;
if (prev_mouse_z != mouse_z) {
diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm
index 844b2dcd0..c8d10717e 100644
--- a/src/video/cocoa/event.mm
+++ b/src/video/cocoa/event.mm
@@ -362,22 +362,8 @@ static void QZ_DoUnsidedModifiers(unsigned int newMods)
static void QZ_MouseMovedEvent(int x, int y)
{
- if (_cursor.fix_at) {
- int dx = x - _cursor.pos.x;
- int dy = y - _cursor.pos.y;
-
- if (dx != 0 || dy != 0) {
- _cursor.delta.x += dx;
- _cursor.delta.y += dy;
-
- QZ_WarpCursor(_cursor.pos.x, _cursor.pos.y);
- }
- } else {
- _cursor.delta.x = x - _cursor.pos.x;
- _cursor.delta.y = y - _cursor.pos.y;
- _cursor.pos.x = x;
- _cursor.pos.y = y;
- _cursor.dirty = true;
+ if (_cursor.UpdateCursorPosition(x, y, false)) {
+ QZ_WarpCursor(_cursor.pos.x, _cursor.pos.y);
}
HandleMouseEvents();
}
diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp
index d59ab20d4..ea68c2165 100644
--- a/src/video/sdl_v.cpp
+++ b/src/video/sdl_v.cpp
@@ -545,20 +545,8 @@ int VideoDriver_SDL::PollEvent()
switch (ev.type) {
case SDL_MOUSEMOTION:
- if (_cursor.fix_at) {
- int dx = ev.motion.x - _cursor.pos.x;
- int dy = ev.motion.y - _cursor.pos.y;
- if (dx != 0 || dy != 0) {
- _cursor.delta.x = dx;
- _cursor.delta.y = dy;
- SDL_CALL SDL_WarpMouse(_cursor.pos.x, _cursor.pos.y);
- }
- } else {
- _cursor.delta.x = ev.motion.x - _cursor.pos.x;
- _cursor.delta.y = ev.motion.y - _cursor.pos.y;
- _cursor.pos.x = ev.motion.x;
- _cursor.pos.y = ev.motion.y;
- _cursor.dirty = true;
+ if (_cursor.UpdateCursorPosition(ev.motion.x, ev.motion.y, true)) {
+ SDL_CALL SDL_WarpMouse(_cursor.pos.x, _cursor.pos.y);
}
HandleMouseEvents();
break;
diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp
index 6e7d33b9f..4dcc9eb70 100644
--- a/src/video/win32_v.cpp
+++ b/src/video/win32_v.cpp
@@ -747,25 +747,11 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc);
}
- if (_cursor.fix_at) {
- int dx = x - _cursor.pos.x;
- int dy = y - _cursor.pos.y;
- if (dx != 0 || dy != 0) {
- _cursor.delta.x = dx;
- _cursor.delta.y = dy;
-
- pt.x = _cursor.pos.x;
- pt.y = _cursor.pos.y;
-
- ClientToScreen(hwnd, &pt);
- SetCursorPos(pt.x, pt.y);
- }
- } else {
- _cursor.delta.x = x - _cursor.pos.x;
- _cursor.delta.y = y - _cursor.pos.y;
- _cursor.pos.x = x;
- _cursor.pos.y = y;
- _cursor.dirty = true;
+ if (_cursor.UpdateCursorPosition(x, y, true)) {
+ pt.x = _cursor.pos.x;
+ pt.y = _cursor.pos.y;
+ ClientToScreen(hwnd, &pt);
+ SetCursorPos(pt.x, pt.y);
}
MyShowCursor(false);
HandleMouseEvents();