From cc6cf9a7411d01b9fe6dd59f455c454f8b392fb4 Mon Sep 17 00:00:00 2001 From: Constantine Tarasenkov Date: Tue, 3 Feb 2015 05:47:28 +0300 Subject: [PATCH] Adding functions to show and hide mouse cursor --- src/core.c | 42 ++++++++++++++++++++++++++++++++++++++++++ src/raylib.h | 3 +++ 2 files changed, 45 insertions(+) diff --git a/src/core.c b/src/core.c index efff62063..06523d50e 100644 --- a/src/core.c +++ b/src/core.c @@ -52,6 +52,11 @@ #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) #include // GLFW3 library: Windows, OpenGL context and Input management + #ifdef __linux + #define GLFW_EXPOSE_NATIVE_X11 // Linux specific definitions for getting + #define GLFW_EXPOSE_NATIVE_GLX // native functions like glfwGetX11Window + #include // which are required for hiding mouse + #endif //#include // OpenGL functions (GLFW3 already includes gl.h) //#define GLFW_DLL // Using GLFW DLL on Windows -> No, we use static version! #endif @@ -176,6 +181,7 @@ static bool cursorOnScreen = false; // Tracks if cursor is inside client static Texture2D cursor; // Cursor texture static Vector2 mousePosition; +static bool mouseHidden; static char previousKeyState[512] = { 0 }; // Required to check if key pressed/released once static char currentKeyState[512] = { 0 }; // Required to check if key pressed/released once @@ -771,6 +777,42 @@ int GetMouseWheelMove(void) } #endif +void HideMouse() +{ +#if defined(PLATFORM_DESKTOP) + #ifdef __linux + XColor Col; + const char Nil[] = {0}; + + Pixmap Pix = XCreateBitmapFromData(glfwGetX11Display(), glfwGetX11Window(window), Nil, 1, 1); + Cursor Cur = XCreatePixmapCursor(glfwGetX11Display(), Pix, Pix, &Col, &Col, 0, 0); + + XDefineCursor(glfwGetX11Display(), glfwGetX11Window(window), Cur); + XFreeCursor(glfwGetX11Display(), Cur); + #else + glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN); + #endif +#endif + mouseHidden = true; +} + +void ShowMouse() +{ +#if defined(PLATFORM_DESKTOP) + #ifdef __linux + XUndefineCursor(glfwGetX11Display(), glfwGetX11Window(window)); + #else + glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); + #endif +#endif + mouseHidden = false; +} + +bool IsMouseHidden() +{ + return mouseHidden; +} + // TODO: Enable gamepad usage on Rapsberry Pi // NOTE: emscripten not implemented #if defined(PLATFORM_DESKTOP) diff --git a/src/raylib.h b/src/raylib.h index 6ee782264..ec0551e61 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -362,6 +362,9 @@ int GetMouseY(void); // Returns mouse positio Vector2 GetMousePosition(void); // Returns mouse position XY void SetMousePosition(Vector2 position); // Set mouse position XY int GetMouseWheelMove(void); // Returns mouse wheel movement Y +void ShowMouse(void); // Shows mouse cursor +void HideMouse(void); // Hides mouse cursor +bool IsMouseHidden(void); // Returns true if mouse cursor is not visible #endif #if defined(PLATFORM_DESKTOP)