Add SetMouseCursorImage() and ClearMouseCursorImage() for GLFW platform

This commit is contained in:
Ananyo Bhattacharya 2026-03-15 12:22:07 +05:30
parent a6d5a7ffbc
commit 7b4d4989d1
2 changed files with 43 additions and 0 deletions

View File

@ -111,6 +111,7 @@
//----------------------------------------------------------------------------------
typedef struct {
GLFWwindow *handle; // GLFW window handle (graphic device)
GLFWcursor *customCursor; // GLFW custom cursor handle
} PlatformData;
//----------------------------------------------------------------------------------
@ -1238,6 +1239,8 @@ void SetMousePosition(int x, int y)
// Set mouse cursor
void SetMouseCursor(int cursor)
{
ClearMouseCursorImage();
CORE.Input.Mouse.cursor = cursor;
if (cursor == MOUSE_CURSOR_DEFAULT) glfwSetCursor(platform.handle, NULL);
else
@ -1247,6 +1250,38 @@ void SetMouseCursor(int cursor)
}
}
// Set mouse cursor to custom image
void SetMouseCursorImage(Image image, int hotX, int hotY)
{
// Ensure image is RGBA format
Image copy = ImageCopy(image);
ImageFormat(&copy, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8);
GLFWimage glfwImage = { copy.width, copy.height, (unsigned char *)copy.data };
if (platform.customCursor != NULL)
{
glfwDestroyCursor(platform.customCursor);
platform.customCursor = NULL;
}
platform.customCursor = glfwCreateCursor(&glfwImage, hotX, hotY);
glfwSetCursor(platform.handle, platform.customCursor);
UnloadImage(copy);
}
// Restore default mouse cursor
void ClearMouseCursorImage(void)
{
if (platform.customCursor != NULL)
{
glfwSetCursor(platform.handle, NULL);
glfwDestroyCursor(platform.customCursor);
platform.customCursor = NULL;
}
}
// Get physical key name
const char *GetKeyName(int key)
{
@ -1870,6 +1905,12 @@ int InitPlatform(void)
// Close platform
void ClosePlatform(void)
{
if (platform.customCursor != NULL)
{
glfwDestroyCursor(platform.customCursor);
platform.customCursor = NULL;
}
glfwDestroyWindow(platform.handle);
glfwTerminate();

View File

@ -1232,6 +1232,8 @@ RLAPI void SetMouseScale(float scaleX, float scaleY); // Set mouse scali
RLAPI float GetMouseWheelMove(void); // Get mouse wheel movement for X or Y, whichever is larger
RLAPI Vector2 GetMouseWheelMoveV(void); // Get mouse wheel movement for both X and Y
RLAPI void SetMouseCursor(int cursor); // Set mouse cursor
RLAPI void SetMouseCursorImage(Image image, int hotX, int hotY); // Set mouse cursor to custom image
RLAPI void ClearMouseCursorImage(void); // Restore default mouse cursor
// Input-related functions: touch
RLAPI int GetTouchX(void); // Get touch position X for touch point 0 (relative to screen size)