all repos — openbox @ f1ed62cead95b1370e4282c2bf3303aa2d75803a

openbox fork - make it a bit more like ryudo

fix 1bit bitmaps on msbfirst architectures + some indentation fixes
Mikael Magnusson mikachu@comhem.se
commit

f1ed62cead95b1370e4282c2bf3303aa2d75803a

parent

bc1f845ada8b07dc246373706da676979a9973d2

2 files changed, 23 insertions(+), 9 deletions(-)

jump to
M render/color.crender/color.c

@@ -154,7 +154,7 @@ }

data += im->width; p16 += im->bytes_per_line/2; } - break; + break; case 8: g_assert(RrVisual(inst)->class != TrueColor); for (y = 0; y < im->height; y++) {

@@ -163,12 +163,11 @@ p8[x] = RrPickColor(inst,

data[x] >> RrDefaultRedOffset, data[x] >> RrDefaultGreenOffset, data[x] >> RrDefaultBlueOffset)->pixel; + } + data += im->width; + p8 += im->bytes_per_line; } - data += im->width; - p8 += im->bytes_per_line; - } - - break; + break; default: g_warning("your bit depth is currently unhandled\n"); }

@@ -204,9 +203,10 @@ t = c[0];

c[0] = c[1]; c[1] = t; case 8: + case 1: break; default: - g_warning("your bit depth is currently unhandled"); + g_warning("Your bit depth is currently unhandled"); } } di += im->bytes_per_line;
M render/render.crender/render.c

@@ -352,6 +352,14 @@ if (*w < 1) *w = 1;

if (*h < 1) *h = 1; } +void reverse_bits(gchar *c, gint n) +{ + gint i; + for (i = 0; i < n; i++) + *c++ = (((*c * 0x0802UL & 0x22110UL) | + (*c * 0x8020UL & 0x88440UL)) * 0x10101UL) >> 16; +} + gboolean RrPixmapToRGBA(const RrInstance *inst, Pixmap pmap, Pixmap mask, gint *w, gint *h, RrPixel32 **data)

@@ -361,9 +369,10 @@ gint xx, xy;

guint pw, ph, mw, mh, xb, xd, i, x, y, di; XImage *xi, *xm = NULL; - if (!XGetGeometry(RrDisplay(inst), - pmap, &xr, &xx, &xy, &pw, &ph, &xb, &xd)) + if (!XGetGeometry(RrDisplay(inst), pmap, + &xr, &xx, &xy, &pw, &ph, &xb, &xd)) return FALSE; + if (mask) { if (!XGetGeometry(RrDisplay(inst), mask, &xr, &xx, &xy, &mw, &mh, &xb, &xd))

@@ -384,7 +393,12 @@ if (!xm) {

XDestroyImage(xi); return FALSE; } + if ((xm->bits_per_pixel == 1) && (xm->bitmap_bit_order != LSBFirst)) + reverse_bits(xm->data, xm->bytes_per_line * xm->height); } + + if ((xi->bits_per_pixel == 1) && (xi->bitmap_bit_order != LSBFirst)) + reverse_bits(xi->data, xi->bytes_per_line * xi->height); *data = g_new(RrPixel32, pw * ph); RrIncreaseDepth(inst, *data, xi);