#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#ifndef _PS_H_
#define _PS_H_
#include <stdio.h>
#ifdef abs
#undef abs
#endif
#include <stdlib.h>
#include "scrnintstr.h"
#include "dix.h"
#include "PsDef.h"
#include "psout.h"
#include <X11/extensions/Print.h>
#include <X11/extensions/Printstr.h>
#include "regionstr.h"
#include <X11/fonts/fontstruct.h>
#include "dixfontstr.h"
#include "gcstruct.h"
#ifndef HAVE_XPointer
typedef char *XPointer;
#define Status int
#define True 1
#define False 0
#endif
#include "misc.h"
#include <X11/Xfuncproto.h>
#include <X11/Xresource.h>
#include "attributes.h"
extern int PsScreenPrivateIndex;
extern int PsWindowPrivateIndex;
extern int PsContextPrivateIndex;
extern int PsPixmapPrivateIndex;
extern XpValidatePoolsRec PsValidatePoolsRec;
#define DPY_BLOCKSIZE 4096
typedef struct
{
int mode;
int nPoints;
xPoint *pPoints;
} PsPolyPointsRec;
typedef struct
{
int nSegments;
xSegment *pSegments;
} PsSegmentsRec;
typedef struct
{
int nRects;
xRectangle *pRects;
} PsRectanglesRec;
typedef struct
{
int nArcs;
xArc *pArcs;
} PsArcsRec;
typedef struct
{
int x;
int y;
int count;
char *string;
} PsText8Rec;
typedef struct
{
int x;
int y;
int count;
unsigned short *string;
} PsText16Rec;
typedef struct
{
int depth;
int x;
int y;
int w;
int h;
int leftPad;
int format;
int res;
char *pData;
} PsImageRec;
typedef struct
{
int x;
int y;
int w;
int h;
} PsFrameRec;
typedef enum
{
PolyPointCmd,
PolyLineCmd,
PolySegmentCmd,
PolyRectangleCmd,
FillPolygonCmd,
PolyFillRectCmd,
PolyArcCmd,
PolyFillArcCmd,
Text8Cmd,
Text16Cmd,
TextI8Cmd,
TextI16Cmd,
PutImageCmd,
BeginFrameCmd,
EndFrameCmd
} DisplayElmType;
typedef struct _DisplayElmRec
{
DisplayElmType type;
GCPtr gc;
union
{
PsPolyPointsRec polyPts;
PsSegmentsRec segments;
PsRectanglesRec rects;
PsArcsRec arcs;
PsText8Rec text8;
PsText16Rec text16;
PsImageRec image;
PsFrameRec frame;
} c;
} DisplayElmRec;
typedef DisplayElmRec *DisplayElmPtr;
typedef struct _DisplayListRec
{
struct _DisplayListRec *next;
int nelms;
DisplayElmRec elms[DPY_BLOCKSIZE];
} DisplayListRec;
typedef DisplayListRec *DisplayListPtr;
typedef struct
{
XrmDatabase resDB;
Bool (*DestroyWindow)(WindowPtr);
} PsScreenPrivRec, *PsScreenPrivPtr;
typedef struct PsFontTypeInfoRec PsFontTypeInfoRec;
struct PsFontTypeInfoRec
{
PsFontTypeInfoRec *next;
char *adobe_ps_name;
char *download_ps_name;
char *filename;
#ifdef XP_USE_FREETYPE
char *ft_download_encoding;
PsFTDownloadFontType ft_download_font_type;
#endif
int is_iso_encoding;
int font_type;
Bool downloadableFont;
Bool alreadyDownloaded[256];
};
#define PSFTI_FONT_TYPE_OTHER (0)
#define PSFTI_FONT_TYPE_PMF (1)
#define PSFTI_FONT_TYPE_PS_TYPE1_PFA (2)
#define PSFTI_FONT_TYPE_PS_TYPE1_PFB (3)
#define PSFTI_FONT_TYPE_TRUETYPE (4)
#define PSFTI_FONT_TYPE_FREETYPE (5)
typedef struct PsFontInfoRec PsFontInfoRec;
struct PsFontInfoRec
{
PsFontInfoRec *next;
FontPtr font;
pointer font_fontPrivate;
PsFontTypeInfoRec *ftir;
const char *dfl_name;
int size;
float mtx[4];
};
typedef struct
{
char *jobFileName;
FILE *pJobFile;
GC lastGC;
unsigned char *dash;
int validGC;
ClientPtr getDocClient;
int getDocBufSize;
PsOutPtr pPsOut;
PsFontTypeInfoRec *fontTypeInfoRecords;
PsFontInfoRec *fontInfoRecords;
} PsContextPrivRec, *PsContextPrivPtr;
typedef struct
{
int validContext;
XpContextPtr context;
} PsWindowPrivRec, *PsWindowPrivPtr;
typedef struct
{
XpContextPtr context;
GC lastGC;
int validGC;
DisplayListPtr dispList;
} PsPixmapPrivRec, *PsPixmapPrivPtr;
#define SEND_PS(f,c) fwrite( c, sizeof( char ), strlen( c ), f )
#define MIN(a,b) (((a)<(b))?(a):(b))
#ifndef MAX
#define MAX(a,b) (((a)>(b))?(a):(b))
#endif
extern Bool InitializePsDriver(int ndx, ScreenPtr pScreen, int argc,
char **argv);
extern XpContextPtr PsGetContextFromWindow(WindowPtr win);
extern int PsBmIsImageCached(int gWidth, int gHeight, char *pBuffer);
extern int PsBmPutImageInCache(int gWidth, int gHeight, char *pBuffer);
extern void PsBmClearImageCache(void);
extern int PsStartJob(XpContextPtr pCon, Bool sendClientData, ClientPtr client);
extern int PsEndJob(XpContextPtr pCon, Bool cancel);
extern int PsStartPage(XpContextPtr pCon, WindowPtr pWin);
extern int PsEndPage(XpContextPtr pCon, WindowPtr pWin);
extern int PsStartDoc(XpContextPtr pCon, XPDocumentType type);
extern int PsEndDoc(XpContextPtr pCon, Bool cancel);
extern int PsDocumentData(XpContextPtr pCon, DrawablePtr pDraw, char *pData,
int len_data, char *pFmt, int len_fmt, char *pOpt, int len_opt,
ClientPtr client);
extern int PsGetDocumentData(XpContextPtr pCon, ClientPtr client,
int maxBufferSize);
extern Bool PsCreateGC(GCPtr pGC);
extern PsContextPrivPtr PsGetPsContextPriv( DrawablePtr pDrawable );
extern int PsUpdateDrawableGC(GCPtr pGC, DrawablePtr pDrawable,
PsOutPtr *psOut, ColormapPtr *cMap);
extern void PsValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
extern void PsChangeGC(GCPtr pGC, unsigned long changes);
extern void PsCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
extern void PsDestroyGC(GCPtr pGC);
extern void PsChangeClip(GCPtr pGC, int type, pointer pValue, int nrects);
extern void PsDestroyClip(GCPtr pGC);
extern void PsCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
extern GCPtr PsCreateAndCopyGC(DrawablePtr pDrawable, GCPtr pSrc);
extern void PsQueryBestSize(int type, short *pwidth, short *pheight,
ScreenPtr pScreen);
extern Bool PsCloseScreen(int index, ScreenPtr pScreen);
extern void PsLineAttrs(PsOutPtr psOut, GCPtr pGC, ColormapPtr cMap);
extern int PsGetMediumDimensions(
XpContextPtr pCon,
CARD16 *pWidth,
CARD16 *pHeight);
extern int PsGetReproducibleArea(
XpContextPtr pCon,
xRectangle *pRect);
extern int PsSetImageResolution(
XpContextPtr pCon,
int imageRes,
Bool *status);
extern void PsFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nSpans,
DDXPointPtr pPoints, int *pWidths, int fSorted);
extern void PsSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *pSrc,
DDXPointPtr pPoints, int *pWidths, int nSpans,
int fSorted);
extern void PsPutScaledImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
int x, int y, int w, int h, int leftPad, int format,
int imageRes, char *pImage);
extern void PsPutScaledImageIM(DrawablePtr pDrawable, GCPtr pGC, int depth,
int x, int y, int w, int h, int leftPad,
int format, int imageRes, char *pImage);
extern void PsPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
int x, int y, int w, int h, int leftPad, int format,
char *pImage);
extern void PsPutImageMask(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
int w, int h, int leftPad, int format, char *pImage);
extern RegionPtr PsCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
int srcx, int srcy, int width, int height,
int dstx, int dsty);
extern RegionPtr PsCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
int srcx, int srcy, int width, int height,
int dstx, int dsty, unsigned long plane);
extern void PsPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
int nPoints, xPoint *pPoints);
extern void PsPushPixels(GCPtr pGC, PixmapPtr pBitmap, DrawablePtr pDrawable,
int width, int height, int x, int y);
extern void PsPolyLine(DrawablePtr pDrawable, GCPtr pGC, int mode,
int nPoints, xPoint *pPoints);
extern void PsPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nSegments,
xSegment *pSegments);
extern void PsPolyRectangle(DrawablePtr pDrawable, GCPtr pGC, int nRects,
xRectangle *pRects);
extern void PsFillPolygon(DrawablePtr pDrawable, GCPtr pGC, int shape,
int mode, int nPoints, DDXPointPtr pPoints);
extern void PsPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nRects,
xRectangle *pRects);
extern void PsPolyArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs,
xArc *pArcs);
extern void PsPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs,
xArc *pArcs);
extern int PsPolyText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
int count, char *string);
extern int PsPolyText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
int count, unsigned short *string);
extern void PsImageText8(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
int count, char *string);
extern void PsImageText16(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
int count, unsigned short *string);
extern void PsImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
unsigned int nGlyphs, CharInfoPtr *pCharInfo,
pointer pGlyphBase);
extern void PsPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y,
unsigned int nGlyphs, CharInfoPtr *pCharInfo,
pointer pGlyphBase);
extern Bool PsCreateWindow(WindowPtr pWin);
extern Bool PsMapWindow(WindowPtr pWin);
extern Bool PsPositionWindow(WindowPtr pWin, int x, int y);
extern Bool PsUnmapWindow(WindowPtr pWin);
extern void PsCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg,
RegionPtr prgnSrc);
extern Bool PsChangeWindowAttributes(WindowPtr pWin, unsigned long mask);
extern void PsPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what);
extern Bool PsDestroyWindow(WindowPtr pWin);
extern Bool PsRealizeFont(ScreenPtr pscr, FontPtr pFont);
extern Bool PsUnrealizeFont(ScreenPtr pscr, FontPtr pFont);
extern char *PsGetFontName(FontPtr pFont);
extern int PsGetFontSize(FontPtr pFont, float *mtx);
extern char *PsGetPSFontName(FontPtr pFont);
extern char *PsGetPSFaceOrFontName(FontPtr pFont);
extern int PsIsISOLatin1Encoding(FontPtr pFont);
extern char *PsGetEncodingName(FontPtr pFont);
extern PsFontInfoRec *PsGetFontInfoRec(DrawablePtr pDrawable, FontPtr pFont);
extern void PsFreeFontInfoRecords(PsContextPrivPtr priv);
extern PsFTDownloadFontType PsGetFTDownloadFontType(void);
extern char *PsGetFTFontFileName(FontPtr pFont);
extern Bool PsIsFreeTypeFont(FontPtr pFont);
extern char *PsGetAttributes(XpContextPtr pCon, XPAttributes pool);
extern char *PsGetOneAttribute(XpContextPtr pCon, XPAttributes pool,
char *attr);
extern int PsAugmentAttributes(XpContextPtr pCon, XPAttributes pool,
char *attrs);
extern int PsSetAttributes(XpContextPtr pCon, XPAttributes pool, char *attrs);
extern Bool PsCreateColormap(ColormapPtr pColor);
extern void PsDestroyColormap(ColormapPtr pColor);
extern void PsInstallColormap(ColormapPtr pColor);
extern void PsUninstallColormap(ColormapPtr pColor);
extern int PsListInstalledColormaps(ScreenPtr pScreen, XID *pCmapList);
extern void PsStoreColors(ColormapPtr pColor, int ndef, xColorItem *pdefs);
extern void PsResolveColor(unsigned short *pRed, unsigned short *pGreen,
unsigned short *pBlue, VisualPtr pVisual);
extern PsOutColor PsGetPixelColor(ColormapPtr cMap, int pixval);
extern void PsSetFillColor(DrawablePtr pDrawable, GCPtr pGC, PsOutPtr psOut,
ColormapPtr cMap);
extern PixmapPtr PsCreatePixmap(ScreenPtr pScreen, int width, int height,
int depth);
extern void PsScrubPixmap(PixmapPtr pPixmap);
extern Bool PsDestroyPixmap(PixmapPtr pPixmap);
extern DisplayListPtr PsGetFreeDisplayBlock(PsPixmapPrivPtr priv);
extern void PsReplay(DisplayElmPtr elm, DrawablePtr pDrawable);
extern void PsReplayPixmap(PixmapPtr pix, DrawablePtr pDrawable);
extern int PsCloneDisplayElm(PixmapPtr dst,
DisplayElmPtr elm, DisplayElmPtr newElm,
int xoff, int yoff);
extern void PsCopyDisplayList(PixmapPtr src, PixmapPtr dst, int xoff,
int yoff, int x, int y, int w, int h);
extern PsElmPtr PsCreateFillElementList(PixmapPtr pix, int *nElms);
extern PsElmPtr PsCloneFillElementList(int nElms, PsElmPtr elms);
extern void PsDestroyFillElementList(int nElms, PsElmPtr elms);
extern unsigned long
PsGetImagePixel(char *pImage, int depth, int w, int h, int leftPad, int format,
int px, int py);
#endif