From baf88b0d4b24d456ef92f0bdc92c96235ed757cd Mon Sep 17 00:00:00 2001 From: Clownacy Date: Fri, 25 Sep 2020 13:56:23 +0100 Subject: [PATCH] Convert cursors to RGBA ...instead of colour-keyed RGB. Less goofing-around for the user. --- assets/resources/CURSOR/CURSOR_IKA.png | Bin 225 -> 229 bytes assets/resources/CURSOR/CURSOR_NORMAL.png | Bin 131 -> 144 bytes src/Backends/Misc.h | 2 +- src/Backends/Platform/GLFW3.cpp | 42 +++------------------- src/Backends/Platform/Null.cpp | 4 +-- src/Backends/Platform/SDL2.cpp | 17 ++++----- src/Backends/Platform/WiiU.cpp | 4 +-- src/Main.cpp | 8 ++--- 8 files changed, 21 insertions(+), 56 deletions(-) diff --git a/assets/resources/CURSOR/CURSOR_IKA.png b/assets/resources/CURSOR/CURSOR_IKA.png index 0e559544010233d44d5fe8f33ac43e5c0cfb6a6f..c3892986790ed06e186f6b4921e6084900786206 100644 GIT binary patch delta 193 zcmV;y06zcW0p$UZEPnt10Dypiz`(%&|Nne=wvhk;00DGTPE!Ct=GbNc004wZL_t(2 z&&`m{4aG1BgOd$n!6Hamz%BdF^yp8Tl1s18QZ8SNu_)zRxHN%!Xm1O!lEH?>fo=&f z9^L@Xn3`Y?NK|!fI2=xTcoH%oKKT_7?9gT v+WRD8GvS(nc>+bK87OPM>+&BVpiR@{E@}|tGd6zi0wAq@bU}JANa}PL rAfs9UMW_)db6oOsKSBQa4SxY2=rS#MY@{w!00000NkvXXu0mjfeECwX diff --git a/assets/resources/CURSOR/CURSOR_NORMAL.png b/assets/resources/CURSOR/CURSOR_NORMAL.png index 600fb001bd06f1c6212d30b3cd967f8f58d0bf5a..83e6d54a0a2b331a7b4cb996a00574a4c7e0d710 100644 GIT binary patch delta 33 ocmZo>oWM9iQ#_27f#E-cN{NCx0|NtNNswPKgTu2MX%meD0Eegu{{R30 delta 20 ZcmbQh*vvRVlj}bN2=X+&Y?$Z}002$!2krm> diff --git a/src/Backends/Misc.h b/src/Backends/Misc.h index f12db458..c94d3471 100644 --- a/src/Backends/Misc.h +++ b/src/Backends/Misc.h @@ -92,7 +92,7 @@ void Backend_PostWindowCreation(void); bool Backend_GetBasePath(std::string *string_buffer); void Backend_HideMouse(void); void Backend_SetWindowIcon(const unsigned char *rgb_pixels, size_t width, size_t height); -void Backend_SetCursor(const unsigned char *rgb_pixels, size_t width, size_t height); +void Backend_SetCursor(const unsigned char *rgba_pixels, size_t width, size_t height); void PlaybackBackend_EnableDragAndDrop(void); bool Backend_SystemTask(bool active); void Backend_GetKeyboardState(bool *keyboard_state); diff --git a/src/Backends/Platform/GLFW3.cpp b/src/Backends/Platform/GLFW3.cpp index 717b7838..f96a0904 100644 --- a/src/Backends/Platform/GLFW3.cpp +++ b/src/Backends/Platform/GLFW3.cpp @@ -229,45 +229,13 @@ void Backend_SetWindowIcon(const unsigned char *rgb_pixels, size_t width, size_t } } -void Backend_SetCursor(const unsigned char *rgb_pixels, size_t width, size_t height) +void Backend_SetCursor(const unsigned char *rgba_pixels, size_t width, size_t height) { - // Convert to RGBA, since that's the only thing GLFW3 accepts - unsigned char *rgba_pixels = (unsigned char*)malloc(width * height * 4); + GLFWimage glfw_image = {(int)width, (int)height, rgba_pixels}; + cursor = glfwCreateCursor(&glfw_image, 0, 0); - const unsigned char *rgb_pointer = rgb_pixels; - unsigned char *rgba_pointer = rgba_pixels; - - if (rgba_pixels != NULL) - { - for (size_t y = 0; y < height; ++y) - { - for (size_t x = 0; x < width; ++x) - { - if (rgb_pointer[0] == 0xFF && rgb_pointer[1] == 0 && rgb_pointer[2] == 0xFF) // Colour-key - { - *rgba_pointer++ = *rgb_pointer++; - *rgba_pointer++ = *rgb_pointer++; - *rgba_pointer++ = *rgb_pointer++; - *rgba_pointer++ = 0; - } - else - { - *rgba_pointer++ = *rgb_pointer++; - *rgba_pointer++ = *rgb_pointer++; - *rgba_pointer++ = *rgb_pointer++; - *rgba_pointer++ = 0xFF; - } - } - } - - GLFWimage glfw_image = {(int)width, (int)height, rgba_pixels}; - cursor = glfwCreateCursor(&glfw_image, 0, 0); - - if (cursor != NULL) - glfwSetCursor(window, cursor); - - free(rgba_pixels); - } + if (cursor != NULL) + glfwSetCursor(window, cursor); } void Backend_EnableDragAndDrop(void) diff --git a/src/Backends/Platform/Null.cpp b/src/Backends/Platform/Null.cpp index e8757a0d..6d45e82d 100644 --- a/src/Backends/Platform/Null.cpp +++ b/src/Backends/Platform/Null.cpp @@ -41,9 +41,9 @@ void Backend_SetWindowIcon(const unsigned char *rgb_pixels, size_t width, size_t (void)height; } -void Backend_SetCursor(const unsigned char *rgb_pixels, size_t width, size_t height) +void Backend_SetCursor(const unsigned char *rgba_pixels, size_t width, size_t height) { - (void)rgb_pixels; + (void)rgba_pixels; (void)width; (void)height; } diff --git a/src/Backends/Platform/SDL2.cpp b/src/Backends/Platform/SDL2.cpp index 05099962..fac0d1fc 100644 --- a/src/Backends/Platform/SDL2.cpp +++ b/src/Backends/Platform/SDL2.cpp @@ -134,25 +134,22 @@ void Backend_SetWindowIcon(const unsigned char *rgb_pixels, size_t width, size_t } } -void Backend_SetCursor(const unsigned char *rgb_pixels, size_t width, size_t height) +void Backend_SetCursor(const unsigned char *rgba_pixels, size_t width, size_t height) { - cursor_surface_pixels = (unsigned char*)malloc(width * height * 3); + cursor_surface_pixels = (unsigned char*)malloc(width * height * 4); if (cursor_surface_pixels != NULL) { - memcpy(cursor_surface_pixels, rgb_pixels, width * height * 3); + memcpy(cursor_surface_pixels, rgba_pixels, width * height * 4); - cursor_surface = SDL_CreateRGBSurfaceWithFormatFrom(cursor_surface_pixels, width, height, 0, width * 3, SDL_PIXELFORMAT_RGB24); + cursor_surface = SDL_CreateRGBSurfaceWithFormatFrom(cursor_surface_pixels, width, height, 0, width * 4, SDL_PIXELFORMAT_RGBA32); if (cursor_surface != NULL) { - if (SDL_SetColorKey(cursor_surface, SDL_TRUE, SDL_MapRGB(cursor_surface->format, 0xFF, 0, 0xFF)) == 0) - { - cursor = SDL_CreateColorCursor(cursor_surface, 0, 0); + cursor = SDL_CreateColorCursor(cursor_surface, 0, 0); - if (cursor != NULL) - SDL_SetCursor(cursor); - } + if (cursor != NULL) + SDL_SetCursor(cursor); } } else diff --git a/src/Backends/Platform/WiiU.cpp b/src/Backends/Platform/WiiU.cpp index c358ed4f..f876aed8 100644 --- a/src/Backends/Platform/WiiU.cpp +++ b/src/Backends/Platform/WiiU.cpp @@ -83,9 +83,9 @@ void Backend_SetWindowIcon(const unsigned char *rgb_pixels, size_t width, size_t (void)height; } -void Backend_SetCursor(const unsigned char *rgb_pixels, size_t width, size_t height) +void Backend_SetCursor(const unsigned char *rgba_pixels, size_t width, size_t height) { - (void)rgb_pixels; + (void)rgba_pixels; (void)width; (void)height; } diff --git a/src/Main.cpp b/src/Main.cpp index b9839408..b8b4aa17 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -312,12 +312,12 @@ int main(int argc, char *argv[]) if (cursor_resource_data != NULL) { size_t cursor_width, cursor_height; - unsigned char *cursor_rgb_pixels = DecodeBitmap(cursor_resource_data, cursor_resource_size, &cursor_width, &cursor_height, 3); + unsigned char *cursor_rgba_pixels = DecodeBitmap(cursor_resource_data, cursor_resource_size, &cursor_width, &cursor_height, 4); - if (cursor_rgb_pixels != NULL) + if (cursor_rgba_pixels != NULL) { - Backend_SetCursor(cursor_rgb_pixels, cursor_width, cursor_height); - FreeBitmap(cursor_rgb_pixels); + Backend_SetCursor(cursor_rgba_pixels, cursor_width, cursor_height); + FreeBitmap(cursor_rgba_pixels); } }