|
@@ -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)
|
|
|
{
|