Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pdf/xpdf/XOutputDev.h
diff options
context:
space:
mode:
authorArturo Espinosa <unammx@src.gnome.org>1999-04-17 02:59:58 (GMT)
committer Arturo Espinosa <unammx@src.gnome.org>1999-04-17 02:59:58 (GMT)
commitd9f9a6449f377b4c933b75d57541b19c6d088994 (patch)
tree04f7f0c54447ef792fbf83bc5039174f4681b3bb /pdf/xpdf/XOutputDev.h
Initial revision
Diffstat (limited to 'pdf/xpdf/XOutputDev.h')
-rw-r--r--pdf/xpdf/XOutputDev.h284
1 files changed, 284 insertions, 0 deletions
diff --git a/pdf/xpdf/XOutputDev.h b/pdf/xpdf/XOutputDev.h
new file mode 100644
index 0000000..4845421
--- /dev/null
+++ b/pdf/xpdf/XOutputDev.h
@@ -0,0 +1,284 @@
+//========================================================================
+//
+// XOutputDev.h
+//
+// Copyright 1996 Derek B. Noonburg
+//
+//========================================================================
+
+#ifndef XOUTPUTDEV_H
+#define XOUTPUTDEV_H
+
+#ifdef __GNUC__
+#pragma interface
+#endif
+
+#include <stddef.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include "config.h"
+#include "OutputDev.h"
+
+class GString;
+class GfxColor;
+class GfxFont;
+class GfxSubpath;
+class TextPage;
+struct RGBColor;
+
+//------------------------------------------------------------------------
+// Constants
+//------------------------------------------------------------------------
+
+#define maxRGBCube 8 // max size of RGB color cube
+
+#define numTmpPoints 256 // number of XPoints in temporary array
+#define numTmpSubpaths 16 // number of elements in temporary arrays
+ // for fill/clip
+
+//------------------------------------------------------------------------
+// Misc types
+//------------------------------------------------------------------------
+
+struct BoundingRect {
+ short xMin, xMax; // min/max x values
+ short yMin, yMax; // min/max y values
+};
+
+struct RGBColor {
+ double r, g, b;
+};
+
+//------------------------------------------------------------------------
+// Parameters
+//------------------------------------------------------------------------
+
+// Install a private colormap.
+extern GBool installCmap;
+
+// Size of RGB color cube.
+extern int rgbCubeSize;
+
+//------------------------------------------------------------------------
+// XOutputFont
+//------------------------------------------------------------------------
+
+class XOutputFont {
+public:
+
+ // Constructor.
+ XOutputFont(GfxFont *gfxFont, double m11, double m12,
+ double m21, double m22, Display *display1);
+
+ // Destructor.
+ ~XOutputFont();
+
+ // Does this font match the ID, size, and angle?
+ GBool matches(Ref id1, double m11, double m12, double m21, double m22)
+ { return id.num == id1.num && id.gen == id1.gen &&
+ mat11 == m11 && mat12 == m12 && mat21 == m21 && mat22 == m22; }
+
+ // Get X font.
+ XFontStruct *getXFont() { return xFont; }
+
+ // Get character mapping.
+ Gushort mapChar(Guchar c) { return map[c]; }
+
+ // Reverse map a character.
+ Guchar revMapChar(Gushort c) { return revMap[c]; }
+
+ // Does this font use hex char codes?
+ GBool isHex() { return hex; }
+
+private:
+
+ Ref id;
+ double mat11, mat12, mat21, mat22;
+ Display *display;
+ XFontStruct *xFont;
+ GBool hex; // subsetted font with hex char codes
+ Gushort map[256];
+ Guchar revMap[256];
+};
+
+//------------------------------------------------------------------------
+// XOutputFontCache
+//------------------------------------------------------------------------
+
+class XOutputFontCache {
+public:
+
+ // Constructor.
+ XOutputFontCache(Display *display1);
+
+ // Destructor.
+ ~XOutputFontCache();
+
+ // Get a font. This creates a new font if necessary.
+ XOutputFont *getFont(GfxFont *gfxFont, double m11, double m12,
+ double m21, double m22);
+
+private:
+
+ Display *display; // X display pointer
+ XOutputFont * // fonts in reverse-LRU order
+ fonts[fontCacheSize];
+ int numFonts; // number of valid entries
+};
+
+//------------------------------------------------------------------------
+// XOutputState
+//------------------------------------------------------------------------
+
+struct XOutputState {
+ GC strokeGC;
+ GC fillGC;
+ Region clipRegion;
+ XOutputState *next;
+};
+
+//------------------------------------------------------------------------
+// XOutputDev
+//------------------------------------------------------------------------
+
+class XOutputDev: public OutputDev {
+public:
+
+ // Constructor.
+ XOutputDev(Display *display1, Pixmap pixmap1, Guint depth1,
+ Colormap colormap, unsigned long paperColor);
+
+ // Destructor.
+ virtual ~XOutputDev();
+
+ //---- get info about output device
+
+ // Does this device use upside-down coordinates?
+ // (Upside-down means (0,0) is the top left corner of the page.)
+ virtual GBool upsideDown() { return gTrue; }
+
+ // Does this device use drawChar() or drawString()?
+ virtual GBool useDrawChar() { return gTrue; }
+
+ //----- initialization and control
+
+ // Start a page.
+ virtual void startPage(int pageNum, GfxState *state);
+
+ // End a page.
+ virtual void endPage();
+
+ //----- link borders
+ virtual void drawLinkBorder(double x1, double y1, double x2, double y2,
+ double w);
+
+ //----- save/restore graphics state
+ virtual void saveState(GfxState *state);
+ virtual void restoreState(GfxState *state);
+
+ //----- update graphics state
+ virtual void updateAll(GfxState *state);
+ virtual void updateCTM(GfxState *state, double m11, double m12,
+ double m21, double m22, double m31, double m32);
+ virtual void updateLineDash(GfxState *state);
+ virtual void updateFlatness(GfxState *state);
+ virtual void updateLineJoin(GfxState *state);
+ virtual void updateLineCap(GfxState *state);
+ virtual void updateMiterLimit(GfxState *state);
+ virtual void updateLineWidth(GfxState *state);
+ virtual void updateFillColor(GfxState *state);
+ virtual void updateStrokeColor(GfxState *state);
+
+ //----- update text state
+ virtual void updateFont(GfxState *state);
+
+ //----- path painting
+ virtual void stroke(GfxState *state);
+ virtual void fill(GfxState *state);
+ virtual void eoFill(GfxState *state);
+
+ //----- path clipping
+ virtual void clip(GfxState *state);
+ virtual void eoClip(GfxState *state);
+
+ //----- text drawing
+ virtual void beginString(GfxState *state, GString *s);
+ virtual void endString(GfxState *state);
+ virtual void drawChar(GfxState *state, double x, double y,
+ double dx, double dy, Guchar c);
+ virtual void drawChar16(GfxState *state, double x, double y,
+ double dx, double dy, int c);
+
+ //----- image drawing
+ virtual void drawImageMask(GfxState *state, Stream *str,
+ int width, int height, GBool invert,
+ GBool inlineImg);
+ virtual void drawImage(GfxState *state, Stream *str, int width,
+ int height, GfxImageColorMap *colorMap,
+ GBool inlineImg);
+
+ //----- special access
+
+ // Find a string. If <top> is true, starts looking at <xMin>,<yMin>;
+ // otherwise starts looking at top of page. If <bottom> is true,
+ // stops looking at <xMax>,<yMax>; otherwise stops looking at bottom
+ // of page. If found, sets the text bounding rectange and returns
+ // true; otherwise returns false.
+ GBool findText(char *s, GBool top, GBool bottom,
+ int *xMin, int *yMin, int *xMax, int *yMax);
+
+ // Get the text which is inside the specified rectangle.
+ GString *getText(int xMin, int yMin, int xMax, int yMax);
+
+protected:
+
+ // Update pixmap ID after a page change.
+ void setPixmap(Pixmap pixmap1, int pixmapW1, int pixmapH1)
+ { pixmap = pixmap1; pixmapW = pixmapW1; pixmapH = pixmapH1; }
+
+private:
+
+ Display *display; // X display pointer
+ int screenNum; // X screen number
+ Pixmap pixmap; // pixmap to draw into
+ int pixmapW, pixmapH; // size of pixmap
+ Guint depth; // pixmap depth
+ int flatness; // line flatness
+ GC paperGC; // GC for background
+ GC strokeGC; // GC with stroke color
+ GC fillGC; // GC with fill color
+ Region clipRegion; // clipping region
+ GBool trueColor; // set if using a TrueColor visual
+ int rMul, gMul, bMul; // RGB multipliers (for TrueColor)
+ int rShift, gShift, bShift; // RGB shifts (for TrueColor)
+ Gulong // color cube
+ colors[maxRGBCube * maxRGBCube * maxRGBCube];
+ int numColors; // size of color cube
+ XPoint // temporary points array
+ tmpPoints[numTmpPoints];
+ int // temporary arrays for fill/clip
+ tmpLengths[numTmpSubpaths];
+ BoundingRect
+ tmpRects[numTmpSubpaths];
+ GfxFont *gfxFont; // current PDF font
+ XOutputFont *font; // current font
+ XOutputFontCache *fontCache; // font cache
+ XOutputState *save; // stack of saved states
+ TextPage *text; // text from the current page
+
+ void updateLineAttrs(GfxState *state, GBool updateDash);
+ void doFill(GfxState *state, int rule);
+ void doClip(GfxState *state, int rule);
+ int convertPath(GfxState *state, XPoint **points, int *size,
+ int *numPoints, int **lengths, GBool fillHack);
+ void convertSubpath(GfxState *state, GfxSubpath *subpath,
+ XPoint **points, int *size, int *n);
+ void doCurve(XPoint **points, int *size, int *k,
+ double x0, double y0, double x1, double y1,
+ double x2, double y2, double x3, double y3);
+ void addPoint(XPoint **points, int *size, int *k, int x, int y);
+ Gulong findColor(GfxColor *color);
+ Gulong findColor(RGBColor *x, RGBColor *err);
+};
+
+#endif