Fix for http://freedesktop.org/bugzilla/show_bug.cgi?id=1299 - Add more
visuals to the Postscript DDX (8bit GrayScale/StaticGray, 1bit
    StaticGray and the basic infratructure for "deep" visuals with more
    than 8bits per RGB gun).
			
			
This commit is contained in:
		
							parent
							
								
									e622b34611
								
							
						
					
					
						commit
						658b4ed81f
					
				| 
						 | 
					@ -163,6 +163,7 @@ static
 | 
				
			||||||
PixmapFormatRec	PSPixmapFormats[] = {
 | 
					PixmapFormatRec	PSPixmapFormats[] = {
 | 
				
			||||||
    {  1,  1, BITMAP_SCANLINE_PAD },
 | 
					    {  1,  1, BITMAP_SCANLINE_PAD },
 | 
				
			||||||
    {  8,  8, BITMAP_SCANLINE_PAD },
 | 
					    {  8,  8, BITMAP_SCANLINE_PAD },
 | 
				
			||||||
 | 
					    { 12, 16, BITMAP_SCANLINE_PAD },
 | 
				
			||||||
    { 24, 32, BITMAP_SCANLINE_PAD }
 | 
					    { 24, 32, BITMAP_SCANLINE_PAD }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -556,7 +556,7 @@ extern int  PsListInstalledColormaps(ScreenPtr pScreen, XID *pCmapList);
 | 
				
			||||||
extern void PsStoreColors(ColormapPtr pColor, int ndef, xColorItem *pdefs);
 | 
					extern void PsStoreColors(ColormapPtr pColor, int ndef, xColorItem *pdefs);
 | 
				
			||||||
extern void PsResolveColor(unsigned short *pRed, unsigned short *pGreen,
 | 
					extern void PsResolveColor(unsigned short *pRed, unsigned short *pGreen,
 | 
				
			||||||
                           unsigned short *pBlue, VisualPtr pVisual);
 | 
					                           unsigned short *pBlue, VisualPtr pVisual);
 | 
				
			||||||
extern int  PsGetPixelColor(ColormapPtr cMap, int pixval);
 | 
					extern PsOutColor PsGetPixelColor(ColormapPtr cMap, int pixval);
 | 
				
			||||||
extern void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut,
 | 
					extern void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut,
 | 
				
			||||||
                           ColormapPtr cMap);
 | 
					                           ColormapPtr cMap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -131,6 +131,13 @@ PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
 | 
				
			||||||
    PsOut_Offset(psOut, pDrawable->x, pDrawable->y);
 | 
					    PsOut_Offset(psOut, pDrawable->x, pDrawable->y);
 | 
				
			||||||
    pt = (char *)(&i); i = 1; if( pt[0]=='\001' ) swap = 1; else swap = 0;
 | 
					    pt = (char *)(&i); i = 1; if( pt[0]=='\001' ) swap = 1; else swap = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					    if( depth==30 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      ErrorF("PsPutScaledImage: Not implemented yet for 30bit\m");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
    if( depth==24 )
 | 
					    if( depth==24 )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      PsOut_BeginImage(psOut, 0, 0, x, y, w, h, sw, sh, 3);
 | 
					      PsOut_BeginImage(psOut, 0, 0, x, y, w, h, sw, sh, 3);
 | 
				
			||||||
| 
						 | 
					@ -174,6 +181,34 @@ PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
 | 
				
			||||||
      else goto error;
 | 
					      else goto error;
 | 
				
			||||||
      PsOut_EndImage(psOut);
 | 
					      PsOut_EndImage(psOut);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					    else if( (depth > 8) && (depth < 16) )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      int  rowsiz = PixmapBytePad(w, depth);
 | 
				
			||||||
 | 
					      PsOut_BeginImage(psOut, 0, 0, x, y, w, h, sw, sh, 3);
 | 
				
			||||||
 | 
					      for( r=0 ; r<h ; r++ )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        short *pt = (short *)&pImage[rowsiz*r];
 | 
				
			||||||
 | 
					        for( c=0 ; c<w ; c++,pt++ )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFFFF);
 | 
				
			||||||
 | 
					          /* XXX: This needs to be fixed for endian swapping and to support
 | 
				
			||||||
 | 
					           * depths deeper than 8bit per R-,G-,B-gun... */
 | 
				
			||||||
 | 
					          int        val = PSOUTCOLOR_TO_RGB24BIT(clr);
 | 
				
			||||||
 | 
					          char      *ipt = (char *)&val;
 | 
				
			||||||
 | 
					          if( swap )
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            char tmp[4];
 | 
				
			||||||
 | 
					            tmp[0] = ipt[3]; tmp[1] = ipt[2]; tmp[2] = ipt[1]; tmp[3] = ipt[0];
 | 
				
			||||||
 | 
					            PsOut_OutImageBytes(psOut, 3, &tmp[1]);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          else
 | 
				
			||||||
 | 
					            PsOut_OutImageBytes(psOut, 3, &ipt[1]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      PsOut_EndImage(psOut);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
    else if( depth==8 )
 | 
					    else if( depth==8 )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      int  rowsiz = PixmapBytePad(w, depth);
 | 
					      int  rowsiz = PixmapBytePad(w, depth);
 | 
				
			||||||
| 
						 | 
					@ -183,8 +218,9 @@ PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
 | 
				
			||||||
        char *pt = &pImage[rowsiz*r];
 | 
					        char *pt = &pImage[rowsiz*r];
 | 
				
			||||||
        for( c=0 ; c<w ; c++,pt++ )
 | 
					        for( c=0 ; c<w ; c++,pt++ )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          int   val = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
 | 
					          PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
 | 
				
			||||||
          char *ipt = (char *)&val;
 | 
					          int        val = PSOUTCOLOR_TO_RGB24BIT(clr);
 | 
				
			||||||
 | 
					          char      *ipt = (char *)&val;
 | 
				
			||||||
          if( swap )
 | 
					          if( swap )
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            char tmp[4];
 | 
					            char tmp[4];
 | 
				
			||||||
| 
						 | 
					@ -296,6 +332,14 @@ PsPutScaledImageIM(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      PsOut_BeginImageCache(psOut, cache_id);
 | 
					      PsOut_BeginImageCache(psOut, cache_id);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					      if( depth==30 )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        ErrorF("PsPutScaledImageIM: Not implemented yet for 30bit\m");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
      if( depth==24 )
 | 
					      if( depth==24 )
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        PsOut_BeginImageIM(psOut, 0, 0, x, y, w, h, sw, sh, 3);
 | 
					        PsOut_BeginImageIM(psOut, 0, 0, x, y, w, h, sw, sh, 3);
 | 
				
			||||||
| 
						 | 
					@ -339,6 +383,32 @@ PsPutScaledImageIM(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
 | 
				
			||||||
        else goto error;
 | 
					        else goto error;
 | 
				
			||||||
        PsOut_EndImage(psOut);
 | 
					        PsOut_EndImage(psOut);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					      else if( (depth > 8) && (depth < 16) )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        int  rowsiz = PixmapBytePad(w, depth);
 | 
				
			||||||
 | 
					        PsOut_BeginImageIM(psOut, 0, 0, x, y, w, h, sw, sh, 3);
 | 
				
			||||||
 | 
					        for( r=0 ; r<h ; r++ )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          short *pt = (short *)&pImage[rowsiz*r];
 | 
				
			||||||
 | 
					          for( c=0 ; c<w ; c++,pt++ )
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFFFF);
 | 
				
			||||||
 | 
					            int        val = PSOUTCOLOR_TO_RGB24BIT(clr);
 | 
				
			||||||
 | 
					            char      *ipt = (char *)&val;
 | 
				
			||||||
 | 
					            if( swap )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              char tmp[4];
 | 
				
			||||||
 | 
					              tmp[0] = ipt[3]; tmp[1] = ipt[2]; tmp[2] = ipt[1]; tmp[3] = ipt[0];
 | 
				
			||||||
 | 
					              PsOut_OutImageBytes(psOut, 3, &tmp[1]);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					              PsOut_OutImageBytes(psOut, 3, &ipt[1]);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        PsOut_EndImage(psOut);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
      else if( depth==8 )
 | 
					      else if( depth==8 )
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        int  rowsiz = PixmapBytePad(w, depth);
 | 
					        int  rowsiz = PixmapBytePad(w, depth);
 | 
				
			||||||
| 
						 | 
					@ -348,8 +418,11 @@ PsPutScaledImageIM(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
 | 
				
			||||||
          char *pt = &pImage[rowsiz*r];
 | 
					          char *pt = &pImage[rowsiz*r];
 | 
				
			||||||
          for( c=0 ; c<w ; c++,pt++ )
 | 
					          for( c=0 ; c<w ; c++,pt++ )
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            int   val = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
 | 
					            PsOutColor clr = PsGetPixelColor(cMap, (int)(*pt)&0xFF);
 | 
				
			||||||
            char *ipt = (char *)&val;
 | 
					            /* XXX: This needs to be fixed for endian swapping and to support
 | 
				
			||||||
 | 
					             * depths deeper than 8bit per R-,G-,B-gun... */
 | 
				
			||||||
 | 
					            int        val = PSOUTCOLOR_TO_RGB24BIT(clr);
 | 
				
			||||||
 | 
					            char      *ipt = (char *)&val;
 | 
				
			||||||
            if( swap )
 | 
					            if( swap )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              char tmp[4];
 | 
					              char tmp[4];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,6 +75,8 @@ in this Software without prior written authorization from The Open Group.
 | 
				
			||||||
********************************************************************/
 | 
					********************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "Ps.h"
 | 
					#include "Ps.h"
 | 
				
			||||||
 | 
					#include "mi.h"
 | 
				
			||||||
 | 
					#include "micmap.h"
 | 
				
			||||||
#include "gcstruct.h"
 | 
					#include "gcstruct.h"
 | 
				
			||||||
#include "windowstr.h"
 | 
					#include "windowstr.h"
 | 
				
			||||||
#include "colormapst.h"
 | 
					#include "colormapst.h"
 | 
				
			||||||
| 
						 | 
					@ -82,49 +84,25 @@ in this Software without prior written authorization from The Open Group.
 | 
				
			||||||
Bool
 | 
					Bool
 | 
				
			||||||
PsCreateColormap(ColormapPtr pColor)
 | 
					PsCreateColormap(ColormapPtr pColor)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int            i;
 | 
					  miInitializeColormap(pColor);
 | 
				
			||||||
  unsigned short rgb;
 | 
					 | 
				
			||||||
  VisualPtr      pVisual = pColor->pVisual;
 | 
					 | 
				
			||||||
  Pixel          pix;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if( pVisual->class==TrueColor )
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    for( i=0 ; i<pVisual->ColormapEntries ; i++ )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      rgb = (i<<8)|i;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      pColor->red[i].fShared = FALSE;
 | 
					 | 
				
			||||||
      pColor->red[i].co.local.red     = rgb;
 | 
					 | 
				
			||||||
      pColor->red[i].co.local.green   = 0;
 | 
					 | 
				
			||||||
      pColor->red[i].co.local.blue    = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      pColor->green[i].fShared = FALSE;
 | 
					 | 
				
			||||||
      pColor->green[i].co.local.red   = 0;
 | 
					 | 
				
			||||||
      pColor->green[i].co.local.green = rgb;
 | 
					 | 
				
			||||||
      pColor->green[i].co.local.blue  = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      pColor->blue[i].fShared = FALSE;
 | 
					 | 
				
			||||||
      pColor->blue[i].co.local.red    = 0;
 | 
					 | 
				
			||||||
      pColor->blue[i].co.local.green  = 0;
 | 
					 | 
				
			||||||
      pColor->blue[i].co.local.blue   = rgb;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return TRUE;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsDestroyColormap(ColormapPtr pColor)
 | 
					PsDestroyColormap(ColormapPtr pColor)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  /* NO-OP */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsInstallColormap(ColormapPtr pColor)
 | 
					PsInstallColormap(ColormapPtr pColor)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  miInstallColormap(pColor);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsUninstallColormap(ColormapPtr pColor)
 | 
					PsUninstallColormap(ColormapPtr pColor)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  miUninstallColormap(pColor);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
| 
						 | 
					@ -132,7 +110,7 @@ PsListInstalledColormaps(
 | 
				
			||||||
  ScreenPtr pScreen,
 | 
					  ScreenPtr pScreen,
 | 
				
			||||||
  XID      *pCmapList)
 | 
					  XID      *pCmapList)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  return 0;
 | 
					  return miListInstalledColormaps(pScreen, pCmapList);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -160,18 +138,71 @@ PsResolveColor(
 | 
				
			||||||
  unsigned short *pBlue,
 | 
					  unsigned short *pBlue,
 | 
				
			||||||
  VisualPtr       pVisual)
 | 
					  VisualPtr       pVisual)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  miResolveColor(pRed, pGreen, pBlue, pVisual);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					PsOutColor
 | 
				
			||||||
PsGetPixelColor(ColormapPtr cMap, int pixval)
 | 
					PsGetPixelColor(ColormapPtr cMap, int pixval)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int r, g, b;
 | 
					  VisualPtr v = cMap->pVisual;
 | 
				
			||||||
  if( cMap->pVisual->class==TrueColor ) return(pixval);
 | 
					  switch( v->class )
 | 
				
			||||||
  if( pixval<0 || pixval>255 ) return(0);
 | 
					  {
 | 
				
			||||||
  r = cMap->red[pixval].co.local.red>>8;
 | 
					    case TrueColor:
 | 
				
			||||||
  g = cMap->red[pixval].co.local.green>>8;
 | 
					    {
 | 
				
			||||||
  b = cMap->red[pixval].co.local.blue>>8;
 | 
					        PsOutColor p = pixval;       
 | 
				
			||||||
  return((r<<16)|(g<<8)|b);
 | 
					        PsOutColor r, g, b;
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					        int shift = 16 - v->bitsPerRGBValue;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        int shift =  8 - v->bitsPerRGBValue;
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        r = ((p & v->redMask)   >> v->offsetRed)   << shift;
 | 
				
			||||||
 | 
					        g = ((p & v->greenMask) >> v->offsetGreen) << shift;
 | 
				
			||||||
 | 
					        b = ((p & v->blueMask)  >> v->offsetBlue)  << shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					        return((r<<32)|(g<<16)|b);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        return((r<<16)|(g<<8)|b);
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    case PseudoColor:
 | 
				
			||||||
 | 
					    case GrayScale:
 | 
				
			||||||
 | 
					    case StaticGray:
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        PsOutColor r, g, b;
 | 
				
			||||||
 | 
					                  
 | 
				
			||||||
 | 
					        if( pixval < 0 || pixval > v->ColormapEntries)
 | 
				
			||||||
 | 
					          return(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        r = cMap->red[pixval].co.local.red;
 | 
				
			||||||
 | 
					        g = cMap->red[pixval].co.local.green;
 | 
				
			||||||
 | 
					        b = cMap->red[pixval].co.local.blue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ((v->class | DynamicClass) == GrayScale)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          /* rescale to gray (see |miResolveColor()|) */
 | 
				
			||||||
 | 
					          r = g = b = (30L*r + 59L*g + 11L*b) / 100L;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					        return((r<<32)|(g<<16)|b);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        r >>= 8;
 | 
				
			||||||
 | 
					        g >>= 8;
 | 
				
			||||||
 | 
					        b >>= 8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return((r<<16)|(g<<8)|b);
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    default:
 | 
				
			||||||
 | 
					        FatalError("PsGetPixelColor: Unsupported visual %x\n",
 | 
				
			||||||
 | 
					                   (int)cMap->pVisual->class);
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  return 0; /* NO-OP*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -119,8 +119,18 @@ InitializePsDriver(ndx, pScreen, argc, argv)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
  char            **printerNames;
 | 
					  char            **printerNames;
 | 
				
			||||||
  int               numPrinters;
 | 
					  int               numPrinters;
 | 
				
			||||||
  int               nVisuals;
 | 
					  int               nv,       /* total number of visuals */
 | 
				
			||||||
  int               nDepths;
 | 
					                    nv_1bit,  /* number of 8bit visuals */
 | 
				
			||||||
 | 
					                    nv_8bit,  /* number of 8bit visuals */
 | 
				
			||||||
 | 
					                    nv_12bit, /* number of 12bit visuals */
 | 
				
			||||||
 | 
					                    nv_24bit, /* number of 24bit visuals*/
 | 
				
			||||||
 | 
					                    nv_30bit; /* number of 30bit visuals*/
 | 
				
			||||||
 | 
					  int               nd;       /* number of depths */
 | 
				
			||||||
 | 
					  VisualID         *vids_1bit,
 | 
				
			||||||
 | 
					                   *vids_8bit,
 | 
				
			||||||
 | 
					                   *vids_12bit,
 | 
				
			||||||
 | 
					                   *vids_24bit,
 | 
				
			||||||
 | 
					                   *vids_30bit;
 | 
				
			||||||
  VisualPtr         visuals;
 | 
					  VisualPtr         visuals;
 | 
				
			||||||
  DepthPtr          depths;
 | 
					  DepthPtr          depths;
 | 
				
			||||||
  VisualID          defaultVisual;
 | 
					  VisualID          defaultVisual;
 | 
				
			||||||
| 
						 | 
					@ -179,44 +189,180 @@ InitializePsDriver(ndx, pScreen, argc, argv)
 | 
				
			||||||
    /* Will BitmapToRegion make any difference at all? */
 | 
					    /* Will BitmapToRegion make any difference at all? */
 | 
				
			||||||
  pScreen->BitmapToRegion         = mfbPixmapToRegion;
 | 
					  pScreen->BitmapToRegion         = mfbPixmapToRegion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  nVisuals = 2;
 | 
					  visuals    = (VisualPtr) xalloc(8*sizeof(VisualRec));
 | 
				
			||||||
  nDepths  = 2;
 | 
					  depths     = (DepthPtr)  xalloc(8*sizeof(DepthRec));
 | 
				
			||||||
  visuals  = (VisualPtr)xalloc(nVisuals*sizeof(VisualRec));
 | 
					  vids_1bit  = (VisualID *)xalloc(8*sizeof(VisualID));
 | 
				
			||||||
  depths   = (DepthPtr) xalloc(nDepths*sizeof(DepthRec));
 | 
					  vids_8bit  = (VisualID *)xalloc(8*sizeof(VisualID));
 | 
				
			||||||
 | 
					  vids_12bit = (VisualID *)xalloc(8*sizeof(VisualID));
 | 
				
			||||||
 | 
					  vids_24bit = (VisualID *)xalloc(8*sizeof(VisualID));
 | 
				
			||||||
 | 
					  vids_30bit = (VisualID *)xalloc(8*sizeof(VisualID));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  visuals[0].vid             = FakeClientID(0);
 | 
					  nv = nv_1bit = nv_8bit = nv_12bit = nv_24bit = nv_30bit = nd = 0;
 | 
				
			||||||
  visuals[0].class           = TrueColor;
 | 
					 | 
				
			||||||
  visuals[0].bitsPerRGBValue = 8;
 | 
					 | 
				
			||||||
  visuals[0].ColormapEntries = 256;
 | 
					 | 
				
			||||||
  visuals[0].nplanes         = 24;
 | 
					 | 
				
			||||||
  visuals[0].redMask         = 0x00FF0000;
 | 
					 | 
				
			||||||
  visuals[0].greenMask       = 0x0000FF00;
 | 
					 | 
				
			||||||
  visuals[0].blueMask        = 0x000000FF;
 | 
					 | 
				
			||||||
  visuals[0].offsetRed       = 16;
 | 
					 | 
				
			||||||
  visuals[0].offsetGreen     = 8;
 | 
					 | 
				
			||||||
  visuals[0].offsetBlue      = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  visuals[1].vid             = FakeClientID(0);
 | 
					  /* TrueColor, 24bit */
 | 
				
			||||||
  visuals[1].class           = PseudoColor;
 | 
					  visuals[nv].vid             = FakeClientID(0);
 | 
				
			||||||
  visuals[1].bitsPerRGBValue = 8;
 | 
					  visuals[nv].class           = TrueColor;
 | 
				
			||||||
  visuals[1].ColormapEntries = 256;
 | 
					  visuals[nv].bitsPerRGBValue = 8;
 | 
				
			||||||
  visuals[1].nplanes         = 8;
 | 
					  visuals[nv].ColormapEntries = 256;
 | 
				
			||||||
  visuals[1].redMask         = 0x0;
 | 
					  visuals[nv].nplanes         = 24;
 | 
				
			||||||
  visuals[1].greenMask       = 0x0;
 | 
					  visuals[nv].redMask         = 0X00FF0000;
 | 
				
			||||||
  visuals[1].blueMask        = 0x0;
 | 
					  visuals[nv].greenMask       = 0X0000FF00;
 | 
				
			||||||
  visuals[1].offsetRed       = 0x0;
 | 
					  visuals[nv].blueMask        = 0X000000FF;
 | 
				
			||||||
  visuals[1].offsetGreen     = 0x0;
 | 
					  visuals[nv].offsetRed       = 16;
 | 
				
			||||||
  visuals[1].offsetBlue      = 0x0;
 | 
					  visuals[nv].offsetGreen     = 8;
 | 
				
			||||||
 | 
					  visuals[nv].offsetBlue      = 0;
 | 
				
			||||||
 | 
					  vids_24bit[nv_24bit] = visuals[nv].vid;
 | 
				
			||||||
 | 
					  nv++; nv_24bit++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  depths[0].depth   = 24;
 | 
					  /* PseudoColor, 8bit */
 | 
				
			||||||
  depths[0].numVids = 1;
 | 
					  visuals[nv].vid             = FakeClientID(0);
 | 
				
			||||||
  depths[0].vids    = (VisualID *)xalloc(sizeof(VisualID));
 | 
					  visuals[nv].class           = PseudoColor;
 | 
				
			||||||
  depths[0].vids[0] = visuals[0].vid;
 | 
					  visuals[nv].bitsPerRGBValue = 8;
 | 
				
			||||||
 | 
					  visuals[nv].ColormapEntries = 256;
 | 
				
			||||||
 | 
					  visuals[nv].nplanes         = 8;
 | 
				
			||||||
 | 
					  visuals[nv].redMask         = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].greenMask       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].blueMask        = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetRed       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetGreen     = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetBlue      = 0x0;
 | 
				
			||||||
 | 
					  vids_8bit[nv_8bit] = visuals[nv].vid;
 | 
				
			||||||
 | 
					  nv++; nv_8bit++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  depths[1].depth   = 8;
 | 
					  /* GrayScale, 8bit */
 | 
				
			||||||
  depths[1].numVids = 1;
 | 
					  visuals[nv].vid             = FakeClientID(0);
 | 
				
			||||||
  depths[1].vids    = (VisualID *)xalloc(sizeof(VisualID));
 | 
					  visuals[nv].class           = GrayScale;
 | 
				
			||||||
  depths[1].vids[0] = visuals[1].vid;
 | 
					  visuals[nv].bitsPerRGBValue = 8;
 | 
				
			||||||
 | 
					  visuals[nv].ColormapEntries = 256;
 | 
				
			||||||
 | 
					  visuals[nv].nplanes         = 8;
 | 
				
			||||||
 | 
					  visuals[nv].redMask         = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].greenMask       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].blueMask        = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetRed       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetGreen     = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetBlue      = 0x0;
 | 
				
			||||||
 | 
					  vids_8bit[nv_8bit] = visuals[nv].vid;
 | 
				
			||||||
 | 
					  nv++; nv_8bit++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* StaticGray, 8bit */
 | 
				
			||||||
 | 
					  visuals[nv].vid             = FakeClientID(0);
 | 
				
			||||||
 | 
					  visuals[nv].class           = StaticGray;
 | 
				
			||||||
 | 
					  visuals[nv].bitsPerRGBValue = 8;
 | 
				
			||||||
 | 
					  visuals[nv].ColormapEntries = 256;
 | 
				
			||||||
 | 
					  visuals[nv].nplanes         = 8;
 | 
				
			||||||
 | 
					  visuals[nv].redMask         = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].greenMask       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].blueMask        = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetRed       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetGreen     = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetBlue      = 0x0;
 | 
				
			||||||
 | 
					  vids_8bit[nv_8bit] = visuals[nv].vid;
 | 
				
			||||||
 | 
					  nv++; nv_8bit++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* StaticGray, 1bit */
 | 
				
			||||||
 | 
					  visuals[nv].vid             = FakeClientID(0);
 | 
				
			||||||
 | 
					  visuals[nv].class           = StaticGray;
 | 
				
			||||||
 | 
					  visuals[nv].bitsPerRGBValue = 8;
 | 
				
			||||||
 | 
					  visuals[nv].ColormapEntries = 2;
 | 
				
			||||||
 | 
					  visuals[nv].nplanes         = 1;
 | 
				
			||||||
 | 
					  visuals[nv].redMask         = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].greenMask       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].blueMask        = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetRed       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetGreen     = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetBlue      = 0x0;
 | 
				
			||||||
 | 
					  vids_1bit[nv_1bit] = visuals[nv].vid;
 | 
				
			||||||
 | 
					  nv++; nv_1bit++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					  /* TrueColor, 30bit, 10bit per R-,G-,B-gun */
 | 
				
			||||||
 | 
					  visuals[nv].vid             = FakeClientID(0);
 | 
				
			||||||
 | 
					  visuals[nv].class           = TrueColor;
 | 
				
			||||||
 | 
					  visuals[nv].bitsPerRGBValue = 10;
 | 
				
			||||||
 | 
					  visuals[nv].ColormapEntries = 1024;
 | 
				
			||||||
 | 
					  visuals[nv].nplanes         = 30;
 | 
				
			||||||
 | 
					  visuals[nv].redMask         = 0X3FF00000;
 | 
				
			||||||
 | 
					  visuals[nv].greenMask       = 0X000FFC00;
 | 
				
			||||||
 | 
					  visuals[nv].blueMask        = 0X000003FF;
 | 
				
			||||||
 | 
					  visuals[nv].offsetRed       = 20;
 | 
				
			||||||
 | 
					  visuals[nv].offsetGreen     = 10;
 | 
				
			||||||
 | 
					  visuals[nv].offsetBlue      = 0;
 | 
				
			||||||
 | 
					  vids_30bit[nv_30bit] = visuals[nv].vid;
 | 
				
			||||||
 | 
					  nv++; nv_30bit++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* PostScript Level 2 and above, colors can have 12 bits per component
 | 
				
			||||||
 | 
					   * (36 bit for RGB) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* GrayScale, 12bit, 12bit per R-,G-,B-gun */
 | 
				
			||||||
 | 
					  visuals[nv].vid             = FakeClientID(0);
 | 
				
			||||||
 | 
					  visuals[nv].class           = GrayScale;
 | 
				
			||||||
 | 
					  visuals[nv].bitsPerRGBValue = 12;
 | 
				
			||||||
 | 
					  visuals[nv].ColormapEntries = 4096;
 | 
				
			||||||
 | 
					  visuals[nv].nplanes         = 12;
 | 
				
			||||||
 | 
					  visuals[nv].redMask         = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].greenMask       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].blueMask        = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetRed       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetGreen     = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetBlue      = 0x0;
 | 
				
			||||||
 | 
					  vids_12bit[nv_12bit] = visuals[nv].vid;
 | 
				
			||||||
 | 
					  nv++; nv_12bit++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* StaticGray, 12bit, 12bit per R-,G-,B-gun */
 | 
				
			||||||
 | 
					  visuals[nv].vid             = FakeClientID(0);
 | 
				
			||||||
 | 
					  visuals[nv].class           = StaticGray;
 | 
				
			||||||
 | 
					  visuals[nv].bitsPerRGBValue = 12;
 | 
				
			||||||
 | 
					  visuals[nv].ColormapEntries = 4096;
 | 
				
			||||||
 | 
					  visuals[nv].nplanes         = 12;
 | 
				
			||||||
 | 
					  visuals[nv].redMask         = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].greenMask       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].blueMask        = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetRed       = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetGreen     = 0x0;
 | 
				
			||||||
 | 
					  visuals[nv].offsetBlue      = 0x0;
 | 
				
			||||||
 | 
					  vids_12bit[nv_12bit] = visuals[nv].vid;
 | 
				
			||||||
 | 
					  nv++; nv_12bit++;
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if( nv_30bit > 0 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    depths[nd].depth   = 30;
 | 
				
			||||||
 | 
					    depths[nd].numVids = nv_30bit;
 | 
				
			||||||
 | 
					    depths[nd].vids    = vids_30bit;
 | 
				
			||||||
 | 
					    nd++;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if( nv_24bit > 0 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    depths[nd].depth   = 24;
 | 
				
			||||||
 | 
					    depths[nd].numVids = nv_24bit;
 | 
				
			||||||
 | 
					    depths[nd].vids    = vids_24bit;
 | 
				
			||||||
 | 
					    nd++;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if( nv_12bit > 0 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    depths[nd].depth   = 12;
 | 
				
			||||||
 | 
					    depths[nd].numVids = nv_12bit;
 | 
				
			||||||
 | 
					    depths[nd].vids    = vids_12bit;
 | 
				
			||||||
 | 
					    nd++;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if( nv_8bit > 0 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    depths[nd].depth   = 8;
 | 
				
			||||||
 | 
					    depths[nd].numVids = nv_8bit;
 | 
				
			||||||
 | 
					    depths[nd].vids    = vids_8bit;
 | 
				
			||||||
 | 
					    nd++;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if( nv_1bit > 0 )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    depths[nd].depth   = 1;
 | 
				
			||||||
 | 
					    depths[nd].numVids = nv_1bit;
 | 
				
			||||||
 | 
					    depths[nd].vids    = vids_1bit;
 | 
				
			||||||
 | 
					    nd++;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Defaul visual is 8bit PseudoColor */
 | 
					  /* Defaul visual is 8bit PseudoColor */
 | 
				
			||||||
  defaultVisual = visuals[1].vid;
 | 
					  defaultVisual = visuals[1].vid;
 | 
				
			||||||
| 
						 | 
					@ -228,7 +374,7 @@ InitializePsDriver(ndx, pScreen, argc, argv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GlxWrapInitVisuals(&proc);
 | 
					    GlxWrapInitVisuals(&proc);
 | 
				
			||||||
    /* GlxInitVisuals ignores the last three arguments. */
 | 
					    /* GlxInitVisuals ignores the last three arguments. */
 | 
				
			||||||
    proc(&visuals, &depths, &nVisuals, &nDepths,
 | 
					    proc(&visuals, &depths, &nv, &nd,
 | 
				
			||||||
         &rootDepth, &defaultVisual, 0, 0, 0);
 | 
					         &rootDepth, &defaultVisual, 0, 0, 0);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
#endif /* GLXEXT */
 | 
					#endif /* GLXEXT */
 | 
				
			||||||
| 
						 | 
					@ -237,8 +383,8 @@ InitializePsDriver(ndx, pScreen, argc, argv)
 | 
				
			||||||
               pScreen->width, pScreen->height,
 | 
					               pScreen->width, pScreen->height,
 | 
				
			||||||
               (int) (pScreen->width / (pScreen->mmWidth / 25.40)), 
 | 
					               (int) (pScreen->width / (pScreen->mmWidth / 25.40)), 
 | 
				
			||||||
               (int) (pScreen->height / (pScreen->mmHeight / 25.40)),
 | 
					               (int) (pScreen->height / (pScreen->mmHeight / 25.40)),
 | 
				
			||||||
               0, rootDepth, nDepths,
 | 
					               0, rootDepth, nd,
 | 
				
			||||||
               depths, defaultVisual, nVisuals, visuals);
 | 
					               depths, defaultVisual, nv, visuals);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if( cfbCreateDefColormap(pScreen)==FALSE ) return FALSE;
 | 
					  if( cfbCreateDefColormap(pScreen)==FALSE ) return FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -422,17 +422,19 @@ S_OutTok(PsOutPtr self, char *tok, int cr)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
S_Color(PsOutPtr self, int clr)
 | 
					S_Color(PsOutPtr self, PsOutColor clr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int   ir, ig, ib;
 | 
					  int   ir, ig, ib;
 | 
				
			||||||
  ir = clr>>16; ig = (clr>>8)&0xFF; ib = clr&0xFF;
 | 
					  ir = PSOUTCOLOR_TO_REDBITS(clr);
 | 
				
			||||||
 | 
					  ig = PSOUTCOLOR_TO_GREENBITS(clr);
 | 
				
			||||||
 | 
					  ib = PSOUTCOLOR_TO_BLUEBITS(clr);
 | 
				
			||||||
  if( ir==ig && ig==ib )
 | 
					  if( ir==ig && ig==ib )
 | 
				
			||||||
    { S_OutNum(self, (float)ir/255.); S_OutTok(self, "g", 1); }
 | 
					    { S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir)); S_OutTok(self, "g", 1); }
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    S_OutNum(self, (float)ir/255.);
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
 | 
				
			||||||
    S_OutNum(self, (float)ig/255.);
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig));
 | 
				
			||||||
    S_OutNum(self, (float)ib/255.);
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib));
 | 
				
			||||||
    S_OutTok(self, "sc", 1);
 | 
					    S_OutTok(self, "sc", 1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -636,7 +638,7 @@ PsOut_BeginFile(FILE *fp, char *title, int orient, int count, int plex, int res,
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 *  Initialize the structure
 | 
					 *  Initialize the structure
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
  psout->CurColor    = 0xFFFFFFFF;
 | 
					  psout->CurColor    = PSOUTCOLOR_NOCOLOR;
 | 
				
			||||||
  psout->LineWidth   = 1;
 | 
					  psout->LineWidth   = 1;
 | 
				
			||||||
  psout->LineCap     = PsCButt;
 | 
					  psout->LineCap     = PsCButt;
 | 
				
			||||||
  psout->LineJoin    = PsJMiter;
 | 
					  psout->LineJoin    = PsJMiter;
 | 
				
			||||||
| 
						 | 
					@ -723,7 +725,7 @@ void
 | 
				
			||||||
PsOut_DirtyAttributes(PsOutPtr self)
 | 
					PsOut_DirtyAttributes(PsOutPtr self)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int  i;
 | 
					  int  i;
 | 
				
			||||||
  self->CurColor    = 0xFFFFFFFF;
 | 
					  self->CurColor    = PSOUTCOLOR_NOCOLOR;
 | 
				
			||||||
  self->LineWidth   = -1;
 | 
					  self->LineWidth   = -1;
 | 
				
			||||||
  self->LineCap     = (PsCapEnum)-1;
 | 
					  self->LineCap     = (PsCapEnum)-1;
 | 
				
			||||||
  self->LineJoin    = (PsJoinEnum)-1;
 | 
					  self->LineJoin    = (PsJoinEnum)-1;
 | 
				
			||||||
| 
						 | 
					@ -911,7 +913,7 @@ PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsOut_Color(PsOutPtr self, int clr)
 | 
					PsOut_Color(PsOutPtr self, PsOutColor clr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if( clr==self->CurColor || self->InTile>=PsStip ) return;
 | 
					  if( clr==self->CurColor || self->InTile>=PsStip ) return;
 | 
				
			||||||
  self->CurColor = clr;
 | 
					  self->CurColor = clr;
 | 
				
			||||||
| 
						 | 
					@ -926,7 +928,7 @@ PsOut_FillRule(PsOutPtr self, PsRuleEnum rule)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, PsJoinEnum join,
 | 
					PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, PsJoinEnum join,
 | 
				
			||||||
                int nDsh, int *dsh, int dshOff, int bclr)
 | 
					                int nDsh, int *dsh, int dshOff, PsOutColor bclr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int         i;
 | 
					  int         i;
 | 
				
			||||||
  int         same = 1;
 | 
					  int         same = 1;
 | 
				
			||||||
| 
						 | 
					@ -973,7 +975,10 @@ PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap, PsJoinEnum join,
 | 
				
			||||||
    S_OutTok(self, "ds", 1);
 | 
					    S_OutTok(self, "ds", 1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if( nDsh ) self->LineBClr = bclr; else bclr = -1;
 | 
					  if( nDsh )
 | 
				
			||||||
 | 
					    self->LineBClr = bclr;
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    bclr = PSOUTCOLOR_NOCOLOR;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -1094,7 +1099,7 @@ PsOut_Lines(PsOutPtr self, int nPts, PsPointPtr pts)
 | 
				
			||||||
    if( i==0 ) S_OutTok(self, "m", 0);
 | 
					    if( i==0 ) S_OutTok(self, "m", 0);
 | 
				
			||||||
    else       S_OutTok(self, "l", 0);
 | 
					    else       S_OutTok(self, "l", 0);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  if( self->LineBClr>=0 )
 | 
					  if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    S_OutTok(self, "gs", 0);
 | 
					    S_OutTok(self, "gs", 0);
 | 
				
			||||||
    S_Color(self, self->LineBClr);
 | 
					    S_Color(self, self->LineBClr);
 | 
				
			||||||
| 
						 | 
					@ -1133,7 +1138,7 @@ PsOut_DrawRect(PsOutPtr self, int x, int y, int w, int h)
 | 
				
			||||||
  S_OutNum(self, (float)w);
 | 
					  S_OutNum(self, (float)w);
 | 
				
			||||||
  S_OutNum(self, (float)h);
 | 
					  S_OutNum(self, (float)h);
 | 
				
			||||||
  S_OutTok(self, "R", 0);
 | 
					  S_OutTok(self, "R", 0);
 | 
				
			||||||
  if( self->LineBClr>=0 )
 | 
					  if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    S_OutTok(self, "gs", 0);
 | 
					    S_OutTok(self, "gs", 0);
 | 
				
			||||||
    S_Color(self, self->LineBClr);
 | 
					    S_Color(self, self->LineBClr);
 | 
				
			||||||
| 
						 | 
					@ -1159,7 +1164,7 @@ PsOut_DrawArc(PsOutPtr self, int x, int y, int w, int h,
 | 
				
			||||||
  S_OutNum(self, ang1+ang2);
 | 
					  S_OutNum(self, ang1+ang2);
 | 
				
			||||||
  if( ang2<0 ) S_OutTok(self, "An", 0);
 | 
					  if( ang2<0 ) S_OutTok(self, "An", 0);
 | 
				
			||||||
  else         S_OutTok(self, "Ac", 0);
 | 
					  else         S_OutTok(self, "Ac", 0);
 | 
				
			||||||
  if( self->LineBClr>=0 )
 | 
					  if( self->LineBClr != PSOUTCOLOR_NOCOLOR )
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    S_OutTok(self, "gs", 0);
 | 
					    S_OutTok(self, "gs", 0);
 | 
				
			||||||
    S_Color(self, self->LineBClr);
 | 
					    S_Color(self, self->LineBClr);
 | 
				
			||||||
| 
						 | 
					@ -1169,7 +1174,7 @@ PsOut_DrawArc(PsOutPtr self, int x, int y, int w, int h,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, int bclr)
 | 
					PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, PsOutColor bclr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int  xo = self->XOff;
 | 
					  int  xo = self->XOff;
 | 
				
			||||||
  int  yo = self->YOff;
 | 
					  int  yo = self->YOff;
 | 
				
			||||||
| 
						 | 
					@ -1179,21 +1184,23 @@ PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl, int bclr)
 | 
				
			||||||
  S_OutStr(self, text, textl);
 | 
					  S_OutStr(self, text, textl);
 | 
				
			||||||
  S_OutNum(self, (float)x);
 | 
					  S_OutNum(self, (float)x);
 | 
				
			||||||
  S_OutNum(self, (float)y);
 | 
					  S_OutNum(self, (float)y);
 | 
				
			||||||
  if( bclr<0 ) S_OutTok(self, "T", 1);
 | 
					  if( bclr == PSOUTCOLOR_NOCOLOR )
 | 
				
			||||||
 | 
					    S_OutTok(self, "T", 1);
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    int ir = bclr>>16;
 | 
					    int ir = PSOUTCOLOR_TO_REDBITS(bclr);
 | 
				
			||||||
    int ig = (bclr>>8)&0xFF;
 | 
					    int ig = PSOUTCOLOR_TO_GREENBITS(bclr);
 | 
				
			||||||
    int ib = bclr&0xFF;
 | 
					    int ib = PSOUTCOLOR_TO_BLUEBITS(bclr);
 | 
				
			||||||
    S_OutNum(self, (float)ir/255.);
 | 
					
 | 
				
			||||||
    S_OutNum(self, (float)ig/255.);
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
 | 
				
			||||||
    S_OutNum(self, (float)ib/255.);
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig));
 | 
				
			||||||
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib));
 | 
				
			||||||
    S_OutTok(self, "Tb", 1);
 | 
					    S_OutTok(self, "Tb", 1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, int bclr)
 | 
					PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int  xo = self->XOff;
 | 
					  int  xo = self->XOff;
 | 
				
			||||||
  int  yo = self->YOff;
 | 
					  int  yo = self->YOff;
 | 
				
			||||||
| 
						 | 
					@ -1203,22 +1210,23 @@ PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, int b
 | 
				
			||||||
  S_OutStr16(self, text, textl);
 | 
					  S_OutStr16(self, text, textl);
 | 
				
			||||||
  S_OutNum(self, (float)x);
 | 
					  S_OutNum(self, (float)x);
 | 
				
			||||||
  S_OutNum(self, (float)y);
 | 
					  S_OutNum(self, (float)y);
 | 
				
			||||||
  if( bclr<0 ) S_OutTok(self, "T", 1);
 | 
					  if( bclr == PSOUTCOLOR_NOCOLOR )
 | 
				
			||||||
 | 
					    S_OutTok(self, "T", 1);
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    int ir = bclr>>16;
 | 
					    int ir = PSOUTCOLOR_TO_REDBITS(bclr);
 | 
				
			||||||
    int ig = (bclr>>8)&0xFF;
 | 
					    int ig = PSOUTCOLOR_TO_GREENBITS(bclr);
 | 
				
			||||||
    int ib = bclr&0xFF;
 | 
					    int ib = PSOUTCOLOR_TO_BLUEBITS(bclr);
 | 
				
			||||||
    S_OutNum(self, (float)ir/255.);
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
 | 
				
			||||||
    S_OutNum(self, (float)ig/255.);
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ig));
 | 
				
			||||||
    S_OutNum(self, (float)ib/255.);
 | 
					    S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ib));
 | 
				
			||||||
    S_OutTok(self, "Tb", 1);
 | 
					    S_OutTok(self, "Tb", 1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef BM_CACHE
 | 
					#ifdef BM_CACHE
 | 
				
			||||||
void  /* new */
 | 
					void  /* new */
 | 
				
			||||||
PsOut_ImageCache(PsOutPtr self, int x, int y, long cache_id, int bclr, int fclr)
 | 
					PsOut_ImageCache(PsOutPtr self, int x, int y, long cache_id, PsOutColor bclr, PsOutColor fclr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  char cacheID[10];
 | 
					  char cacheID[10];
 | 
				
			||||||
  int xo = self->XOff;
 | 
					  int xo = self->XOff;
 | 
				
			||||||
| 
						 | 
					@ -1231,22 +1239,26 @@ PsOut_ImageCache(PsOutPtr self, int x, int y, long cache_id, int bclr, int fclr)
 | 
				
			||||||
  S_OutNum(self, (float)x);
 | 
					  S_OutNum(self, (float)x);
 | 
				
			||||||
  S_OutNum(self, (float)y);
 | 
					  S_OutNum(self, (float)y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if( fclr==0xFFFFFF )
 | 
					  if( fclr==PSOUTCOLOR_WHITE )
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    int   ir, ig, ib;
 | 
					    int ir = PSOUTCOLOR_TO_REDBITS(bclr);
 | 
				
			||||||
    ir = bclr>>16; ig = (bclr>>8)&0xFF; ib = bclr&0xFF;
 | 
					    int ig = PSOUTCOLOR_TO_GREENBITS(bclr);
 | 
				
			||||||
 | 
					    int ib = PSOUTCOLOR_TO_BLUEBITS(bclr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if( ir==ig && ig==ib )
 | 
					    if( ir==ig && ig==ib )
 | 
				
			||||||
      S_OutNum(self, (float)ir/255.);
 | 
					      S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      S_OutNum(self, (float)0);
 | 
					      S_OutNum(self, (float)0);
 | 
				
			||||||
      self->RevImage = 1;
 | 
					      self->RevImage = 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    int   ir, ig, ib;
 | 
					    int ir = PSOUTCOLOR_TO_REDBITS(fclr);
 | 
				
			||||||
    ir = fclr>>16; ig = (fclr>>8)&0xFF; ib = fclr&0xFF;
 | 
					    int ig = PSOUTCOLOR_TO_GREENBITS(fclr);
 | 
				
			||||||
 | 
					    int ib = PSOUTCOLOR_TO_BLUEBITS(fclr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if( ir==ig && ig==ib )
 | 
					    if( ir==ig && ig==ib )
 | 
				
			||||||
      S_OutNum(self, (float)ir/255.);
 | 
					      S_OutNum(self, PSOUTCOLOR_BITS_TO_PSFLOAT(ir));
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      S_OutNum(self, (float)0);
 | 
					      S_OutNum(self, (float)0);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -1272,10 +1284,10 @@ PsOut_EndImageCache(PsOutPtr self)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsOut_BeginImage(PsOutPtr self, int bclr, int fclr, int x, int y,
 | 
					PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
 | 
				
			||||||
                 int w, int h, int sw, int sh, int format)
 | 
					                 int w, int h, int sw, int sh, int format)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int savClr = self->CurColor;
 | 
					  PsOutColor savClr = self->CurColor;
 | 
				
			||||||
  int xo = self->XOff;
 | 
					  int xo = self->XOff;
 | 
				
			||||||
  int yo = self->YOff;
 | 
					  int yo = self->YOff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1291,7 +1303,7 @@ PsOut_BeginImage(PsOutPtr self, int bclr, int fclr, int x, int y,
 | 
				
			||||||
    S_OutTok(self, "<", 0);
 | 
					    S_OutTok(self, "<", 0);
 | 
				
			||||||
    self->ImageFormat = format;
 | 
					    self->ImageFormat = format;
 | 
				
			||||||
    self->RevImage = 0;
 | 
					    self->RevImage = 0;
 | 
				
			||||||
    if( self->InTile==PsTile && format==1 && fclr==0xFFFFFF )
 | 
					    if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE )
 | 
				
			||||||
      self->RevImage = 1;
 | 
					      self->RevImage = 1;
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -1300,7 +1312,7 @@ PsOut_BeginImage(PsOutPtr self, int bclr, int fclr, int x, int y,
 | 
				
			||||||
  if( format==1 )
 | 
					  if( format==1 )
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    S_OutTok(self, "gs", 0);
 | 
					    S_OutTok(self, "gs", 0);
 | 
				
			||||||
    if( fclr==0xFFFFFF )
 | 
					    if( fclr==PSOUTCOLOR_WHITE )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      PsOut_Color(self, fclr);
 | 
					      PsOut_Color(self, fclr);
 | 
				
			||||||
      PsOut_FillRect(self, x, y, sw, sh);
 | 
					      PsOut_FillRect(self, x, y, sw, sh);
 | 
				
			||||||
| 
						 | 
					@ -1332,10 +1344,10 @@ PsOut_BeginImage(PsOutPtr self, int bclr, int fclr, int x, int y,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
PsOut_BeginImageIM(PsOutPtr self, int bclr, int fclr, int x, int y,
 | 
					PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
 | 
				
			||||||
                 int w, int h, int sw, int sh, int format)
 | 
					                 int w, int h, int sw, int sh, int format)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int savClr = self->CurColor;
 | 
					  PsOutColor savClr = self->CurColor;
 | 
				
			||||||
  int xo = self->XOff;
 | 
					  int xo = self->XOff;
 | 
				
			||||||
  int yo = self->YOff;
 | 
					  int yo = self->YOff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1351,7 +1363,7 @@ PsOut_BeginImageIM(PsOutPtr self, int bclr, int fclr, int x, int y,
 | 
				
			||||||
    S_OutTok(self, "<", 0);
 | 
					    S_OutTok(self, "<", 0);
 | 
				
			||||||
    self->ImageFormat = format;
 | 
					    self->ImageFormat = format;
 | 
				
			||||||
    self->RevImage = 0;
 | 
					    self->RevImage = 0;
 | 
				
			||||||
    if( self->InTile==PsTile && format==1 && fclr==0xFFFFFF )
 | 
					    if( self->InTile==PsTile && format==1 && fclr==PSOUTCOLOR_WHITE )
 | 
				
			||||||
      self->RevImage = 1;
 | 
					      self->RevImage = 1;
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -1363,7 +1375,7 @@ PsOut_BeginImageIM(PsOutPtr self, int bclr, int fclr, int x, int y,
 | 
				
			||||||
#ifdef BM_CACHE
 | 
					#ifdef BM_CACHE
 | 
				
			||||||
    S_OutTok(self, "g", 1);
 | 
					    S_OutTok(self, "g", 1);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    if( fclr==0xFFFFFF )
 | 
					    if( fclr==PSOUTCOLOR_WHITE )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      PsOut_Color(self, bclr);
 | 
					      PsOut_Color(self, bclr);
 | 
				
			||||||
      self->RevImage = 1;
 | 
					      self->RevImage = 1;
 | 
				
			||||||
| 
						 | 
					@ -1411,7 +1423,7 @@ PsOut_EndImage(PsOutPtr  self)
 | 
				
			||||||
    S_OutTok(self, ">", 1);
 | 
					    S_OutTok(self, ">", 1);
 | 
				
			||||||
    if( self->ImageFormat==1 && self->InTile==PsTile )
 | 
					    if( self->ImageFormat==1 && self->InTile==PsTile )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      if( self->ImgFClr==0xFFFFFF )
 | 
					      if( self->ImgFClr==PSOUTCOLOR_WHITE )
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        PsOut_Color(self, self->ImgFClr);
 | 
					        PsOut_Color(self, self->ImgFClr);
 | 
				
			||||||
        PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH);
 | 
					        PsOut_FillRect(self, self->ImgX, self->ImgY, self->SclW, self->SclH);
 | 
				
			||||||
| 
						 | 
					@ -1509,7 +1521,7 @@ PsOut_EndFrame(PsOutPtr self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, PsFillEnum type,
 | 
					PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h, PsFillEnum type,
 | 
				
			||||||
                   int bclr, int fclr)
 | 
					                   PsOutColor bclr, PsOutColor fclr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int   i;
 | 
					  int   i;
 | 
				
			||||||
  char  key[64];
 | 
					  char  key[64];
 | 
				
			||||||
| 
						 | 
					@ -1585,7 +1597,7 @@ PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type)
 | 
				
			||||||
    case PsOpStip: key[0] = 'o'; break; }
 | 
					    case PsOpStip: key[0] = 'o'; break; }
 | 
				
			||||||
  S_OutTok(self, key, 0);
 | 
					  S_OutTok(self, key, 0);
 | 
				
			||||||
  S_OutTok(self, "spt", 1);
 | 
					  S_OutTok(self, "spt", 1);
 | 
				
			||||||
  self->CurColor = 0xFFFFFFFF;
 | 
					  self->CurColor = PSOUTCOLOR_NOCOLOR;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -153,6 +153,30 @@ typedef enum PsFTDownloadFontType_
 | 
				
			||||||
  PsFontType3
 | 
					  PsFontType3
 | 
				
			||||||
} PsFTDownloadFontType;
 | 
					} PsFTDownloadFontType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef PSOUT_USE_DEEPCOLOR
 | 
				
			||||||
 | 
					typedef long long PsOutColor;
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_TO_REDBITS(clr)    ((clr) >> 32)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_TO_GREENBITS(clr)  (((clr) >> 16) & 0xFFFF)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_TO_BLUEBITS(clr)   ((clr) & 0xFFFF)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 65535.)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_WHITE              (0xFFFFFFFFFFFFLL)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_NOCOLOR            (-1LL)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_TO_RGB24BIT(clr)   (((PSOUTCOLOR_TO_REDBITS(clr)   >> 8) << 16) | \
 | 
				
			||||||
 | 
					                                       ((PSOUTCOLOR_TO_GREENBITS(clr) >> 8) << 8)  | \
 | 
				
			||||||
 | 
					                                       ((PSOUTCOLOR_TO_BLUEBITS(clr)  >> 8) << 0))
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					typedef long PsOutColor;
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_TO_REDBITS(clr)    ((clr) >> 16)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_TO_GREENBITS(clr)  (((clr) >> 8) & 0xFF)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_TO_BLUEBITS(clr)   ((clr) & 0xFF)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 255.)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_WHITE              (0xFFFFFF)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_NOCOLOR            (-1)
 | 
				
			||||||
 | 
					#define PSOUTCOLOR_TO_RGB24BIT(clr)   ((PSOUTCOLOR_TO_REDBITS(clr)   << 16) | \
 | 
				
			||||||
 | 
					                                       (PSOUTCOLOR_TO_GREENBITS(clr) << 8)  | \
 | 
				
			||||||
 | 
					                                       (PSOUTCOLOR_TO_BLUEBITS(clr)  << 0))
 | 
				
			||||||
 | 
					#endif /* PSOUT_USE_DEEPCOLOR */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef USE_PSOUT_PRIVATE
 | 
					#ifdef USE_PSOUT_PRIVATE
 | 
				
			||||||
typedef void *voidPtr;
 | 
					typedef void *voidPtr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -168,14 +192,14 @@ typedef struct PsOutRec_
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  FILE       *Fp;
 | 
					  FILE       *Fp;
 | 
				
			||||||
  char        Buf[16384];
 | 
					  char        Buf[16384];
 | 
				
			||||||
  int         CurColor;
 | 
					  PsOutColor  CurColor;
 | 
				
			||||||
  int         LineWidth;
 | 
					  int         LineWidth;
 | 
				
			||||||
  PsCapEnum   LineCap;
 | 
					  PsCapEnum   LineCap;
 | 
				
			||||||
  PsJoinEnum  LineJoin;
 | 
					  PsJoinEnum  LineJoin;
 | 
				
			||||||
  int         NDashes;
 | 
					  int         NDashes;
 | 
				
			||||||
  int        *Dashes;
 | 
					  int        *Dashes;
 | 
				
			||||||
  int         DashOffset;
 | 
					  int         DashOffset;
 | 
				
			||||||
  int         LineBClr;
 | 
					  PsOutColor  LineBClr;
 | 
				
			||||||
  PsRuleEnum  FillRule;
 | 
					  PsRuleEnum  FillRule;
 | 
				
			||||||
  char       *FontName;
 | 
					  char       *FontName;
 | 
				
			||||||
  int         FontSize;
 | 
					  int         FontSize;
 | 
				
			||||||
| 
						 | 
					@ -193,8 +217,8 @@ typedef struct PsOutRec_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  PsFillEnum  InTile;
 | 
					  PsFillEnum  InTile;
 | 
				
			||||||
  int         ImgSkip;
 | 
					  int         ImgSkip;
 | 
				
			||||||
  int         ImgBClr;
 | 
					  PsOutColor  ImgBClr;
 | 
				
			||||||
  int         ImgFClr;
 | 
					  PsOutColor  ImgFClr;
 | 
				
			||||||
  int         ImgX;
 | 
					  int         ImgX;
 | 
				
			||||||
  int         ImgY;
 | 
					  int         ImgY;
 | 
				
			||||||
  int         ImgW;
 | 
					  int         ImgW;
 | 
				
			||||||
| 
						 | 
					@ -230,11 +254,11 @@ extern void PsOut_Offset(PsOutPtr self, int x, int y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf);
 | 
					extern void PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void PsOut_Color(PsOutPtr self, int clr);
 | 
					extern void PsOut_Color(PsOutPtr self, PsOutColor clr);
 | 
				
			||||||
extern void PsOut_FillRule(PsOutPtr self, PsRuleEnum rule);
 | 
					extern void PsOut_FillRule(PsOutPtr self, PsRuleEnum rule);
 | 
				
			||||||
extern void PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap,
 | 
					extern void PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap,
 | 
				
			||||||
                            PsJoinEnum join, int nDsh, int *dsh, int dshOff,
 | 
					                            PsJoinEnum join, int nDsh, int *dsh, int dshOff,
 | 
				
			||||||
                            int bclr);
 | 
					                            PsOutColor bclr);
 | 
				
			||||||
extern void PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso);
 | 
					extern void PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso);
 | 
				
			||||||
extern void PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso);
 | 
					extern void PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -250,12 +274,12 @@ extern void PsOut_DrawArc(PsOutPtr self, int x, int y, int w, int h,
 | 
				
			||||||
                          float ang1, float ang2);
 | 
					                          float ang1, float ang2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl,
 | 
					extern void PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl,
 | 
				
			||||||
                       int bclr);
 | 
					                       PsOutColor bclr);
 | 
				
			||||||
extern void PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, int bclr);
 | 
					extern void PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void PsOut_BeginImage(PsOutPtr self, int bclr, int  fclr, int x, int y,
 | 
					extern void PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
 | 
				
			||||||
                             int w, int h, int sw, int sh, int format);
 | 
					                             int w, int h, int sw, int sh, int format);
 | 
				
			||||||
extern void PsOut_BeginImageIM(PsOutPtr self, int bclr, int fclr, int x, int y,
 | 
					extern void PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
 | 
				
			||||||
                               int w, int h, int sw, int sh, int format);
 | 
					                               int w, int h, int sw, int sh, int format);
 | 
				
			||||||
extern void PsOut_EndImage(PsOutPtr self);
 | 
					extern void PsOut_EndImage(PsOutPtr self);
 | 
				
			||||||
extern void PsOut_OutImageBytes(PsOutPtr self, int nBytes, char *bytes);
 | 
					extern void PsOut_OutImageBytes(PsOutPtr self, int nBytes, char *bytes);
 | 
				
			||||||
| 
						 | 
					@ -265,7 +289,7 @@ extern void PsOut_BeginFrame(PsOutPtr self, int xoff, int yoff, int x, int y,
 | 
				
			||||||
extern void PsOut_EndFrame(PsOutPtr self);
 | 
					extern void PsOut_EndFrame(PsOutPtr self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int  PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h,
 | 
					extern int  PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h,
 | 
				
			||||||
                               PsFillEnum type, int bclr, int fclr);
 | 
					                               PsFillEnum type, PsOutColor bclr, PsOutColor fclr);
 | 
				
			||||||
extern void PsOut_EndPattern(PsOutPtr self);
 | 
					extern void PsOut_EndPattern(PsOutPtr self);
 | 
				
			||||||
extern void PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type);
 | 
					extern void PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue