Upstream-Status: Accepted Index: libmb/mbpixbuf.c =================================================================== --- libmatchbox/libmb.orig/mbpixbuf.c 2006-02-01 12:45:55.000000000 +0000 +++ libmatchbox/libmb/mbpixbuf.c 2006-03-11 15:20:47.000000000 +0000 @@ -716,7 +716,13 @@ case 15: return ((r & 0xf8) << 7) | ((g & 0xf8) << 2) | ((b & 0xf8) >> 3); case 16: - return ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3); + switch (pb->byte_order) + { + case BYTE_ORD_24_RGB: + return ((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3); + case BYTE_ORD_24_BGR: + return ((b & 0xf8) << 8) | ((g & 0xfc) << 3) | ((r & 0xf8) >> 3); + } case 24: case 32: switch (pb->byte_order) @@ -1880,12 +1886,11 @@ for(y=0; yheight; y++) for(x=0; xwidth; x++) { - /* Below is potentially dangerous. - */ - pixel = ( *p | (*(p+1) << 8)); + internal_16bpp_pixel_to_rgb(p, r, g, b); + internal_16bpp_pixel_next(p); + a = ((img->has_alpha) ? *p++ : 0xff); - p += ((img->has_alpha) ? 3 : 2); - + pixel = mb_pixbuf_get_pixel(pb, r, g, b, a); XPutPixel(img->ximg, x, y, pixel); } }