--- a/xcb-demo/neko/xcbneko.c +++ b/xcb-demo/neko/xcbneko.c @@ -423,17 +423,23 @@ XCBPIXMAP CreatePixmapFromBitmapData( XC /* must swap and pad the data if bit/byte_order isn't LSB (Mac) */ /* Mac X Server: byte_order=bit_order=MSB, unit=32, padding=32 */ - long bufLen = (w+7)/8*h; + long bpl = (w+7)/8; + long pad = XCBGetSetup(c)->bitmap_format_scanline_pad; + long bpd = ROUNDUP(w, pad)>>3; + long bufLen = bpd * h; BYTE buf[1024]; if (XCBGetSetup(c)->bitmap_format_scanline_unit == 32 && XCBGetSetup(c)->bitmap_format_bit_order == XCBImageOrderMSBFirst && XCBGetSetup(c)->image_byte_order == XCBImageOrderMSBFirst) { - long bpl = (w+7)/8; - long pad = XCBGetSetup(c)->bitmap_format_scanline_pad; - long bpd = ROUNDUP(w, pad)>>3; - SwapBits((unsigned char *)data, (unsigned char *)buf, bpl, bpl, bpd, h); - bufLen = bpd * h; + SwapBits((unsigned char *)data, buf, bpl, bpl, bpd, h); + } + else if (bpl != bpd) + { + int i; + BYTE *src = (BYTE *)data, *dest = buf; + for (i=0; i