diff options
| author | Chance Snow <[email protected]> | 2020-10-21 03:55:52 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-10-21 10:55:52 +0200 |
| commit | 9833fe45eb5cd6cfd3593b7f4d1aae9cf7367729 (patch) | |
| tree | b231ff0cb2fc2c9ba43858f6ac7f272aa1efe077 /src/core.c | |
| parent | eb3e9e4df53c0908a4ae3dd91cbe0e3a42134794 (diff) | |
| download | raylib-9833fe45eb5cd6cfd3593b7f4d1aae9cf7367729.tar.gz raylib-9833fe45eb5cd6cfd3593b7f4d1aae9cf7367729.zip | |
Added desktop cursor getter and setter functions (#1407)
* [core] Added desktop cursor getter and setter functions
* Example: Set mouse cursor in text input box
* Setup standard cursors _after_ GLFW window initialization
* Remove old `int GetMouseWheelMove` declaration
Diffstat (limited to 'src/core.c')
| -rw-r--r-- | src/core.c | 53 |
1 files changed, 52 insertions, 1 deletions
@@ -423,6 +423,8 @@ typedef struct CoreData { Vector2 offset; // Mouse offset Vector2 scale; // Mouse scaling + MouseCursor cursor; // Tracks current mouse cursor + void* standardCursors[10]; // Opaque pointers to GLFW cursors bool cursorHidden; // Track if cursor is hidden bool cursorOnScreen; // Tracks if cursor is inside client area @@ -653,8 +655,9 @@ void InitWindow(int width, int height, const char *title) // Initialize required global values different than 0 CORE.Input.Keyboard.exitKey = KEY_ESCAPE; CORE.Input.Mouse.scale = (Vector2){ 1.0f, 1.0f }; + CORE.Input.Mouse.cursor = MOUSE_CURSOR_ARROW; CORE.Input.Gamepad.lastButtonPressed = -1; - + #if defined(PLATFORM_UWP) // The axis count is 6 (2 thumbsticks and left and right trigger) CORE.Input.Gamepad.axisCount = 6; @@ -753,6 +756,26 @@ void InitWindow(int width, int height, const char *title) #endif #endif +#if defined(PLATFORM_DESKTOP) + // Initialize GLFW's standard cursors + const int shapes[] = { + 0x00036001, // MOUSE_CURSOR_ARROW + 0x00036002, // MOUSE_CURSOR_IBEAM + 0x00036003, // MOUSE_CURSOR_CROSSHAIR + 0x00036004, // MOUSE_CURSOR_POINTING_HAND + 0x00036005, // MOUSE_CURSOR_RESIZE_EW + 0x00036006, // MOUSE_CURSOR_RESIZE_NS + 0x00036007, // MOUSE_CURSOR_RESIZE_NWSE + 0x00036008, // MOUSE_CURSOR_RESIZE_NESW + 0x00036009, // MOUSE_CURSOR_RESIZE_ALL + 0x0003600A, // MOUSE_CURSOR_NOT_ALLOWED + }; + for (int i = 0; i < sizeof(CORE.Input.Mouse.standardCursors) / sizeof(CORE.Input.Mouse.standardCursors[0]); i += 1) + { + CORE.Input.Mouse.standardCursors[i] = glfwCreateStandardCursor(shapes[i]); + } +#endif + #if defined(PLATFORM_WEB) // Detect fullscreen change events emscripten_set_fullscreenchange_callback("#canvas", NULL, 1, EmscriptenFullscreenChangeCallback); @@ -797,6 +820,11 @@ void CloseWindow(void) rlglClose(); // De-init rlgl +#if defined(PLATFORM_DESKTOP) + for (int i = 0; i < sizeof(CORE.Input.Mouse.standardCursors) / sizeof(CORE.Input.Mouse.standardCursors[0]); i += 1) + glfwDestroyCursor(CORE.Input.Mouse.standardCursors[i]); +#endif + #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) glfwDestroyWindow(CORE.Window.handle); glfwTerminate(); @@ -2733,6 +2761,29 @@ float GetMouseWheelMove(void) #endif } +// Returns mouse cursor +MouseCursor GetMouseCursor(void) +{ + return CORE.Input.Mouse.cursor; +} + +// Set mouse cursor +// NOTE: This is a no-op on platforms other than PLATFORM_DESKTOP +void SetMouseCursor(MouseCursor cursor) +{ +#if defined(PLATFORM_DESKTOP) + CORE.Input.Mouse.cursor = cursor; + if (cursor == MOUSE_CURSOR_DEFAULT) + { + glfwSetCursor(CORE.Window.handle, NULL); + } + else + { + glfwSetCursor(CORE.Window.handle, CORE.Input.Mouse.standardCursors[cursor]); + } +#endif +} + // Returns touch position X for touch point 0 (relative to screen size) int GetTouchX(void) { |
