Merge pull request #18002 from guilhermefelipecgs/remove_cursor_size_restriction

Remove size restriction for mouse cursor
This commit is contained in:
Rémi Verschelde 2018-04-06 07:45:08 +02:00 committed by GitHub
commit 5d4b9c080a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 15 deletions

View file

@ -1507,9 +1507,7 @@ void OS_OSX::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c
Ref<Texture> texture = p_cursor; Ref<Texture> texture = p_cursor;
Ref<Image> image = texture->get_data(); Ref<Image> image = texture->get_data();
int image_size = 32 * 32; ERR_FAIL_COND(texture->get_width() > 256 || texture->get_height() > 256);
ERR_FAIL_COND(texture->get_width() != 32 || texture->get_height() != 32);
NSBitmapImageRep *imgrep = [[[NSBitmapImageRep alloc] NSBitmapImageRep *imgrep = [[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:NULL initWithBitmapDataPlanes:NULL

View file

@ -1896,26 +1896,25 @@ void OS_Windows::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shap
Ref<Texture> texture = p_cursor; Ref<Texture> texture = p_cursor;
Ref<Image> image = texture->get_data(); Ref<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; 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 // Create the BITMAP with alpha channel
COLORREF *buffer = (COLORREF *)malloc(sizeof(COLORREF) * image_size); COLORREF *buffer = (COLORREF *)malloc(sizeof(COLORREF) * image_size);
image->lock(); image->lock();
for (UINT index = 0; index < image_size; index++) { for (UINT index = 0; index < image_size; index++) {
int column_index = floor(index / 32); int row_index = floor(index / texture->get_width());
int row_index = index % 32; int column_index = index % texture->get_width();
Color pcColor = image->get_pixel(row_index, column_index); *(buffer + index) = image->get_pixel(column_index, row_index).to_argb32();
*(buffer + index) = image->get_pixel(row_index, column_index).to_argb32();
} }
image->unlock(); image->unlock();
// Using 4 channels, so 4 * 8 bits // 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; COLORREF clrTransparent = -1;
// Create the AND and XOR masks for the bitmap // Create the AND and XOR masks for the bitmap

View file

@ -2375,11 +2375,11 @@ void OS_X11::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c
Ref<Texture> texture = p_cursor; Ref<Texture> texture = p_cursor;
Ref<Image> image = texture->get_data(); Ref<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 // Create the cursor structure
XcursorImage *cursor_image = XcursorImageCreate(texture->get_width(), texture->get_height()); 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; XcursorDim size = sizeof(XcursorPixel) * image_size;
cursor_image->version = 1; cursor_image->version = 1;
@ -2393,10 +2393,10 @@ void OS_X11::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c
image->lock(); image->lock();
for (XcursorPixel index = 0; index < image_size; index++) { for (XcursorPixel index = 0; index < image_size; index++) {
int column_index = floor(index / 32); int row_index = floor(index / texture->get_width());
int row_index = index % 32; 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();
} }
image->unlock(); image->unlock();