home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 110 / EnigmaAmiga110CD.iso / indispensabili / utility / apdf / xpdf-0.80 / xpdf / gfx.h < prev    next >
C/C++ Source or Header  |  1998-11-27  |  6KB  |  215 lines

  1. //========================================================================
  2. //
  3. // Gfx.h
  4. //
  5. // Copyright 1996 Derek B. Noonburg
  6. //
  7. //========================================================================
  8.  
  9. #ifndef GFX_H
  10. #define GFX_H
  11.  
  12. #ifdef __GNUC__
  13. #pragma interface
  14. #endif
  15.  
  16. #include "gtypes.h"
  17.  
  18. class GString;
  19. class Array;
  20. class Stream;
  21. class Parser;
  22. class Dict;
  23. class OutputDev;
  24. class GfxFontDict;
  25. class GfxFont;
  26. struct GfxFontEncoding16;
  27. class GfxState;
  28. class Gfx;
  29.  
  30. //------------------------------------------------------------------------
  31. // Gfx
  32. //------------------------------------------------------------------------
  33.  
  34. enum GfxClipType {
  35.   clipNone,
  36.   clipNormal,
  37.   clipEO
  38. };
  39.  
  40. enum TchkType {
  41.   tchkBool,            // boolean
  42.   tchkInt,            // integer
  43.   tchkNum,            // number (integer or real)
  44.   tchkString,            // string
  45.   tchkName,            // name
  46.   tchkArray,            // array
  47.   tchkProps,            // properties (dictionary or name)
  48.   tchkSCN,            // scn/SCN args (number of name)
  49.   tchkNone            // used to avoid empty initializer lists
  50. };
  51.  
  52. #define maxArgs 8
  53.  
  54. struct Operator {
  55.   char name[4];
  56.   int numArgs;
  57.   TchkType tchk[maxArgs];
  58.   void (Gfx::*func)(Object args[], int numArgs);
  59. };
  60.  
  61. class GfxResources {
  62. public:
  63.  
  64.   GfxResources(GfxResources *next1) { next = next1; }
  65.   ~GfxResources();
  66.  
  67.   GfxFontDict *fonts;
  68.   Object xObjDict;
  69.   Object colorSpaceDict;
  70.   GfxResources *next;
  71. };
  72.  
  73. class Gfx {
  74. public:
  75.  
  76.   // Constructor for regular output.
  77.   Gfx(OutputDev *out1, int pageNum, Dict *resDict,
  78.       int dpi, double x1, double y1, double x2, double y2, GBool crop,
  79.       double cropX1, double cropY1, double cropX2, double cropY2,
  80.       int rotate);
  81.  
  82.   // Destructor.
  83.   ~Gfx();
  84.  
  85.   // Interpret a stream or array of streams.
  86.   void display(Object *obj);
  87.  
  88. private:
  89.  
  90.   OutputDev *out;        // output device
  91.   GfxResources *res;        // resource stack
  92.  
  93.   GfxState *state;        // current graphics state
  94.   GBool fontChanged;        // set if font or text matrix has changed
  95.   GfxClipType clip;        // do a clip?
  96.   int ignoreUndef;        // current BX/EX nesting level
  97.  
  98.   Parser *parser;        // parser for page content stream(s)
  99.  
  100.   static Operator opTab[];    // table of operators
  101.  
  102.   void go();
  103.   void execOp(Object *cmd, Object args[], int numArgs);
  104.   Operator *findOp(char *name);
  105.   GBool checkArg(Object *arg, TchkType type);
  106.   int getPos();
  107.   GfxFont *lookupFont(char *name);
  108.   GBool lookupXObject(char *name, Object *obj);
  109.   void lookupColorSpace(char *name, Object *obj);
  110.  
  111.   // graphics state operators
  112.   void opSave(Object args[], int numArgs);
  113.   void opRestore(Object args[], int numArgs);
  114.   void opConcat(Object args[], int numArgs);
  115.   void opSetDash(Object args[], int numArgs);
  116.   void opSetFlat(Object args[], int numArgs);
  117.   void opSetLineJoin(Object args[], int numArgs);
  118.   void opSetLineCap(Object args[], int numArgs);
  119.   void opSetMiterLimit(Object args[], int numArgs);
  120.   void opSetLineWidth(Object args[], int numArgs);
  121.   void opSetExtGState(Object args[], int numArgs);
  122.  
  123.   // color operators
  124.   void opSetFillGray(Object args[], int numArgs);
  125.   void opSetStrokeGray(Object args[], int numArgs);
  126.   void opSetFillCMYKColor(Object args[], int numArgs);
  127.   void opSetStrokeCMYKColor(Object args[], int numArgs);
  128.   void opSetFillRGBColor(Object args[], int numArgs);
  129.   void opSetStrokeRGBColor(Object args[], int numArgs);
  130.   void opSetFillColorSpace(Object args[], int numArgs);
  131.   void opSetStrokeColorSpace(Object args[], int numArgs);
  132.   void opSetFillColor(Object args[], int numArgs);
  133.   void opSetStrokeColor(Object args[], int numArgs);
  134.   void opSetFillColorN(Object args[], int numArgs);
  135.   void opSetStrokeColorN(Object args[], int numArgs);
  136.  
  137.   // path segment operators
  138.   void opMoveTo(Object args[], int numArgs);
  139.   void opLineTo(Object args[], int numArgs);
  140.   void opCurveTo(Object args[], int numArgs);
  141.   void opCurveTo1(Object args[], int numArgs);
  142.   void opCurveTo2(Object args[], int numArgs);
  143.   void opRectangle(Object args[], int numArgs);
  144.   void opClosePath(Object args[], int numArgs);
  145.  
  146.   // path painting operators
  147.   void opEndPath(Object args[], int numArgs);
  148.   void opStroke(Object args[], int numArgs);
  149.   void opCloseStroke(Object args[], int numArgs);
  150.   void opFill(Object args[], int numArgs);
  151.   void opEOFill(Object args[], int numArgs);
  152.   void opFillStroke(Object args[], int numArgs);
  153.   void opCloseFillStroke(Object args[], int numArgs);
  154.   void opEOFillStroke(Object args[], int numArgs);
  155.   void opCloseEOFillStroke(Object args[], int numArgs);
  156.   void doEndPath();
  157.  
  158.   // path clipping operators
  159.   void opClip(Object args[], int numArgs);
  160.   void opEOClip(Object args[], int numArgs);
  161.  
  162.   // text object operators
  163.   void opBeginText(Object args[], int numArgs);
  164.   void opEndText(Object args[], int numArgs);
  165.  
  166.   // text state operators
  167.   void opSetCharSpacing(Object args[], int numArgs);
  168.   void opSetFont(Object args[], int numArgs);
  169.   void opSetTextLeading(Object args[], int numArgs);
  170.   void opSetTextRender(Object args[], int numArgs);
  171.   void opSetTextRise(Object args[], int numArgs);
  172.   void opSetWordSpacing(Object args[], int numArgs);
  173.   void opSetHorizScaling(Object args[], int numArgs);
  174.  
  175.   // text positioning operators
  176.   void opTextMove(Object args[], int numArgs);
  177.   void opTextMoveSet(Object args[], int numArgs);
  178.   void opSetTextMatrix(Object args[], int numArgs);
  179.   void opTextNextLine(Object args[], int numArgs);
  180.  
  181.   // text string operators
  182.   void opShowText(Object args[], int numArgs);
  183.   void opMoveShowText(Object args[], int numArgs);
  184.   void opMoveSetShowText(Object args[], int numArgs);
  185.   void opShowSpaceText(Object args[], int numArgs);
  186.   void doShowText(GString *s);
  187.   int getNextChar16(GfxFontEncoding16 *enc, Guchar *p, int *c16);
  188.  
  189.   // XObject operators
  190.   void opXObject(Object args[], int numArgs);
  191.   void doImage(Stream *str, GBool inlineImg);
  192.   void doForm(Object *str);
  193.  
  194.   // in-line image operators
  195.   void opBeginImage(Object args[], int numArgs);
  196.   Stream *buildImageStream();
  197.   void opImageData(Object args[], int numArgs);
  198.   void opEndImage(Object args[], int numArgs);
  199.  
  200.   // type 3 font operators
  201.   void opSetCharWidth(Object args[], int numArgs);
  202.   void opSetCacheDevice(Object args[], int numArgs);
  203.  
  204.   // compatibility operators
  205.   void opBeginIgnoreUndef(Object args[], int numArgs);
  206.   void opEndIgnoreUndef(Object args[], int numArgs);
  207.  
  208.   // marked content operators
  209.   void opBeginMarkedContent(Object args[], int numArgs);
  210.   void opEndMarkedContent(Object args[], int numArgs);
  211.   void opMarkPoint(Object args[], int numArgs);
  212. };
  213.  
  214. #endif
  215.