#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "xf4bpp.h"
#include "scrnintstr.h"
static unsigned short defstaticpalette[16][3] = {
{ 0x0000, 0x0000, 0x0000 },
{ 0xFFFF, 0xFFFF, 0xFFFF },
{ 0xAAAA, 0xAAAA, 0xAAAA },
{ 0x0000, 0x0000, 0xAAAA },
{ 0x0000, 0x0000, 0xFFFF },
{ 0x0000, 0xAAAA, 0xFFFF },
{ 0x0000, 0xFFFF, 0xFFFF },
{ 0x0000, 0xAAAA, 0x0000 },
{ 0x0000, 0xFFFF, 0x0000 },
{ 0xAAAA, 0xFFFF, 0x5555 },
{ 0xAAAA, 0x5555, 0x0000 },
{ 0xFFFF, 0xAAAA, 0x0000 },
{ 0xFFFF, 0xFFFF, 0x0000 },
{ 0xAAAA, 0x0000, 0xAAAA },
{ 0xFFFF, 0x0000, 0xFFFF },
{ 0xFFFF, 0x0000, 0x0000 },
};
Bool
xf4bppInitializeColormap(pmap)
register ColormapPtr pmap;
{
register unsigned i;
register VisualPtr pVisual;
unsigned lim, maxent, shift;
pVisual = pmap->pVisual;
lim = (1 << pVisual->bitsPerRGBValue) - 1;
shift = 16 - pVisual->bitsPerRGBValue;
maxent = pVisual->ColormapEntries - 1;
switch( pVisual->class )
{
case StaticGray:
for ( i = 0 ; i < maxent ; i++ ) {
pmap->red[i].co.local.red =
pmap->red[i].co.local.green =
pmap->red[i].co.local.blue =
((((i * 65535) / maxent) >> shift) * 65535) / lim;
}
break;
case StaticColor:
for ( i = 0 ; i < 16 ; i++ ) {
pmap->red[i].co.local.red = (defstaticpalette[i][0]);
pmap->red[i].co.local.green = (defstaticpalette[i][1]);
pmap->red[i].co.local.blue = (defstaticpalette[i][2]);
}
break;
case GrayScale:
case PseudoColor:
for(i=0;i<=maxent;i++) {
int a,b,c;
a = i << 10;
b = i << 12;
c = i << 14;
pmap->red[i].co.local.red = a;
pmap->red[i].co.local.green = b;
pmap->red[i].co.local.blue = c;
}
break;
case TrueColor:
case DirectColor:
default:
ErrorF( "Unsupported Visual class %d\b", pVisual->class );
return FALSE;
}
return TRUE;
}
void
xf4bppResolveColor( pred, pgreen, pblue, pVisual )
register unsigned short* pred ;
register unsigned short* pgreen ;
register unsigned short* pblue ;
register VisualPtr pVisual ;
{
unsigned lim, maxent, shift;
lim = (1 << pVisual->bitsPerRGBValue) - 1;
shift = 16 - pVisual->bitsPerRGBValue;
maxent = pVisual->ColormapEntries - 1;
switch( pVisual->class )
{
case StaticGray:
*pred = (30L * *pred + 59L * *pgreen + 11L * *pblue) / 100;
*pred = (((*pred * (maxent + 1)) >> 16) * 65535) / maxent;
*pblue = *pgreen = *pred = ((*pred >> shift) * 65535) / lim;
break;
case StaticColor:
break;
case GrayScale:
*pred = (30L * *pred + 59L * *pgreen + 11L * *pblue) / 100;
*pblue = *pgreen = *pred = ((*pred >> shift) * 65535) / lim;
break;
case PseudoColor:
*pred = ((*pred >> shift) * 65535) / lim;
*pgreen = ((*pgreen >> shift) * 65535) / lim;
*pblue = ((*pblue >> shift) * 65535) / lim;
break;
case TrueColor:
case DirectColor:
default:
ErrorF( "Unsupported Visual class %d\b", pVisual->class );
}
}