summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/openttd.cpp1
-rw-r--r--src/os/windows/win32.cpp12
-rw-r--r--src/os/windows/win32.h2
-rw-r--r--src/video/allegro_v.cpp12
-rw-r--r--src/video/allegro_v.h2
-rw-r--r--src/video/sdl_v.cpp7
-rw-r--r--src/video/sdl_v.h2
-rw-r--r--src/video/video_driver.hpp5
-rw-r--r--src/video/win32_v.cpp6
-rw-r--r--src/video/win32_v.h2
10 files changed, 44 insertions, 7 deletions
diff --git a/src/openttd.cpp b/src/openttd.cpp
index cda4aa3c1..00ddade4b 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -782,6 +782,7 @@ int ttd_main(int argc, char *argv[])
/* restore saved music volume */
_music_driver->SetVolume(_settings_client.music.music_vol);
+ _video_driver->ClaimMousePointer();
NetworkStartUp(); // initialize network-core
diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp
index 54c5c9cd3..39203cbca 100644
--- a/src/os/windows/win32.cpp
+++ b/src/os/windows/win32.cpp
@@ -28,14 +28,16 @@
#include <sys/stat.h>
static bool _has_console;
+static bool _cursor_disable = true;
+static bool _cursor_visible = true;
-static bool cursor_visible = true;
-
-bool MyShowCursor(bool show)
+bool MyShowCursor(bool show, bool toggle)
{
- if (cursor_visible == show) return show;
+ if (toggle) _cursor_disable = !_cursor_disable;
+ if (_cursor_disable) return show;
+ if (_cursor_visible == show) return show;
- cursor_visible = show;
+ _cursor_visible = show;
ShowCursor(show);
return !show;
diff --git a/src/os/windows/win32.h b/src/os/windows/win32.h
index 19f04d1f2..66c519973 100644
--- a/src/os/windows/win32.h
+++ b/src/os/windows/win32.h
@@ -13,7 +13,7 @@
#define WIN32_H
#include <windows.h>
-bool MyShowCursor(bool show);
+bool MyShowCursor(bool show, bool toggle = false);
typedef void (*Function)(int);
bool LoadLibraryList(Function proc[], const char *dll);
diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp
index 27b7a4448..0154cb519 100644
--- a/src/video/allegro_v.cpp
+++ b/src/video/allegro_v.cpp
@@ -225,11 +225,23 @@ static bool CreateMainSurface(uint w, uint h)
snprintf(caption, sizeof(caption), "OpenTTD %s", _openttd_revision);
set_window_title(caption);
+ enable_hardware_cursor();
+ select_mouse_cursor(MOUSE_CURSOR_ARROW);
+ show_mouse(_allegro_screen);
+
GameSizeChanged();
return true;
}
+bool VideoDriver_Allegro::ClaimMousePointer()
+{
+ select_mouse_cursor(MOUSE_CURSOR_NONE);
+ show_mouse(_allegro_screen);
+ disable_hardware_cursor();
+ return true;
+}
+
struct VkMapping {
uint16 vk_from;
byte vk_count;
diff --git a/src/video/allegro_v.h b/src/video/allegro_v.h
index 6a81159ca..da95269ce 100644
--- a/src/video/allegro_v.h
+++ b/src/video/allegro_v.h
@@ -31,6 +31,8 @@ public:
/* virtual */ bool AfterBlitterChange();
+ /* virtual */ bool ClaimMousePointer();
+
/* virtual */ const char *GetName() const { return "allegro"; }
};
diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp
index 8768004b6..ebb0ca757 100644
--- a/src/video/sdl_v.cpp
+++ b/src/video/sdl_v.cpp
@@ -259,13 +259,18 @@ static bool CreateMainSurface(uint w, uint h)
snprintf(caption, sizeof(caption), "OpenTTD %s", _openttd_revision);
SDL_CALL SDL_WM_SetCaption(caption, caption);
- SDL_CALL SDL_ShowCursor(0);
GameSizeChanged();
return true;
}
+bool VideoDriver_SDL::ClaimMousePointer()
+{
+ SDL_CALL SDL_ShowCursor(0);
+ return true;
+}
+
struct VkMapping {
uint16 vk_from;
byte vk_count;
diff --git a/src/video/sdl_v.h b/src/video/sdl_v.h
index baecc7ba7..e4df2a30a 100644
--- a/src/video/sdl_v.h
+++ b/src/video/sdl_v.h
@@ -31,6 +31,8 @@ public:
/* virtual */ bool AfterBlitterChange();
+ /* virtual */ bool ClaimMousePointer();
+
/* virtual */ const char *GetName() const { return "sdl"; }
};
diff --git a/src/video/video_driver.hpp b/src/video/video_driver.hpp
index 4e8a2a0a1..306fe2803 100644
--- a/src/video/video_driver.hpp
+++ b/src/video/video_driver.hpp
@@ -56,6 +56,11 @@ public:
return true;
}
+ virtual bool ClaimMousePointer()
+ {
+ return true;
+ }
+
/**
* Whether the driver has a graphical user interface with the end user.
* Or in other words, whether we should spawn a thread for world generation
diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp
index cc242fb2e..f571638b8 100644
--- a/src/video/win32_v.cpp
+++ b/src/video/win32_v.cpp
@@ -81,6 +81,12 @@ static void UpdatePalette(HDC dc, uint start, uint count)
SetDIBColorTable(dc, start, count, rgb);
}
+bool VideoDriver_Win32::ClaimMousePointer()
+{
+ MyShowCursor(false, true);
+ return true;
+}
+
struct VkMapping {
byte vk_from;
byte vk_count;
diff --git a/src/video/win32_v.h b/src/video/win32_v.h
index f6c562a94..0706c0ee7 100644
--- a/src/video/win32_v.h
+++ b/src/video/win32_v.h
@@ -31,6 +31,8 @@ public:
/* virtual */ bool AfterBlitterChange();
+ /* virtual */ bool ClaimMousePointer();
+
/* virtual */ const char *GetName() const { return "win32"; }
bool MakeWindow(bool full_screen);