add support for 8bit TrueColor visuals. Who knew these existed. Fixes vnc's 8bit mode. (bug 2878)
This commit is contained in:
parent
2feefc2c24
commit
4e19d8411d
2 changed files with 28 additions and 10 deletions
|
@ -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:
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue