Fixed Windows cursor color conversion to be endian safe

This commit is contained in:
Lukas Dürrenberger 2018-10-01 19:49:28 +02:00
parent 8554d210df
commit 3aa156c278

View File

@ -69,7 +69,7 @@ bool CursorImpl::loadFromPixels(const Uint8* pixels, Vector2u size, Vector2u hot
bitmapHeader.bV5BlueMask = 0x000000ff; bitmapHeader.bV5BlueMask = 0x000000ff;
bitmapHeader.bV5AlphaMask = 0xff000000; bitmapHeader.bV5AlphaMask = 0xff000000;
Uint8* bitmapData = NULL; Uint32* bitmapData = NULL;
HDC screenDC = GetDC(NULL); HDC screenDC = GetDC(NULL);
HBITMAP color = CreateDIBSection( HBITMAP color = CreateDIBSection(
@ -90,13 +90,10 @@ bool CursorImpl::loadFromPixels(const Uint8* pixels, Vector2u size, Vector2u hot
// Fill our bitmap with the cursor color data // Fill our bitmap with the cursor color data
// We'll have to swap the red and blue channels here // We'll have to swap the red and blue channels here
Uint8* bitmapOffset = bitmapData; Uint32* bitmapOffset = bitmapData;
for (std::size_t remaining = size.x * size.y; remaining; --remaining, pixels += 4) for (std::size_t remaining = size.x * size.y; remaining > 0; --remaining, pixels += 4)
{ {
*bitmapOffset++ = pixels[2]; // Blue *bitmapOffset++ = (pixels[3] << 24) | (pixels[0] << 16) | (pixels[1] << 8) | pixels[2];
*bitmapOffset++ = pixels[1]; // Green
*bitmapOffset++ = pixels[0]; // Red
*bitmapOffset++ = pixels[3]; // Alpha
} }
// Create a dummy mask bitmap (it won't be used) // Create a dummy mask bitmap (it won't be used)