home *** CD-ROM | disk | FTP | other *** search
/ PSION CD 2 / PsionCDVol2.iso / Programs / 720 / PDF090B4-SorceCode / pdf / Gfx.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-30  |  7.2 KB  |  243 lines

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