add support for 8bit TrueColor visuals. Who knew these existed. Fixes vnc's 8bit mode. (bug 2878)

This commit is contained in:
Dana Jansens 2007-03-14 03:05:47 +00:00
parent 2feefc2c24
commit 4e19d8411d
2 changed files with 28 additions and 10 deletions

View file

@ -123,7 +123,7 @@ void RrReduceDepth(const RrInstance *inst, RrPixel32 *data, XImage *im)
gint x,y; gint x,y;
RrPixel32 *p32 = (RrPixel32 *) im->data; RrPixel32 *p32 = (RrPixel32 *) im->data;
RrPixel16 *p16 = (RrPixel16 *) im->data; RrPixel16 *p16 = (RrPixel16 *) im->data;
guchar *p8 = (guchar *)im->data; RrPixel8 *p8 = (RrPixel8 *) im->data;
switch (im->bits_per_pixel) { switch (im->bits_per_pixel) {
case 32: case 32:
if ((RrRedOffset(inst) != RrDefaultRedOffset) || if ((RrRedOffset(inst) != RrDefaultRedOffset) ||
@ -161,16 +161,33 @@ void RrReduceDepth(const RrInstance *inst, RrPixel32 *data, XImage *im)
} }
break; break;
case 8: case 8:
g_assert(RrVisual(inst)->class != TrueColor); if (RrVisual(inst)->class == TrueColor) {
for (y = 0; y < im->height; y++) { for (y = 0; y < im->height; y++) {
for (x = 0; x < im->width; x++) { for (x = 0; x < im->width; x++) {
p8[x] = RrPickColor(inst, r = (data[x] >> RrDefaultRedOffset) & 0xFF;
data[x] >> RrDefaultRedOffset, r = r >> RrRedShift(inst);
data[x] >> RrDefaultGreenOffset, g = (data[x] >> RrDefaultGreenOffset) & 0xFF;
data[x] >> RrDefaultBlueOffset)->pixel; g = g >> RrGreenShift(inst);
b = (data[x] >> RrDefaultBlueOffset) & 0xFF;
b = b >> RrBlueShift(inst);
p8[x] = (r << RrRedOffset(inst))
+ (g << RrGreenOffset(inst))
+ (b << RrBlueOffset(inst));
}
data += im->width;
p8 += im->bytes_per_line;
}
} else {
for (y = 0; y < im->height; y++) {
for (x = 0; x < im->width; x++) {
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: default:

View file

@ -45,6 +45,7 @@ typedef struct _RrColor RrColor;
typedef guint32 RrPixel32; typedef guint32 RrPixel32;
typedef guint16 RrPixel16; typedef guint16 RrPixel16;
typedef guchar RrPixel8;
typedef enum { typedef enum {
RR_RELIEF_FLAT, RR_RELIEF_FLAT,