#ifndef GFX_H
#define GFX_H
#include <config.h>
#ifdef USE_GCC_PRAGMAS
#pragma interface
#endif
#include "gtypes.h"
class GString;
class XRef;
class Array;
class Stream;
class Parser;
class Dict;
class OutputDev;
class GfxFontDict;
class GfxFont;
class GfxPattern;
class GfxTilingPattern;
class GfxShadingPattern;
class GfxShading;
class GfxFunctionShading;
class GfxAxialShading;
class GfxRadialShading;
class GfxGouraudTriangleShading;
class GfxPatchMeshShading;
struct GfxPatch;
class GfxState;
struct GfxColor;
class Gfx;
class PDFRectangle;
enum GfxClipType {
clipNone,
clipNormal,
clipEO
};
enum TchkType {
tchkBool, tchkInt, tchkNum, tchkString, tchkName, tchkArray, tchkProps, tchkSCN, tchkNone };
#define maxArgs 8
struct Operator {
char name[4];
int numArgs;
TchkType tchk[maxArgs];
void (Gfx::*func)(Object args[], int numArgs);
};
class GfxResources {
public:
GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA);
~GfxResources();
GfxFont *lookupFont(char *name);
GBool lookupXObject(char *name, Object *obj);
GBool lookupXObjectNF(char *name, Object *obj);
void lookupColorSpace(char *name, Object *obj);
GfxPattern *lookupPattern(char *name);
GfxShading *lookupShading(char *name);
GBool lookupGState(char *name, Object *obj);
GfxResources *getNext() { return next; }
private:
GfxFontDict *fonts;
Object xObjDict;
Object colorSpaceDict;
Object patternDict;
Object shadingDict;
Object gStateDict;
GfxResources *next;
};
class Gfx {
public:
Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict,
double hDPI, double vDPI, PDFRectangle *box,
PDFRectangle *cropBox, int rotate,
GBool (*abortCheckCbkA)(void *data) = NULL,
void *abortCheckCbkDataA = NULL);
Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict,
PDFRectangle *box, PDFRectangle *cropBox,
GBool (*abortCheckCbkA)(void *data) = NULL,
void *abortCheckCbkDataA = NULL);
~Gfx();
void display(Object *obj, GBool topLevel = gTrue);
void doAnnot(Object *str, double xMin, double yMin,
double xMax, double yMax);
void saveState();
void restoreState();
GfxState *getState() { return state; }
private:
XRef *xref; OutputDev *out; GBool subPage; GBool printCommands; GfxResources *res; int updateLevel;
GfxState *state; GBool fontChanged; GfxClipType clip; int ignoreUndef; double baseMatrix[6]; int formDepth;
Parser *parser;
GBool (*abortCheckCbk)(void *data);
void *abortCheckCbkData;
GBool renderThisPage;
static Operator opTab[];
void go(GBool topLevel);
void execOp(Object *cmd, Object args[], int numArgs);
Operator *findOp(char *name);
GBool checkArg(Object *arg, TchkType type);
int getPos();
void opSave(Object args[], int numArgs);
void opRestore(Object args[], int numArgs);
void opConcat(Object args[], int numArgs);
void opSetDash(Object args[], int numArgs);
void opSetFlat(Object args[], int numArgs);
void opSetLineJoin(Object args[], int numArgs);
void opSetLineCap(Object args[], int numArgs);
void opSetMiterLimit(Object args[], int numArgs);
void opSetLineWidth(Object args[], int numArgs);
void opSetExtGState(Object args[], int numArgs);
void opSetRenderingIntent(Object args[], int numArgs);
void opSetFillGray(Object args[], int numArgs);
void opSetStrokeGray(Object args[], int numArgs);
void opSetFillCMYKColor(Object args[], int numArgs);
void opSetStrokeCMYKColor(Object args[], int numArgs);
void opSetFillRGBColor(Object args[], int numArgs);
void opSetStrokeRGBColor(Object args[], int numArgs);
void opSetFillColorSpace(Object args[], int numArgs);
void opSetStrokeColorSpace(Object args[], int numArgs);
void opSetFillColor(Object args[], int numArgs);
void opSetStrokeColor(Object args[], int numArgs);
void opSetFillColorN(Object args[], int numArgs);
void opSetStrokeColorN(Object args[], int numArgs);
void opMoveTo(Object args[], int numArgs);
void opLineTo(Object args[], int numArgs);
void opCurveTo(Object args[], int numArgs);
void opCurveTo1(Object args[], int numArgs);
void opCurveTo2(Object args[], int numArgs);
void opRectangle(Object args[], int numArgs);
void opClosePath(Object args[], int numArgs);
void opEndPath(Object args[], int numArgs);
void opStroke(Object args[], int numArgs);
void opCloseStroke(Object args[], int numArgs);
void opFill(Object args[], int numArgs);
void opEOFill(Object args[], int numArgs);
void opFillStroke(Object args[], int numArgs);
void opCloseFillStroke(Object args[], int numArgs);
void opEOFillStroke(Object args[], int numArgs);
void opCloseEOFillStroke(Object args[], int numArgs);
void doPatternFill(GBool eoFill);
void doTilingPatternFill(GfxTilingPattern *tPat, GBool eoFill);
void doShadingPatternFill(GfxShadingPattern *sPat, GBool eoFill);
void opShFill(Object args[], int numArgs);
void doFunctionShFill(GfxFunctionShading *shading);
void doFunctionShFill1(GfxFunctionShading *shading,
double x0, double y0,
double x1, double y1,
GfxColor *colors, int depth);
void doAxialShFill(GfxAxialShading *shading);
void doRadialShFill(GfxRadialShading *shading);
void doGouraudTriangleShFill(GfxGouraudTriangleShading *shading);
void gouraudFillTriangle(double x0, double y0, GfxColor *color0,
double x1, double y1, GfxColor *color1,
double x2, double y2, GfxColor *color2,
int nComps, int depth);
void doPatchMeshShFill(GfxPatchMeshShading *shading);
void fillPatch(GfxPatch *patch, int nComps, int depth);
void doEndPath();
void opClip(Object args[], int numArgs);
void opEOClip(Object args[], int numArgs);
void opBeginText(Object args[], int numArgs);
void opEndText(Object args[], int numArgs);
void opSetCharSpacing(Object args[], int numArgs);
void opSetFont(Object args[], int numArgs);
void opSetTextLeading(Object args[], int numArgs);
void opSetTextRender(Object args[], int numArgs);
void opSetTextRise(Object args[], int numArgs);
void opSetWordSpacing(Object args[], int numArgs);
void opSetHorizScaling(Object args[], int numArgs);
void opTextMove(Object args[], int numArgs);
void opTextMoveSet(Object args[], int numArgs);
void opSetTextMatrix(Object args[], int numArgs);
void opTextNextLine(Object args[], int numArgs);
void opShowText(Object args[], int numArgs);
void opMoveShowText(Object args[], int numArgs);
void opMoveSetShowText(Object args[], int numArgs);
void opShowSpaceText(Object args[], int numArgs);
void doShowText(GString *s);
void opXObject(Object args[], int numArgs);
void doImage(Object *ref, Stream *str, GBool inlineImg);
void doForm(Object *str);
void doForm1(Object *str, Dict *resDict, double *matrix, double *bbox);
void opBeginImage(Object args[], int numArgs);
Stream *buildImageStream();
void opImageData(Object args[], int numArgs);
void opEndImage(Object args[], int numArgs);
void opSetCharWidth(Object args[], int numArgs);
void opSetCacheDevice(Object args[], int numArgs);
void opBeginIgnoreUndef(Object args[], int numArgs);
void opEndIgnoreUndef(Object args[], int numArgs);
void opBeginMarkedContent(Object args[], int numArgs);
void opEndMarkedContent(Object args[], int numArgs);
void opMarkPoint(Object args[], int numArgs);
void pushResources(Dict *resDict);
void popResources();
};
#endif