diff options
author | Martin Kretzschmar <mkretzschmar@src.gnome.org> | 2003-03-31 16:45:09 (GMT) |
---|---|---|
committer | Martin Kretzschmar <mkretzschmar@src.gnome.org> | 2003-03-31 16:45:09 (GMT) |
commit | 6112dfe4b45b0305c7a6f61bd8a847f69f892cbb (patch) | |
tree | f75410ae7f3554f92ac89c4a42a0a8bc2da53f57 /pdf/xpdf/XPixmapOutputDev.cc | |
parent | 0152000b294f88a4e659fdbce1ee7558ba29111a (diff) |
Initial revision
Diffstat (limited to 'pdf/xpdf/XPixmapOutputDev.cc')
-rw-r--r-- | pdf/xpdf/XPixmapOutputDev.cc | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/pdf/xpdf/XPixmapOutputDev.cc b/pdf/xpdf/XPixmapOutputDev.cc new file mode 100644 index 0000000..ecd1498 --- /dev/null +++ b/pdf/xpdf/XPixmapOutputDev.cc @@ -0,0 +1,84 @@ +//======================================================================== +// +// XPixmapOutputDev.cc +// +// Copyright 2002 Glyph & Cog, LLC +// +//======================================================================== + +#include <aconf.h> + +#ifdef USE_GCC_PRAGMAS +#pragma implementation +#endif + +#include "Object.h" +#include "GfxState.h" +#include "XPixmapOutputDev.h" + +//------------------------------------------------------------------------ + +#define xoutRound(x) ((int)(x + 0.5)) + +//------------------------------------------------------------------------ + +XPixmapOutputDev::XPixmapOutputDev(Display *displayA, int screenNumA, + Visual *visualA, Colormap colormapA, + GBool reverseVideoA, Gulong paperColorA, + GBool installCmapA, int rgbCubeSizeA, + GBool incrementalUpdateA, + void (*redrawCbkA)(void *data), + void *redrawCbkDataA): + XOutputDev(displayA, screenNumA, visualA, colormapA, + reverseVideoA, paperColorA, installCmapA, rgbCubeSizeA) +{ + incrementalUpdate = incrementalUpdateA; + redrawCbk = redrawCbkA; + redrawCbkData = redrawCbkDataA; +} + +XPixmapOutputDev::~XPixmapOutputDev() { + if (getPixmapWidth() > 0) { + XFreePixmap(getDisplay(), getPixmap()); + } +} + +void XPixmapOutputDev::clear() { + startDoc(NULL); + startPage(0, NULL); +} + +void XPixmapOutputDev::startPage(int pageNum, GfxState *state) { + int oldPixmapW, oldPixmapH, newPixmapW, newPixmapH; + + // resize the off-screen pixmap (if needed) + oldPixmapW = getPixmapWidth(); + oldPixmapH = getPixmapHeight(); + newPixmapW = xoutRound(state ? state->getPageWidth() : 1); + newPixmapH = xoutRound(state ? state->getPageHeight() : 1); + if (oldPixmapW == 0 || + newPixmapW != oldPixmapW || newPixmapH != oldPixmapH) { + if (oldPixmapW > 0) { + XFreePixmap(getDisplay(), getPixmap()); + } + setPixmap(XCreatePixmap(getDisplay(), win, newPixmapW, newPixmapH, + getDepth()), + newPixmapW, newPixmapH); + } + + XOutputDev::startPage(pageNum, state); +} + +void XPixmapOutputDev::endPage() { + if (!incrementalUpdate) { + (*redrawCbk)(redrawCbkData); + } + XOutputDev::endPage(); +} + +void XPixmapOutputDev::dump() { + if (incrementalUpdate) { + (*redrawCbk)(redrawCbkData); + } + XOutputDev::dump(); +} |