From 0988796f3c2e2543c240b552f20825a6a7b28c7d Mon Sep 17 00:00:00 2001 From: Guilherme Felipe Date: Thu, 5 Apr 2018 15:35:20 -0300 Subject: [PATCH] Remove size restriction for mouse cursor --- platform/osx/os_osx.mm | 4 +--- platform/windows/os_windows.cpp | 13 ++++++------- platform/x11/os_x11.cpp | 10 +++++----- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 271d714943b..bcf950b108d 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -1199,9 +1199,7 @@ void OS_OSX::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c Ref texture = p_cursor; Image image = texture->get_data(); - int image_size = 32 * 32; - - ERR_FAIL_COND(texture->get_width() != 32 || texture->get_height() != 32); + ERR_FAIL_COND(texture->get_width() > 256 || texture->get_height() > 256); NSBitmapImageRep *imgrep = [[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 3b419230f7a..ee9313b8e94 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -1982,24 +1982,23 @@ void OS_Windows::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shap Ref texture = p_cursor; Image image = texture->get_data(); - UINT image_size = 32 * 32; + UINT image_size = texture->get_width() * texture->get_height(); UINT size = sizeof(UINT) * image_size; - ERR_FAIL_COND(texture->get_width() != 32 || texture->get_height() != 32); + ERR_FAIL_COND(texture->get_width() > 256 || texture->get_height() > 256); // Create the BITMAP with alpha channel COLORREF *buffer = (COLORREF *)malloc(sizeof(COLORREF) * image_size); for (UINT index = 0; index < image_size; index++) { - int column_index = floor(index / 32); - int row_index = index % 32; + int row_index = floor(index / texture->get_width()); + int column_index = index % texture->get_width(); - Color pcColor = image.get_pixel(row_index, column_index); - *(buffer + index) = image.get_pixel(row_index, column_index).to_ARGB32(); + *(buffer + index) = image.get_pixel(column_index, row_index).to_ARGB32(); } // Using 4 channels, so 4 * 8 bits - HBITMAP bitmap = CreateBitmap(32, 32, 1, 4 * 8, buffer); + HBITMAP bitmap = CreateBitmap(texture->get_width(), texture->get_height(), 1, 4 * 8, buffer); COLORREF clrTransparent = -1; // Create the AND and XOR masks for the bitmap diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index 04bbc6f31e4..753e33936ed 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -2165,11 +2165,11 @@ void OS_X11::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c Ref texture = p_cursor; Image image = texture->get_data(); - ERR_FAIL_COND(texture->get_width() != 32 || texture->get_height() != 32); + ERR_FAIL_COND(texture->get_width() > 256 || texture->get_height() > 256); // Create the cursor structure XcursorImage *cursor_image = XcursorImageCreate(texture->get_width(), texture->get_height()); - XcursorUInt image_size = 32 * 32; + XcursorUInt image_size = texture->get_width() * texture->get_height(); XcursorDim size = sizeof(XcursorPixel) * image_size; cursor_image->version = 1; @@ -2181,10 +2181,10 @@ void OS_X11::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c cursor_image->pixels = (XcursorPixel *)malloc(size); for (XcursorPixel index = 0; index < image_size; index++) { - int column_index = floor(index / 32); - int row_index = index % 32; + int row_index = floor(index / texture->get_width()); + int column_index = index % texture->get_width(); - *(cursor_image->pixels + index) = image.get_pixel(row_index, column_index).to_ARGB32(); + *(cursor_image->pixels + index) = image.get_pixel(column_index, row_index).to_ARGB32(); } ERR_FAIL_COND(cursor_image->pixels == NULL);