--- vnc-3.3.3r2.orig/Xvnc/programs/Xserver/cfb/cfbcmap.c +++ vnc-3.3.3r2/Xvnc/programs/Xserver/cfb/cfbcmap.c @@ -343,16 +343,16 @@ extern int defaultColorVisualClass; -#define _RZ(d) ((d + 2) / 3) -#define _RS(d) 0 -#define _RM(d) ((1 << _RZ(d)) - 1) -#define _GZ(d) ((d - _RZ(d) + 1) / 2) -#define _GS(d) _RZ(d) +#define _BZ(d) (d / 3) +#define _BS(d) 0 +#define _BM(d) ((1 << _BZ(d)) - 1) +#define _GZ(d) ((d - _BZ(d) + 1) / 2) +#define _GS(d) _BZ(d) #define _GM(d) (((1 << _GZ(d)) - 1) << _GS(d)) -#define _BZ(d) (d - _RZ(d) - _GZ(d)) -#define _BS(d) (_RZ(d) + _GZ(d)) -#define _BM(d) (((1 << _BZ(d)) - 1) << _BS(d)) -#define _CE(d) (1 << _RZ(d)) +#define _RZ(d) (d - _BZ(d) - _GZ(d)) +#define _RS(d) (_BZ(d) + _GZ(d)) +#define _RM(d) (((1 << _RZ(d)) - 1) << _RS(d)) +#define _CE(d) (1 << _GZ(d)) #define MAX_PSEUDO_DEPTH 10 /* largest DAC size I know */ @@ -524,12 +524,21 @@ visual->ColormapEntries = _CE(d); /* fall through */ case StaticColor: - visual->redMask = _RM(d); - visual->greenMask = _GM(d); - visual->blueMask = _BM(d); - visual->offsetRed = _RS(d); - visual->offsetGreen = _GS(d); - visual->offsetBlue = _BS(d); + if (d == 8) { + visual->redMask = 0x07; + visual->greenMask = 0x38; + visual->blueMask = 0xC0; + visual->offsetRed = 0; + visual->offsetGreen = 3; + visual->offsetBlue = 6; + } else { + visual->redMask = _RM(d); + visual->greenMask = _GM(d); + visual->blueMask = _BM(d); + visual->offsetRed = _RS(d); + visual->offsetGreen = _GS(d); + visual->offsetBlue = _BS(d); + } } vid++; visual++;