diff options
author | Martin Kretzschmar <mkretzschmar@src.gnome.org> | 2004-05-16 22:45:42 (GMT) |
---|---|---|
committer | Martin Kretzschmar <mkretzschmar@src.gnome.org> | 2004-05-16 22:45:42 (GMT) |
commit | ad63666daeeda50acc7630132d61fe044634fddd (patch) | |
tree | 487b52b30f8a563cbb2e16c6fd2527a6eeb5990f /pdf/xpdf/Page.cc | |
parent | d57c02ebc09bfd1a0cac44140ec7a80dbe43877e (diff) |
Imported Xpdf 2.03 and fixed build.
* ANNOUNCE:
* CHANGES:
* README:
* aconf2.h:
* configure.in:
* dj_make.bat:
* doc/pdffonts.1:
* doc/pdffonts.cat:
* doc/pdffonts.hlp:
* doc/pdfimages.1:
* doc/pdfimages.cat:
* doc/pdfimages.hlp:
* doc/pdfinfo.1:
* doc/pdfinfo.cat:
* doc/pdfinfo.hlp:
* doc/pdftopbm.1:
* doc/pdftopbm.cat:
* doc/pdftopbm.hlp:
* doc/pdftops.1:
* doc/pdftops.cat:
* doc/pdftops.hlp:
* doc/pdftotext.1:
* doc/pdftotext.cat:
* doc/pdftotext.hlp:
* doc/xpdf.1:
* doc/xpdf.cat:
* doc/xpdf.hlp:
* doc/xpdfrc.5:
* doc/xpdfrc.cat:
* doc/xpdfrc.hlp:
* goo/gfile.cc:
* ms_make.bat:
* vms_make.com:
* xpdf/Annot.cc:
* xpdf/Array.cc:
* xpdf/BuiltinFontTables.cc:
* xpdf/CMap.cc:
* xpdf/CMap.h:
* xpdf/Catalog.cc:
* xpdf/CharCodeToUnicode.cc:
* xpdf/CharCodeToUnicode.h:
* xpdf/Decrypt.cc:
* xpdf/Dict.cc:
* xpdf/ErrorCodes.h:
* xpdf/FTFont.cc:
* xpdf/FTFont.h:
* xpdf/FontFile.cc:
* xpdf/FontFile.h:
* xpdf/Function.cc:
* xpdf/Gfx.cc:
* xpdf/Gfx.h:
* xpdf/GfxFont.cc:
* xpdf/GfxFont.h:
* xpdf/GfxState.cc:
* xpdf/GfxState.h:
* xpdf/GlobalParams.cc:
* xpdf/GlobalParams.h:
* xpdf/JBIG2Stream.cc:
* xpdf/Link.cc:
* xpdf/Link.h:
* xpdf/Makefile.am:
* xpdf/OutputDev.h:
* xpdf/PDFDoc.cc:
* xpdf/PDFDoc.h:
* xpdf/PSOutputDev.cc:
* xpdf/PSOutputDev.h:
* xpdf/Page.cc:
* xpdf/Page.h:
* xpdf/Parser.cc:
* xpdf/Stream.cc:
* xpdf/Stream.h:
* xpdf/TTFont.cc:
* xpdf/TTFont.h:
* xpdf/TextOutputDev.cc:
* xpdf/TextOutputDev.h:
* xpdf/UnicodeMap.cc:
* xpdf/UnicodeMap.h:
* xpdf/UnicodeTypeTable.cc:
* xpdf/UnicodeTypeTable.h:
* xpdf/XOutputDev.cc:
* xpdf/XOutputDev.h:
* xpdf/XPDFApp.cc:
* xpdf/XPDFCore.cc:
* xpdf/XPDFCore.h:
* xpdf/XPDFViewer.cc:
* xpdf/XPDFViewer.h:
* xpdf/XRef.cc:
* xpdf/about-text.h:
* xpdf/config.h:
* xpdf/gpdf-control.cc:
* xpdf/gpdf-link-canvas-item.cc:
* xpdf/gpdf-links-canvas-layer.cc:
* xpdf/pdffonts.cc:
* xpdf/pdfimages.cc:
* xpdf/pdfinfo.cc:
* xpdf/pdftopbm.cc:
* xpdf/pdftops.cc:
* xpdf/pdftotext.cc:
* xpdf/tests/test-links.cc:
* xpdf/vms_make.com:
* xpdf/xpdf.cc: Imported Xpdf 2.03 and fixed build.
Diffstat (limited to 'pdf/xpdf/Page.cc')
-rw-r--r-- | pdf/xpdf/Page.cc | 74 |
1 files changed, 41 insertions, 33 deletions
diff --git a/pdf/xpdf/Page.cc b/pdf/xpdf/Page.cc index c7a1e13..e12e65c 100644 --- a/pdf/xpdf/Page.cc +++ b/pdf/xpdf/Page.cc @@ -59,8 +59,12 @@ PageAttrs::PageAttrs(PageAttrs *attrs, Dict *dict) { readBox(dict, "MediaBox", &mediaBox); // crop box - cropBox = mediaBox; - haveCropBox = readBox(dict, "CropBox", &cropBox); + if (readBox(dict, "CropBox", &cropBox)) { + haveCropBox = gTrue; + } + if (!haveCropBox) { + cropBox = mediaBox; + } // if the MediaBox is excessively larger than the CropBox, // just use the CropBox @@ -222,18 +226,18 @@ Page::~Page() { contents.free(); } -void Page::display(OutputDev *out, double dpi, int rotate, +void Page::display(OutputDev *out, double hDPI, double vDPI, int rotate, Links *links, Catalog *catalog, GBool (*abortCheckCbk)(void *data), void *abortCheckCbkData, GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data), void *annotDisplayDecideCbkData) { - displaySlice(out, dpi, rotate, -1, -1, -1, -1, links, catalog, + displaySlice(out, hDPI, vDPI, rotate, -1, -1, -1, -1, links, catalog, abortCheckCbk, abortCheckCbkData, annotDisplayDecideCbk, annotDisplayDecideCbkData); } -void Page::displaySlice(OutputDev *out, double dpi, int rotate, +void Page::displaySlice(OutputDev *out, double hDPI, double vDPI, int rotate, int sliceX, int sliceY, int sliceW, int sliceH, Links *links, Catalog *catalog, GBool (*abortCheckCbk)(void *data), @@ -247,7 +251,7 @@ void Page::displaySlice(OutputDev *out, double dpi, int rotate, Object obj; Link *link; Annots *annotList; - double k; + double kx, ky; int i; rotate += getRotate(); @@ -259,46 +263,47 @@ void Page::displaySlice(OutputDev *out, double dpi, int rotate, mediaBox = getBox(); if (sliceW >= 0 && sliceH >= 0) { - k = 72.0 / dpi; + kx = 72.0 / hDPI; + ky = 72.0 / vDPI; if (rotate == 90) { if (out->upsideDown()) { - box.x1 = mediaBox->x1 + k * sliceY; - box.x2 = mediaBox->x1 + k * (sliceY + sliceH); + box.x1 = mediaBox->x1 + ky * sliceY; + box.x2 = mediaBox->x1 + ky * (sliceY + sliceH); } else { - box.x1 = mediaBox->x2 - k * (sliceY + sliceH); - box.x2 = mediaBox->x2 - k * sliceY; + box.x1 = mediaBox->x2 - ky * (sliceY + sliceH); + box.x2 = mediaBox->x2 - ky * sliceY; } - box.y1 = mediaBox->y1 + k * sliceX; - box.y2 = mediaBox->y1 + k * (sliceX + sliceW); + box.y1 = mediaBox->y1 + kx * sliceX; + box.y2 = mediaBox->y1 + kx * (sliceX + sliceW); } else if (rotate == 180) { - box.x1 = mediaBox->x2 - k * (sliceX + sliceW); - box.x2 = mediaBox->x2 - k * sliceX; + box.x1 = mediaBox->x2 - kx * (sliceX + sliceW); + box.x2 = mediaBox->x2 - kx * sliceX; if (out->upsideDown()) { - box.y1 = mediaBox->y1 + k * sliceY; - box.y2 = mediaBox->y1 + k * (sliceY + sliceH); + box.y1 = mediaBox->y1 + ky * sliceY; + box.y2 = mediaBox->y1 + ky * (sliceY + sliceH); } else { - box.y1 = mediaBox->y2 - k * (sliceY + sliceH); - box.y2 = mediaBox->y2 - k * sliceY; + box.y1 = mediaBox->y2 - ky * (sliceY + sliceH); + box.y2 = mediaBox->y2 - ky * sliceY; } } else if (rotate == 270) { if (out->upsideDown()) { - box.x1 = mediaBox->x2 - k * (sliceY + sliceH); - box.x2 = mediaBox->x2 - k * sliceY; + box.x1 = mediaBox->x2 - ky * (sliceY + sliceH); + box.x2 = mediaBox->x2 - ky * sliceY; } else { - box.x1 = mediaBox->x1 + k * sliceY; - box.x2 = mediaBox->x1 + k * (sliceY + sliceH); + box.x1 = mediaBox->x1 + ky * sliceY; + box.x2 = mediaBox->x1 + ky * (sliceY + sliceH); } - box.y1 = mediaBox->y2 - k * (sliceX + sliceW); - box.y2 = mediaBox->y2 - k * sliceX; + box.y1 = mediaBox->y2 - kx * (sliceX + sliceW); + box.y2 = mediaBox->y2 - kx * sliceX; } else { - box.x1 = mediaBox->x1 + k * sliceX; - box.x2 = mediaBox->x1 + k * (sliceX + sliceW); + box.x1 = mediaBox->x1 + kx * sliceX; + box.x2 = mediaBox->x1 + kx * (sliceX + sliceW); if (out->upsideDown()) { - box.y1 = mediaBox->y2 - k * (sliceY + sliceH); - box.y2 = mediaBox->y2 - k * sliceY; + box.y1 = mediaBox->y2 - ky * (sliceY + sliceH); + box.y2 = mediaBox->y2 - ky * sliceY; } else { - box.y1 = mediaBox->y1 + k * sliceY; - box.y2 = mediaBox->y1 + k * (sliceY + sliceH); + box.y1 = mediaBox->y1 + ky * sliceY; + box.y2 = mediaBox->y1 + ky * (sliceY + sliceH); } } } else { @@ -317,25 +322,28 @@ void Page::displaySlice(OutputDev *out, double dpi, int rotate, } gfx = new Gfx(xref, out, num, attrs->getResourceDict(), - dpi, &box, isCropped(), cropBox, rotate, + hDPI, vDPI, &box, isCropped(), cropBox, rotate, abortCheckCbk, abortCheckCbkData); contents.fetch(xref, &obj); if (!obj.isNull()) { + gfx->saveState(); gfx->display(&obj); + gfx->restoreState(); } obj.free(); // draw links if (links) { + gfx->saveState(); for (i = 0; i < links->getNumLinks(); ++i) { link = links->getLink(i); out->drawLink(link, catalog); } + gfx->restoreState(); out->dump(); } // draw non-link annotations - //~ need to reset CTM ??? annotList = new Annots(xref, annots.fetch(xref, &obj)); obj.free(); #ifdef USE_ANNOTS_VIEW |