fix 1bit bitmaps on msbfirst architectures + some indentation fixes
This commit is contained in:
parent
bc1f845ada
commit
f1ed62cead
2 changed files with 23 additions and 9 deletions
|
@ -154,7 +154,7 @@ void RrReduceDepth(const RrInstance *inst, RrPixel32 *data, XImage *im)
|
||||||
data += im->width;
|
data += im->width;
|
||||||
p16 += im->bytes_per_line/2;
|
p16 += im->bytes_per_line/2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
g_assert(RrVisual(inst)->class != TrueColor);
|
g_assert(RrVisual(inst)->class != TrueColor);
|
||||||
for (y = 0; y < im->height; y++) {
|
for (y = 0; y < im->height; y++) {
|
||||||
|
@ -163,12 +163,11 @@ void RrReduceDepth(const RrInstance *inst, RrPixel32 *data, XImage *im)
|
||||||
data[x] >> RrDefaultRedOffset,
|
data[x] >> RrDefaultRedOffset,
|
||||||
data[x] >> RrDefaultGreenOffset,
|
data[x] >> RrDefaultGreenOffset,
|
||||||
data[x] >> RrDefaultBlueOffset)->pixel;
|
data[x] >> RrDefaultBlueOffset)->pixel;
|
||||||
|
}
|
||||||
|
data += im->width;
|
||||||
|
p8 += im->bytes_per_line;
|
||||||
}
|
}
|
||||||
data += im->width;
|
break;
|
||||||
p8 += im->bytes_per_line;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
g_warning("your bit depth is currently unhandled\n");
|
g_warning("your bit depth is currently unhandled\n");
|
||||||
}
|
}
|
||||||
|
@ -204,9 +203,10 @@ static void swap_byte_order(XImage *im)
|
||||||
c[0] = c[1];
|
c[0] = c[1];
|
||||||
c[1] = t;
|
c[1] = t;
|
||||||
case 8:
|
case 8:
|
||||||
|
case 1:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_warning("your bit depth is currently unhandled");
|
g_warning("Your bit depth is currently unhandled");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
di += im->bytes_per_line;
|
di += im->bytes_per_line;
|
||||||
|
|
|
@ -352,6 +352,14 @@ void RrMinsize(RrAppearance *a, gint *w, gint *h)
|
||||||
if (*h < 1) *h = 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,
|
gboolean RrPixmapToRGBA(const RrInstance *inst,
|
||||||
Pixmap pmap, Pixmap mask,
|
Pixmap pmap, Pixmap mask,
|
||||||
gint *w, gint *h, RrPixel32 **data)
|
gint *w, gint *h, RrPixel32 **data)
|
||||||
|
@ -361,9 +369,10 @@ gboolean RrPixmapToRGBA(const RrInstance *inst,
|
||||||
guint pw, ph, mw, mh, xb, xd, i, x, y, di;
|
guint pw, ph, mw, mh, xb, xd, i, x, y, di;
|
||||||
XImage *xi, *xm = NULL;
|
XImage *xi, *xm = NULL;
|
||||||
|
|
||||||
if (!XGetGeometry(RrDisplay(inst),
|
if (!XGetGeometry(RrDisplay(inst), pmap,
|
||||||
pmap, &xr, &xx, &xy, &pw, &ph, &xb, &xd))
|
&xr, &xx, &xy, &pw, &ph, &xb, &xd))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (mask) {
|
if (mask) {
|
||||||
if (!XGetGeometry(RrDisplay(inst), mask,
|
if (!XGetGeometry(RrDisplay(inst), mask,
|
||||||
&xr, &xx, &xy, &mw, &mh, &xb, &xd))
|
&xr, &xx, &xy, &mw, &mh, &xb, &xd))
|
||||||
|
@ -384,8 +393,13 @@ gboolean RrPixmapToRGBA(const RrInstance *inst,
|
||||||
XDestroyImage(xi);
|
XDestroyImage(xi);
|
||||||
return FALSE;
|
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);
|
*data = g_new(RrPixel32, pw * ph);
|
||||||
RrIncreaseDepth(inst, *data, xi);
|
RrIncreaseDepth(inst, *data, xi);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue