#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "xf4bpp.h"
#include "ppcGCstr.h"
static void
ppcReduceGeneral
(
register int alu,
register unsigned long pm,
register unsigned long fg,
register unsigned long bg,
register int fillStyle,
int drawableDepth,
ppcReducedRrop *returnLoc
)
{
if ( ( alu == GXnoop )
|| !( pm &= ( ( 1 << drawableDepth ) - 1 ) ) ) {
returnLoc->alu = GXnoop ;
return ;
}
#ifdef DELETE_THIS
switch ( fillStyle ) {
case FillTiled:
switch ( alu ) {
case GXclear:
case GXinvert:
case GXset:
fillStyle = FillSolid ;
default:
break ;
}
break ;
case FillOpaqueStippled:
if ( ( fg & pm ) != ( bg & pm ) ) {
switch ( alu ) {
case GXclear:
case GXset:
case GXinvert:
fillStyle = FillSolid ;
break ;
case GXnor:
case GXnand:
case GXcopy:
break ;
case GXandReverse:
fg = ~fg ;
bg = ~bg ;
alu = GXnor ;
break ;
case GXandInverted:
fg = ~fg ;
bg = ~bg ;
alu = GXand ;
case GXand:
pm &= ~( fg & bg ) ;
if ( ( bg & pm ) == pm ) {
fillStyle = FillStippled ;
alu = GXclear ;
}
break ;
case GXequiv:
fg = ~fg ;
bg = ~bg ;
alu = GXxor ;
case GXxor:
pm &= ( fg | bg ) ;
if ( !( bg & pm ) ) {
fillStyle = FillStippled ;
alu = GXinvert ;
}
break ;
case GXorReverse:
fg = ~fg ;
bg = ~bg ;
alu = GXnand ;
break ;
case GXcopyInverted:
fg = ~fg ;
bg = ~bg ;
alu = GXcopy ;
break ;
case GXorInverted:
fg = ~fg ;
bg = ~bg ;
alu = GXor ;
case GXor:
pm &= ( fg | bg ) ;
if ( !( bg & pm ) ) {
fillStyle = FillStippled ;
alu = GXset ;
}
break ;
default:
ErrorF(
"xf4bppGetReducedColorRrop: Unknown Alu Raster-Op" ) ;
break ;
}
break ;
}
else
fillStyle = FillSolid ;
case FillStippled:
case FillSolid:
switch ( alu ) {
case GXclear:
case GXset:
case GXinvert:
break ;
case GXand:
pm &= ~fg ;
alu = GXclear ;
break ;
case GXandReverse:
fg = ~fg ;
alu = GXnor ;
case GXnor:
if ( !( fg & pm ) )
alu = GXclear ;
else if ( ( fg & pm ) == pm )
alu = GXinvert ;
break ;
case GXandInverted:
pm &= fg ;
alu = GXclear ;
break ;
case GXxor:
pm &= fg ;
alu = GXinvert ;
break ;
case GXor:
pm &= fg ;
alu = GXset ;
break ;
case GXequiv:
pm &= ~fg ;
alu = GXinvert ;
break ;
case GXorReverse:
fg = ~fg ;
alu = GXnand ;
case GXnand:
if ( !( fg & pm ) )
alu = GXset ;
else if ( ( fg & pm ) == pm )
alu = GXinvert ;
break ;
case GXcopyInverted:
fg = ~fg ;
alu = GXcopy ;
case GXcopy:
if ( !( fg & pm ) )
alu = GXclear ;
else if ( ( fg & pm ) == pm )
alu = GXset ;
break ;
case GXorInverted:
pm &= ~fg ;
alu = GXset ;
break ;
default:
ErrorF(
"xf4bppGetReducedColorRrop: Unknown Alu Raster-Op" ) ;
break ;
}
break;
default:
ErrorF("xf4bppGetReducedColorRrop: Bad Fillstyle\n");
break;
}
#endif
if ( !pm )
alu = GXnoop ;
returnLoc->planemask = pm ;
returnLoc->fgPixel = fg ;
returnLoc->bgPixel = bg ;
returnLoc->alu = alu ;
returnLoc->fillStyle = fillStyle ;
return ;
}
void
xf4bppGetReducedColorRrop( pGC, drawableDepth, returnLoc )
GC *pGC ;
int drawableDepth ;
ppcReducedRrop *returnLoc ;
{
ppcReduceGeneral( pGC->alu,
pGC->planemask,
pGC->fgPixel,
pGC->bgPixel,
pGC->fillStyle,
drawableDepth,
returnLoc ) ;
return ;
}