Commit 7d794f64 authored by Albert Astals Cid's avatar Albert Astals Cid

xpdf303: API rework, Gfx wants a PDFDoc instead of an XRef

parent 52fb80a7
......@@ -175,7 +175,7 @@ image page_renderer::render_page(const page *p,
SplashOutputDev splashOutputDev(splashModeXBGR8, 4, gFalse, bgColor, gTrue, text_AA);
splashOutputDev.setVectorAntialias(d->hints & antialiasing ? gTrue : gFalse);
splashOutputDev.setFreeTypeHinting(d->hints & text_hinting ? gTrue : gFalse, gFalse);
splashOutputDev.startDoc(pdfdoc->getXRef());
splashOutputDev.startDoc(pdfdoc);
pdfdoc->displayPageSlice(&splashOutputDev, pp->index + 1,
xres, yres, int(rotate) * 90,
gFalse, gTrue, gFalse,
......
......@@ -127,7 +127,7 @@ _poppler_document_new_from_pdfdoc (PDFDoc *newDoc,
document->doc = newDoc;
document->output_dev = new CairoOutputDev ();
document->output_dev->startDoc(document->doc->getXRef (), document->doc->getCatalog ());
document->output_dev->startDoc(document->doc);
return document;
}
......
......@@ -1063,8 +1063,6 @@ poppler_page_render_to_ps (PopplerPage *page,
if (!ps_file->out)
ps_file->out = new PSOutputDev (ps_file->filename,
ps_file->document->doc,
ps_file->document->doc->getXRef(),
ps_file->document->doc->getCatalog(),
NULL,
ps_file->first_page, ps_file->last_page,
psModePS, (int)ps_file->paper_width,
......
......@@ -565,8 +565,7 @@ static const cairo_user_data_key_t type3_font_key = {0};
typedef struct _type3_font_info {
GfxFont *font;
XRef *xref;
Catalog *catalog;
PDFDoc *doc;
CairoFontEngine *fontEngine;
GBool printing;
} type3_font_info_t;
......@@ -631,8 +630,8 @@ _render_type3_glyph (cairo_scaled_font_t *scaled_font,
box.y1 = mat[1];
box.x2 = mat[2];
box.y2 = mat[3];
gfx = new Gfx(info->xref, output_dev, resDict, info->catalog, &box, NULL);
output_dev->startDoc(info->xref, info->catalog, info->fontEngine);
gfx = new Gfx(info->doc, output_dev, resDict, &box, NULL);
output_dev->startDoc(info->doc, info->fontEngine);
output_dev->startPage (1, gfx->getState());
output_dev->setInType3Char(gTrue);
gfx->display(charProcs->getVal(glyph, &charProc));
......@@ -660,8 +659,8 @@ _render_type3_glyph (cairo_scaled_font_t *scaled_font,
}
CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, XRef *xref,
Catalog *catalog, CairoFontEngine *fontEngine,
CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, PDFDoc *doc,
CairoFontEngine *fontEngine,
GBool printing) {
Object refObj, strObj;
type3_font_info_t *info;
......@@ -681,8 +680,7 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, XRef *xref,
cairo_user_font_face_set_render_glyph_func (font_face, _render_type3_glyph);
gfxFont->incRefCnt();
info->font = gfxFont;
info->xref = xref;
info->catalog = catalog;
info->doc = doc;
info->fontEngine = fontEngine;
info->printing = printing;
......@@ -702,12 +700,11 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, XRef *xref,
}
}
return new CairoType3Font(ref, xref, catalog, font_face, codeToGID, codeToGIDLen, printing);
return new CairoType3Font(ref, doc, font_face, codeToGID, codeToGIDLen, printing);
}
CairoType3Font::CairoType3Font(Ref ref,
XRef *xref,
Catalog *catalog,
PDFDoc *doc,
cairo_font_face_t *cairo_font_face,
int *codeToGID,
Guint codeToGIDLen,
......@@ -717,8 +714,7 @@ CairoType3Font::CairoType3Font(Ref ref,
codeToGIDLen,
gFalse,
printing),
xref(xref),
catalog(catalog) { }
doc(doc) { }
CairoType3Font::~CairoType3Font() { }
......@@ -757,7 +753,7 @@ CairoFontEngine::~CairoFontEngine() {
}
CairoFont *
CairoFontEngine::getFont(GfxFont *gfxFont, XRef *xref, Catalog *catalog, GBool printing) {
CairoFontEngine::getFont(GfxFont *gfxFont, PDFDoc *doc, GBool printing) {
int i, j;
Ref ref;
CairoFont *font;
......@@ -778,9 +774,9 @@ CairoFontEngine::getFont(GfxFont *gfxFont, XRef *xref, Catalog *catalog, GBool p
fontType = gfxFont->getType();
if (fontType == fontType3)
font = CairoType3Font::create (gfxFont, xref, catalog, this, printing);
font = CairoType3Font::create (gfxFont, doc, this, printing);
else
font = CairoFreeTypeFont::create (gfxFont, xref, lib, useCIDs);
font = CairoFreeTypeFont::create (gfxFont, doc->getXRef(), lib, useCIDs);
//XXX: if font is null should we still insert it into the cache?
if (fontCache[cairoFontCacheSize - 1]) {
......
......@@ -36,7 +36,7 @@
#include <cairo-ft.h>
#include "GfxFont.h"
#include "Catalog.h"
#include "PDFDoc.h"
class CairoFontEngine;
......@@ -83,20 +83,19 @@ private:
class CairoType3Font : public CairoFont {
public:
static CairoType3Font *create(GfxFont *gfxFont, XRef *xref,
Catalog *catalog, CairoFontEngine *fontEngine,
static CairoType3Font *create(GfxFont *gfxFont, PDFDoc *doc,
CairoFontEngine *fontEngine,
GBool printing);
virtual ~CairoType3Font();
virtual GBool matches(Ref &other, GBool printing);
private:
CairoType3Font(Ref ref, XRef *xref, Catalog *catalog,
CairoType3Font(Ref ref, PDFDoc *doc,
cairo_font_face_t *cairo_font_face,
int *codeToGID, Guint codeToGIDLen,
GBool printing);
XRef *xref;
Catalog *catalog;
PDFDoc *doc;
};
//------------------------------------------------------------------------
......@@ -114,7 +113,7 @@ public:
CairoFontEngine(FT_Library libA);
~CairoFontEngine();
CairoFont *getFont(GfxFont *gfxFont, XRef *xref, Catalog *catalog, GBool printing);
CairoFont *getFont(GfxFont *gfxFont, PDFDoc *doc, GBool printing);
private:
CairoFont *fontCache[cairoFontCacheSize];
......
......@@ -115,8 +115,7 @@ FT_Library CairoOutputDev::ft_lib;
GBool CairoOutputDev::ft_lib_initialized = gFalse;
CairoOutputDev::CairoOutputDev() {
xref = NULL;
catalog = NULL;
doc = NULL;
if (!ft_lib_initialized) {
FT_Init_FreeType(&ft_lib);
......@@ -219,10 +218,9 @@ void CairoOutputDev::setTextPage(TextPage *text)
}
}
void CairoOutputDev::startDoc(XRef *xrefA, Catalog *catalogA,
void CairoOutputDev::startDoc(PDFDoc *docA,
CairoFontEngine *parentFontEngine) {
xref = xrefA;
catalog = catalogA;
doc = docA;
if (parentFontEngine) {
fontEngine = parentFontEngine;
} else {
......@@ -595,7 +593,7 @@ void CairoOutputDev::updateFont(GfxState *state) {
if (text)
text->updateFont(state);
currentFont = fontEngine->getFont (state->getFont(), xref, catalog, printing);
currentFont = fontEngine->getFont (state->getFont(), doc, printing);
if (!currentFont)
return;
......@@ -794,7 +792,7 @@ GBool CairoOutputDev::tilingPatternFill(GfxState *state, Catalog *cat, Object *s
box.x2 = bbox[2]; box.y2 = bbox[3];
strokePathTmp = strokePathClip;
strokePathClip = NULL;
gfx = new Gfx(xref, this, resDict, catalog, &box, NULL);
gfx = new Gfx(doc, this, resDict, &box, NULL);
gfx->display(str);
delete gfx;
strokePathClip = strokePathTmp;
......
......@@ -40,6 +40,7 @@
#include "TextOutputDev.h"
#include "GfxState.h"
class PDFDoc;
class GfxState;
class GfxPath;
class Gfx8BitFont;
......@@ -259,7 +260,7 @@ public:
//----- special access
// Called to indicate that a new PDF document has been loaded.
void startDoc(XRef *xrefA, Catalog *catalogA, CairoFontEngine *fontEngine = NULL);
void startDoc(PDFDoc *docA, CairoFontEngine *fontEngine = NULL);
GBool isReverseVideo() { return gFalse; }
......@@ -305,8 +306,7 @@ protected:
double miter;
} *strokePathClip;
XRef *xref; // xref table for current document
Catalog *catalog;
PDFDoc *doc; // the current document
static FT_Library ft_lib;
static GBool ft_lib_initialized;
......
......@@ -40,6 +40,7 @@
#include <stdlib.h>
#include "goo/gmem.h"
#include "Object.h"
#include "PDFDoc.h"
#include "XRef.h"
#include "Array.h"
#include "Dict.h"
......@@ -57,13 +58,14 @@
// Catalog
//------------------------------------------------------------------------
Catalog::Catalog(XRef *xrefA) {
Catalog::Catalog(PDFDoc *docA) {
Object catDict, pagesDict, pagesDictRef;
Object obj, obj2;
Object optContentProps;
ok = gTrue;
xref = xrefA;
doc = docA;
xref = doc->getXRef();
pages = NULL;
pageRefs = NULL;
numPages = -1;
......@@ -355,7 +357,7 @@ GBool Catalog::cachePageTree(int page)
kids.free();
if (kid.isDict("Page") || (kid.isDict() && !kid.getDict()->hasKey("Kids"))) {
PageAttrs *attrs = new PageAttrs(attrsList->back(), kid.getDict());
Page *p = new Page(xref, lastCachedPage+1, kid.getDict(),
Page *p = new Page(doc, lastCachedPage+1, kid.getDict(),
kidRef.getRef(), attrs, form);
if (!p->isOk()) {
error(errSyntaxError, -1, "Failed to create page (page {0:d})", lastCachedPage+1);
......
......@@ -37,6 +37,7 @@
#include <vector>
class PDFDoc;
class XRef;
class Object;
class Page;
......@@ -93,7 +94,7 @@ class Catalog {
public:
// Constructor.
Catalog(XRef *xrefA);
Catalog(PDFDoc *docA);
// Destructor.
~Catalog();
......@@ -185,6 +186,7 @@ private:
// Get page label info.
PageLabelInfo *getPageLabelInfo();
PDFDoc *doc;
XRef *xref; // the xref table for this PDF file
Page **pages; // array of pages
Ref *pageRefs; // object ID for each page
......
......@@ -56,6 +56,7 @@
#include "GlobalParams.h"
#include "CharTypes.h"
#include "Object.h"
#include "PDFDoc.h"
#include "Array.h"
#include "Dict.h"
#include "Stream.h"
......@@ -525,7 +526,7 @@ GBool GfxResources::lookupGStateNF(char *name, Object *obj) {
// Gfx
//------------------------------------------------------------------------
Gfx::Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *catalogA,
Gfx::Gfx(PDFDoc *docA, OutputDev *outA, int pageNum, Dict *resDict,
double hDPI, double vDPI, PDFRectangle *box,
PDFRectangle *cropBox, int rotate,
GBool (*abortCheckCbkA)(void *data),
......@@ -536,8 +537,9 @@ Gfx::Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *cata
{
int i;
xref = xrefA;
catalog = catalogA;
doc = docA;
xref = doc->getXRef();
catalog = doc->getCatalog();
subPage = gFalse;
printCommands = globalParams->getPrintCommands();
profileCommands = globalParams->getProfileCommands();
......@@ -581,7 +583,7 @@ Gfx::Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *cata
}
}
Gfx::Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalogA,
Gfx::Gfx(PDFDoc *docA, OutputDev *outA, Dict *resDict,
PDFRectangle *box, PDFRectangle *cropBox,
GBool (*abortCheckCbkA)(void *data),
void *abortCheckCbkDataA)
......@@ -591,8 +593,9 @@ Gfx::Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalogA,
{
int i;
xref = xrefA;
catalog = catalogA;
doc = docA;
xref = doc->getXRef();
catalog = doc->getCatalog();
subPage = gTrue;
printCommands = globalParams->getPrintCommands();
profileCommands = globalParams->getProfileCommands();
......
......@@ -44,6 +44,7 @@
#include <vector>
class GooString;
class PDFDoc;
class XRef;
class Array;
class Stream;
......@@ -143,14 +144,14 @@ class Gfx {
public:
// Constructor for regular output.
Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, Catalog *catalog,
Gfx(PDFDoc *docA, OutputDev *outA, int pageNum, Dict *resDict,
double hDPI, double vDPI, PDFRectangle *box,
PDFRectangle *cropBox, int rotate,
GBool (*abortCheckCbkA)(void *data) = NULL,
void *abortCheckCbkDataA = NULL);
// Constructor for a sub-page object.
Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, Catalog *catalog,
Gfx(PDFDoc *docA, OutputDev *outA, Dict *resDict,
PDFRectangle *box, PDFRectangle *cropBox,
GBool (*abortCheckCbkA)(void *data) = NULL,
void *abortCheckCbkDataA = NULL);
......@@ -189,6 +190,7 @@ public:
private:
PDFDoc *doc;
XRef *xref; // the xref table for this PDF file
Catalog *catalog; // the Catalog for this PDF file
OutputDev *out; // output device
......
......@@ -256,7 +256,7 @@ GBool PDFDoc::setup(GooString *ownerPassword, GooString *userPassword) {
}
// read catalog
catalog = new Catalog(xref);
catalog = new Catalog(this);
if (catalog && !catalog->isOk()) {
if (!wasReconstructed)
{
......@@ -264,7 +264,7 @@ GBool PDFDoc::setup(GooString *ownerPassword, GooString *userPassword) {
delete catalog;
delete xref;
xref = new XRef(str, 0, 0, NULL, true);
catalog = new Catalog(xref);
catalog = new Catalog(this);
}
if (catalog && !catalog->isOk()) {
......@@ -1490,7 +1490,7 @@ Page *PDFDoc::parsePage(int page)
}
pageDict = obj.getDict();
p = new Page(xref, page, pageDict, pageRef,
p = new Page(this, page, pageDict, pageRef,
new PageAttrs(NULL, pageDict), catalog->getForm());
obj.free();
......
......@@ -994,7 +994,7 @@ static void outputToFile(void *stream, const char *data, int len) {
fwrite(data, 1, len, (FILE *)stream);
}
PSOutputDev::PSOutputDev(const char *fileName, PDFDoc *doc, XRef *xrefA, Catalog *catalog,
PSOutputDev::PSOutputDev(const char *fileName, PDFDoc *doc,
char *psTitle,
int firstPage, int lastPage, PSOutMode modeA,
int paperWidthA, int paperHeightA, GBool duplexA,
......@@ -1055,7 +1055,7 @@ PSOutputDev::PSOutputDev(const char *fileName, PDFDoc *doc, XRef *xrefA, Catalog
}
init(outputToFile, f, fileTypeA, psTitle,
doc, xrefA, catalog, firstPage, lastPage, modeA,
doc, firstPage, lastPage, modeA,
imgLLXA, imgLLYA, imgURXA, imgURYA, manualCtrlA,
paperWidthA, paperHeightA, duplexA);
}
......@@ -1063,7 +1063,6 @@ PSOutputDev::PSOutputDev(const char *fileName, PDFDoc *doc, XRef *xrefA, Catalog
PSOutputDev::PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA,
char *psTitle,
PDFDoc *doc,
XRef *xrefA, Catalog *catalog,
int firstPage, int lastPage, PSOutMode modeA,
int paperWidthA, int paperHeightA, GBool duplexA,
int imgLLXA, int imgLLYA, int imgURXA, int imgURYA,
......@@ -1091,17 +1090,18 @@ PSOutputDev::PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA,
forceRasterize = forceRasterizeA;
init(outputFuncA, outputStreamA, psGeneric, psTitle,
doc, xrefA, catalog, firstPage, lastPage, modeA,
doc, firstPage, lastPage, modeA,
imgLLXA, imgLLYA, imgURXA, imgURYA, manualCtrlA,
paperWidthA, paperHeightA, duplexA);
}
void PSOutputDev::init(PSOutputFunc outputFuncA, void *outputStreamA,
PSFileType fileTypeA, char *pstitle, PDFDoc *doc, XRef *xrefA, Catalog *catalog,
PSFileType fileTypeA, char *pstitle, PDFDoc *docA,
int firstPage, int lastPage, PSOutMode modeA,
int imgLLXA, int imgLLYA, int imgURXA, int imgURYA,
GBool manualCtrlA, int paperWidthA, int paperHeightA,
GBool duplexA) {
Catalog *catalog;
PDFRectangle *box;
// initialize
......@@ -1110,8 +1110,9 @@ void PSOutputDev::init(PSOutputFunc outputFuncA, void *outputStreamA,
outputFunc = outputFuncA;
outputStream = outputStreamA;
fileType = fileTypeA;
m_catalog = catalog;
xref = xrefA;
doc = docA;
xref = doc->getXRef();
catalog = doc->getCatalog();
level = globalParams->getPSLevel();
mode = modeA;
paperWidth = paperWidthA;
......@@ -2621,7 +2622,7 @@ void PSOutputDev::setupType3Font(GfxFont *font, GooString *psName,
box.y1 = m[1];
box.x2 = m[2];
box.y2 = m[3];
gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL);
gfx = new Gfx(doc, this, resDict, &box, NULL);
inType3Char = gTrue;
for (i = 0; i < charProcs->getLength(); ++i) {
t3Cacheable = gFalse;
......@@ -2965,7 +2966,7 @@ void PSOutputDev::setupForm(Ref id, Object *strObj) {
box.y1 = bbox[1];
box.x2 = bbox[2];
box.y2 = bbox[3];
gfx = new Gfx(xref, this, resDict, m_catalog, &box, &box);
gfx = new Gfx(doc, this, resDict, &box, &box);
gfx->display(strObj);
delete gfx;
......@@ -3004,7 +3005,7 @@ GBool PSOutputDev::checkPageSlice(Page *page, double /*hDPI*/, double /*vDPI*/,
int compCyan;
if (!forceRasterize) {
scan = new PreScanOutputDev(xref);
scan = new PreScanOutputDev(doc);
page->displaySlice(scan, 72, 72, rotateA, useMediaBox, crop,
sliceX, sliceY, sliceW, sliceH,
printing, catalog, abortCheckCbk, abortCheckCbkData);
......@@ -3037,7 +3038,7 @@ GBool PSOutputDev::checkPageSlice(Page *page, double /*hDPI*/, double /*vDPI*/,
splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse,
paperColor, gTrue, gFalse);
}
splashOut->startDoc(xref);
splashOut->startDoc(doc);
splashDPI = globalParams->getSplashResolution();
if (splashDPI < 1.0) {
splashDPI = defaultSplashDPI;
......@@ -3414,7 +3415,7 @@ void PSOutputDev::startPage(int pageNum, GfxState *state) {
if (mode == psModePS || mode == psModePSOrigPageSizes) {
GooString pageLabel;
const GBool gotLabel = m_catalog->indexToLabel(pageNum -1, &pageLabel);
const GBool gotLabel = doc->getCatalog()->indexToLabel(pageNum -1, &pageLabel);
if (gotLabel) {
// See bug13338 for why we try to avoid parentheses...
GBool needParens;
......@@ -4043,7 +4044,7 @@ GBool PSOutputDev::tilingPatternFillL1(GfxState *state, Catalog *cat, Object *st
box.y1 = bbox[1];
box.x2 = bbox[2];
box.y2 = bbox[3];
gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL);
gfx = new Gfx(doc, this, resDict, &box, NULL);
writePS("/x {\n");
if (paintType == 2) {
writePSFmt("{0:.6g} 0 {1:.6g} {2:.6g} {3:.6g} {4:.6g} setcachedevice\n",
......@@ -4098,7 +4099,7 @@ GBool PSOutputDev::tilingPatternFillL2(GfxState *state, Catalog *cat, Object *st
box.y1 = bbox[1];
box.x2 = bbox[2];
box.y2 = bbox[3];
gfx = new Gfx(xref, this, resDict, m_catalog, &box, NULL);
gfx = new Gfx(doc, this, resDict, &box, NULL);
inType3Char = gTrue;
gfx->display(str);
inType3Char = gFalse;
......
......@@ -78,7 +78,7 @@ class PSOutputDev: public OutputDev {
public:
// Open a PostScript output file, and write the prolog.
PSOutputDev(const char *fileName, PDFDoc *doc, XRef *xrefA, Catalog *catalog,
PSOutputDev(const char *fileName, PDFDoc *docA,
char *psTitle,
int firstPage, int lastPage, PSOutMode modeA,
int paperWidthA = -1, int paperHeightA = -1,
......@@ -91,8 +91,7 @@ public:
// Open a PSOutputDev that will write to a generic stream.
PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA,
char *psTitle,
PDFDoc *doc,
XRef *xrefA, Catalog *catalog,
PDFDoc *docA,
int firstPage, int lastPage, PSOutMode modeA,
int paperWidthA = -1, int paperHeightA = -1,
GBool duplexA = gTrue,
......@@ -288,7 +287,7 @@ public:
private:
void init(PSOutputFunc outputFuncA, void *outputStreamA,
PSFileType fileTypeA, char *pstitle, PDFDoc *doc, XRef *xrefA, Catalog *catalog,
PSFileType fileTypeA, char *pstitle, PDFDoc *doc,
int firstPage, int lastPage, PSOutMode modeA,
int imgLLXA, int imgLLYA, int imgURXA, int imgURYA,
GBool manualCtrlA, int paperWidthA, int paperHeightA,
......@@ -394,8 +393,8 @@ private:
void (*overlayCbk)(PSOutputDev *psOut, void *data);
void *overlayCbkData;
PDFDoc *doc;
XRef *xref; // the xref table for this PDF file
Catalog *m_catalog; // the catalog for this PDF file
Ref *fontIDs; // list of object IDs of all used fonts
int fontIDLen; // number of entries in fontIDs array
......
......@@ -42,6 +42,7 @@
#include "Object.h"
#include "Array.h"
#include "Dict.h"
#include "PDFDoc.h"
#include "XRef.h"
#include "Link.h"
#include "OutputDev.h"
......@@ -255,11 +256,12 @@ GBool PageAttrs::readBox(Dict *dict, const char *key, PDFRectangle *box) {
// Page
//------------------------------------------------------------------------
Page::Page(XRef *xrefA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form) {
Page::Page(PDFDoc *docA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form) {
Object tmp;
ok = gTrue;
xref = xrefA;
doc = docA;
xref = doc->getXRef();
num = numA;
duration = -1;
annots = NULL;
......@@ -446,7 +448,7 @@ Gfx *Page::createGfx(OutputDev *out, double hDPI, double vDPI,
printf("***** Rotate = %d\n", attrs->getRotate());
}
gfx = new Gfx(xref, out, num, attrs->getResourceDict(), catalog,
gfx = new Gfx(doc, out, num, attrs->getResourceDict(),
hDPI, vDPI, &box, crop ? cropBox : (PDFRectangle *)NULL,
rotate, abortCheckCbk, abortCheckCbkData);
......
......@@ -35,6 +35,7 @@
#include "Object.h"
class Dict;
class PDFDoc;
class XRef;
class OutputDev;
class Links;
......@@ -127,7 +128,7 @@ class Page {
public:
// Constructor.
Page(XRef *xrefA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form);
Page(PDFDoc *docA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form);
// Destructor.
~Page();
......@@ -237,6 +238,7 @@ public:
private:
PDFDoc *doc;
XRef *xref; // the xref table for this PDF file
Object pageObj; // page dictionary
Ref pageRef; // page reference
......
......@@ -43,9 +43,9 @@
// PreScanOutputDev
//------------------------------------------------------------------------
PreScanOutputDev::PreScanOutputDev(XRef *xrefA) {
PreScanOutputDev::PreScanOutputDev(PDFDoc *docA) {
level = globalParams->getPSLevel();
xref = xrefA;
doc = docA;
clearStats();
}
......@@ -90,7 +90,7 @@ GBool PreScanOutputDev::tilingPatternFill(GfxState *state, Catalog *catalog, Obj
Gfx *gfx;
box.x1 = bbox[0]; box.y1 = bbox[1];
box.x2 = bbox[2]; box.y2 = bbox[3];
gfx = new Gfx(xref, this, resDict, catalog, &box, NULL);
gfx = new Gfx(doc, this, resDict, &box, NULL);
gfx->display(str);
delete gfx;
return gTrue;
......
......@@ -45,7 +45,7 @@ class PreScanOutputDev: public OutputDev {
public:
// Constructor.
PreScanOutputDev(XRef *xrefA);
PreScanOutputDev(PDFDoc *docA);
// Destructor.
virtual ~PreScanOutputDev();
......@@ -159,7 +159,7 @@ private:
void check(GfxColorSpace *colorSpace, GfxColor *color,
double opacity, GfxBlendMode blendMode);
XRef *xref;
PDFDoc *doc;
GBool mono;
GBool gray;
GBool transparency;
......
......@@ -51,6 +51,7 @@
#include "Gfx.h"
#include "GfxFont.h"
#include "Page.h"
#include "PDFDoc.h"
#include "Link.h"
#include "CharCodeToUnicode.h"
#include "FontEncodingTables.h"
......@@ -1340,7 +1341,7 @@ SplashOutputDev::SplashOutputDev(SplashColorMode colorModeA,
}
keepAlphaChannel = paperColorA == NULL;
xref = NULL;
doc = NULL;
bitmap = new SplashBitmap(1, 1, bitmapRowPad, colorMode,
colorMode != splashModeMono1, bitmapTopDown);
......@@ -1427,10 +1428,10 @@ SplashOutputDev::~SplashOutputDev() {
}
}
void SplashOutputDev::startDoc(XRef *xrefA) {
void SplashOutputDev::startDoc(PDFDoc *docA) {
int i;
xref = xrefA;
doc = docA;
if (fontEngine) {
delete fontEngine;
}
......@@ -1771,7 +1772,7 @@ void SplashOutputDev::doUpdateFont(GfxState *state) {
// if there is an embedded font, write it to disk
if (gfxFont->getEmbeddedFontID(&embRef)) {
tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen);
tmpBuf = gfxFont->readEmbFontFile(doc->getXRef(), &tmpBufLen);
if (! tmpBuf)
goto err2;
......@@ -3150,7 +3151,7 @@ void SplashOutputDev::drawMaskedImage(GfxState *state, Object *ref,
if (maskWidth > width || maskHeight > height) {
decodeLow.initInt(maskInvert ? 0 : 1);
decodeHigh.initInt(maskInvert ? 1 : 0);
maskDecode.initArray(xref);
maskDecode.initArray(doc->getXRef());
maskDecode.arrayAdd(&decodeLow);
maskDecode.arrayAdd(&decodeHigh);
maskColorMap = new GfxImageColorMap(1, &maskDecode,
......@@ -3901,7 +3902,7 @@ GBool SplashOutputDev::tilingPatternFill(GfxState *state, Catalog *catalog, Obje
box.x1 = bbox[0]; box.y1 = bbox[1];
box.x2 = bbox[2]; box.y2 = bbox[3];
gfx = new Gfx(xref, this, resDict, catalog, &box, NULL);
gfx = new Gfx(doc, this, resDict, &box, NULL);
// set pattern transformation matrix
gfx->getState()->setCTM(m1.m[0], m1.m[1], m1.m[2], m1.m[3], m1.m[4], m1.m[5]);
updateCTM(gfx->getState(), m1.m[0], m1.m[1], m1.m[2], m1.m[3], m1.m[4], m1.m[5]);
......
......@@ -40,6 +40,7 @@
#include "OutputDev.h"
#include "GfxState.h"
class PDFDoc;
class Gfx8BitFont;
class SplashBitmap;