Fix wxBitmap ctor from XBM in wxGTK
Width and height were exchanged in the loops, so the conversion code didn't work correctly and overflowed the pixel buffer (due to extra padding in the row stride) for non-square bitmaps. It also resulted in a completely wrong bitmap appearance, but somehow this managed to go unnoticed, unlike the memory errors. Closes #17633.
This commit is contained in:
@@ -108,6 +108,7 @@ wxGTK:
|
|||||||
- Implement support for icon locations in wxMimeTypesManager (Hanmac).
|
- Implement support for icon locations in wxMimeTypesManager (Hanmac).
|
||||||
- Cosmetic fix for empty wxCheckBoxes display (Chuddah).
|
- Cosmetic fix for empty wxCheckBoxes display (Chuddah).
|
||||||
- Fix crashes in wxFileSystemWatcher implementation (David Hart).
|
- Fix crashes in wxFileSystemWatcher implementation (David Hart).
|
||||||
|
- Fix wxBitmap ctor from XBM for non-square bitmaps.
|
||||||
|
|
||||||
wxMSW:
|
wxMSW:
|
||||||
|
|
||||||
|
@@ -431,17 +431,18 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
|
|||||||
const char* src = bits;
|
const char* src = bits;
|
||||||
guchar* dst = gdk_pixbuf_get_pixels(pixbuf);
|
guchar* dst = gdk_pixbuf_get_pixels(pixbuf);
|
||||||
const int stride_src = (width + 7) / 8;
|
const int stride_src = (width + 7) / 8;
|
||||||
const int rowinc_dst = gdk_pixbuf_get_rowstride(pixbuf) - 3 * width;
|
const int stride_dst = gdk_pixbuf_get_rowstride(pixbuf);
|
||||||
for (int j = 0; j < width; j++, src += stride_src, dst += rowinc_dst)
|
for (int j = 0; j < height; j++, src += stride_src, dst += stride_dst)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < height; i++)
|
guchar* d = dst;
|
||||||
|
for (int i = 0; i < width; i++)
|
||||||
{
|
{
|
||||||
guchar c = 0xff;
|
guchar c = 0xff;
|
||||||
if (src[i >> 3] & (1 << (i & 7)))
|
if (src[i >> 3] & (1 << (i & 7)))
|
||||||
c = 0;
|
c = 0;
|
||||||
*dst++ = c;
|
*d++ = c;
|
||||||
*dst++ = c;
|
*d++ = c;
|
||||||
*dst++ = c;
|
*d++ = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user