[poppler] Branch 'xpdf303merge' - glib/poppler-action.cc glib/poppler-annot.cc poppler/Annot.cc poppler/Annot.h poppler/Catalog.cc poppler/Form.cc poppler/Form.h poppler/Page.cc poppler/PSOutputDev.cc
Carlos Garcia Campos
carlosgc at kemper.freedesktop.org
Sun Sep 4 02:33:49 PDT 2011
glib/poppler-action.cc | 2
glib/poppler-annot.cc | 4
poppler/Annot.cc | 364 ++++++++++++++++++++++++-------------------------
poppler/Annot.h | 128 ++++++++---------
poppler/Catalog.cc | 9 -
poppler/Form.cc | 22 +-
poppler/Form.h | 11 -
poppler/PSOutputDev.cc | 2
poppler/Page.cc | 2
9 files changed, 274 insertions(+), 270 deletions(-)
New commits:
commit ec52e46e309a0307fdf12113a1b7d41a760f9d6c
Author: Carlos Garcia Campos <carlosgc at gnome.org>
Date: Sun Sep 4 11:32:38 2011 +0200
xpdf303: Create annots with a doc instead of xref + catalog
diff --git a/glib/poppler-action.cc b/glib/poppler-action.cc
index c7ebcdd..384530f 100644
--- a/glib/poppler-action.cc
+++ b/glib/poppler-action.cc
@@ -480,7 +480,7 @@ find_annot_movie_for_action (PopplerDocument *document,
if (annotObj.isDict ()) {
Object tmp;
- annot = new AnnotMovie (xref, annotObj.getDict(), document->doc->getCatalog (), &tmp);
+ annot = new AnnotMovie (document->doc, annotObj.getDict(), &tmp);
if (!annot->isOk ()) {
delete annot;
annot = NULL;
diff --git a/glib/poppler-annot.cc b/glib/poppler-annot.cc
index a69644d..4ad5f5d 100644
--- a/glib/poppler-annot.cc
+++ b/glib/poppler-annot.cc
@@ -199,7 +199,7 @@ poppler_annot_text_new (PopplerDocument *doc,
PDFRectangle pdf_rect(rect->x1, rect->y1,
rect->x2, rect->y2);
- annot = new AnnotText (doc->doc->getXRef(), &pdf_rect, doc->doc->getCatalog());
+ annot = new AnnotText (doc->doc, &pdf_rect);
return _poppler_annot_text_new (annot);
}
@@ -708,7 +708,7 @@ poppler_annot_markup_set_popup (PopplerAnnotMarkup *poppler_annot,
g_return_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot));
annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
- popup = new AnnotPopup (annot->getXRef(), &pdf_rect, (Catalog *)NULL);
+ popup = new AnnotPopup (annot->getDoc(), &pdf_rect);
annot->setPopup (popup);
}
diff --git a/poppler/Annot.cc b/poppler/Annot.cc
index 3e0fb3e..30ce86a 100644
--- a/poppler/Annot.cc
+++ b/poppler/Annot.cc
@@ -47,6 +47,7 @@
#include "Catalog.h"
#include "Gfx.h"
#include "Lexer.h"
+#include "PDFDoc.h"
#include "Page.h"
#include "Annot.h"
#include "GfxFont.h"
@@ -808,14 +809,14 @@ AnnotAppearanceCharacs::~AnnotAppearanceCharacs() {
// Annot
//------------------------------------------------------------------------
-Annot::Annot(XRef *xrefA, PDFRectangle *rectA, Catalog *catalog) {
+Annot::Annot(PDFDoc *docA, PDFRectangle *rectA) {
Object obj1;
refCnt = 1;
flags = flagUnknown;
type = typeUnknown;
- obj1.initArray (xrefA);
+ obj1.initArray (docA->getXRef());
Object obj2;
obj1.arrayAdd (obj2.initReal (rectA->x1));
obj1.arrayAdd (obj2.initReal (rectA->y1));
@@ -823,26 +824,26 @@ Annot::Annot(XRef *xrefA, PDFRectangle *rectA, Catalog *catalog) {
obj1.arrayAdd (obj2.initReal (rectA->y2));
obj2.free ();
- annotObj.initDict (xrefA);
+ annotObj.initDict (docA->getXRef());
annotObj.dictSet ("Type", obj2.initName ("Annot"));
annotObj.dictSet ("Rect", &obj1);
// obj1 is owned by the dict
- ref = xrefA->addIndirectObject (&annotObj);
+ ref = docA->getXRef()->addIndirectObject (&annotObj);
- initialize (xrefA, annotObj.getDict(), catalog);
+ initialize (docA, annotObj.getDict());
}
-Annot::Annot(XRef *xrefA, Dict *dict, Catalog* catalog) {
+Annot::Annot(PDFDoc *docA, Dict *dict) {
refCnt = 1;
hasRef = false;
flags = flagUnknown;
type = typeUnknown;
annotObj.initDict (dict);
- initialize (xrefA, dict, catalog);
+ initialize (docA, dict);
}
-Annot::Annot(XRef *xrefA, Dict *dict, Catalog* catalog, Object *obj) {
+Annot::Annot(PDFDoc *docA, Dict *dict, Object *obj) {
refCnt = 1;
if (obj->isRef()) {
hasRef = gTrue;
@@ -853,16 +854,17 @@ Annot::Annot(XRef *xrefA, Dict *dict, Catalog* catalog, Object *obj) {
flags = flagUnknown;
type = typeUnknown;
annotObj.initDict (dict);
- initialize (xrefA, dict, catalog);
+ initialize (docA, dict);
}
-void Annot::initialize(XRef *xrefA, Dict *dict, Catalog *catalog) {
+void Annot::initialize(PDFDoc *docA, Dict *dict) {
Object asObj, obj1, obj2, obj3;
appRef.num = 0;
appRef.gen = 65535;
ok = gTrue;
- xref = xrefA;
+ doc = docA;
+ xref = doc->getXRef();
appearBuf = NULL;
fontSize = 0;
@@ -910,7 +912,7 @@ void Annot::initialize(XRef *xrefA, Dict *dict, Catalog *catalog) {
if (dict->lookupNF("P", &obj1)->isRef()) {
Ref ref = obj1.getRef();
- page = catalog ? catalog->findPage (ref.num, ref.gen) : -1;
+ page = doc->getCatalog()->findPage (ref.num, ref.gen);
} else {
page = 0;
}
@@ -1002,7 +1004,7 @@ void Annot::initialize(XRef *xrefA, Dict *dict, Catalog *catalog) {
}
obj1.free();
- optContentConfig = catalog ? catalog->getOptContentConfig() : NULL;
+ optContentConfig = doc->getCatalog()->getOptContentConfig();
dict->lookupNF("OC", &oc);
if (!oc.isRef() && !oc.isNull()) {
error (errSyntaxError, -1, "Annotation OC value not null or dict: {0:d}", oc.getType());
@@ -1355,27 +1357,27 @@ void Annot::draw(Gfx *gfx, GBool printing) {
// AnnotPopup
//------------------------------------------------------------------------
-AnnotPopup::AnnotPopup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) :
- Annot(xrefA, rect, catalog) {
+AnnotPopup::AnnotPopup(PDFDoc *docA, PDFRectangle *rect) :
+ Annot(docA, rect) {
Object obj1;
type = typePopup;
annotObj.dictSet ("Subtype", obj1.initName ("Popup"));
- initialize (xrefA, annotObj.getDict(), catalog);
+ initialize (docA, annotObj.getDict());
}
-AnnotPopup::AnnotPopup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- Annot(xrefA, dict, catalog, obj) {
+AnnotPopup::AnnotPopup(PDFDoc *docA, Dict *dict, Object *obj) :
+ Annot(docA, dict, obj) {
type = typePopup;
- initialize(xrefA, dict, catalog);
+ initialize(docA, dict);
}
AnnotPopup::~AnnotPopup() {
parent.free();
}
-void AnnotPopup::initialize(XRef *xrefA, Dict *dict, Catalog *catalog) {
+void AnnotPopup::initialize(PDFDoc *docA, Dict *dict) {
Object obj1;
if (!dict->lookupNF("Parent", &parent)->isRef()) {
@@ -1412,14 +1414,14 @@ void AnnotPopup::setOpen(GBool openA) {
//------------------------------------------------------------------------
// AnnotMarkup
//------------------------------------------------------------------------
-AnnotMarkup::AnnotMarkup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) :
- Annot(xrefA, rect, catalog) {
- initialize(xrefA, annotObj.getDict(), catalog, &annotObj);
+AnnotMarkup::AnnotMarkup(PDFDoc *docA, PDFRectangle *rect) :
+ Annot(docA, rect) {
+ initialize(docA, annotObj.getDict(), &annotObj);
}
-AnnotMarkup::AnnotMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- Annot(xrefA, dict, catalog, obj) {
- initialize(xrefA, dict, catalog, obj);
+AnnotMarkup::AnnotMarkup(PDFDoc *docA, Dict *dict, Object *obj) :
+ Annot(docA, dict, obj) {
+ initialize(docA, dict, obj);
}
AnnotMarkup::~AnnotMarkup() {
@@ -1436,7 +1438,7 @@ AnnotMarkup::~AnnotMarkup() {
delete subject;
}
-void AnnotMarkup::initialize(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) {
+void AnnotMarkup::initialize(PDFDoc *docA, Dict *dict, Object *obj) {
Object obj1;
if (dict->lookup("T", &obj1)->isString()) {
@@ -1447,7 +1449,7 @@ void AnnotMarkup::initialize(XRef *xrefA, Dict *dict, Catalog *catalog, Object *
obj1.free();
if (dict->lookup("Popup", &obj1)->isDict()) {
- popup = new AnnotPopup(xrefA, obj1.getDict(), catalog, obj);
+ popup = new AnnotPopup(docA, obj1.getDict(), obj);
} else {
popup = NULL;
}
@@ -1553,30 +1555,30 @@ void AnnotMarkup::setOpacity(double opacityA) {
// AnnotText
//------------------------------------------------------------------------
-AnnotText::AnnotText(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotText::AnnotText(PDFDoc *docA, PDFRectangle *rect) :
+ AnnotMarkup(docA, rect) {
Object obj1;
type = typeText;
flags |= flagNoZoom | flagNoRotate;
annotObj.dictSet ("Subtype", obj1.initName ("Text"));
- initialize (xrefA, catalog, annotObj.getDict());
+ initialize (docA, annotObj.getDict());
}
-AnnotText::AnnotText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotText::AnnotText(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
type = typeText;
flags |= flagNoZoom | flagNoRotate;
- initialize (xrefA, catalog, dict);
+ initialize (docA, dict);
}
AnnotText::~AnnotText() {
delete icon;
}
-void AnnotText::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
+void AnnotText::initialize(PDFDoc *docA, Dict *dict) {
Object obj1;
if (dict->lookup("Open", &obj1)->isBool())
@@ -1996,20 +1998,20 @@ void AnnotText::draw(Gfx *gfx, GBool printing) {
//------------------------------------------------------------------------
// AnnotLink
//------------------------------------------------------------------------
-AnnotLink::AnnotLink(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) :
- Annot(xrefA, rect, catalog) {
+AnnotLink::AnnotLink(PDFDoc *docA, PDFRectangle *rect) :
+ Annot(docA, rect) {
Object obj1;
type = typeLink;
annotObj.dictSet ("Subtype", obj1.initName ("Link"));
- initialize (xrefA, catalog, annotObj.getDict());
+ initialize (docA, annotObj.getDict());
}
-AnnotLink::AnnotLink(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- Annot(xrefA, dict, catalog, obj) {
+AnnotLink::AnnotLink(PDFDoc *docA, Dict *dict, Object *obj) :
+ Annot(docA, dict, obj) {
type = typeLink;
- initialize (xrefA, catalog, dict);
+ initialize (docA, dict);
}
AnnotLink::~AnnotLink() {
@@ -2022,7 +2024,7 @@ AnnotLink::~AnnotLink() {
delete quadrilaterals;
}
-void AnnotLink::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
+void AnnotLink::initialize(PDFDoc *docA, Dict *dict) {
Object obj1;
action = NULL;
@@ -2034,7 +2036,7 @@ void AnnotLink::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
} else {
obj1.free();
if (dict->lookup("A", &obj1)->isDict()) {
- action = LinkAction::parseAction(&obj1, catalog->getBaseURI());
+ action = LinkAction::parseAction(&obj1, doc->getCatalog()->getBaseURI());
}
}
obj1.free();
@@ -2089,8 +2091,8 @@ void AnnotLink::draw(Gfx *gfx, GBool printing) {
//------------------------------------------------------------------------
// AnnotFreeText
//------------------------------------------------------------------------
-AnnotFreeText::AnnotFreeText(XRef *xrefA, PDFRectangle *rect, GooString *da, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotFreeText::AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, GooString *da) :
+ AnnotMarkup(docA, rect) {
Object obj1;
type = typeFreeText;
@@ -2101,13 +2103,13 @@ AnnotFreeText::AnnotFreeText(XRef *xrefA, PDFRectangle *rect, GooString *da, Cat
obj2.initString (da->copy());
annotObj.dictSet("DA", &obj2);
- initialize (xrefA, catalog, annotObj.getDict());
+ initialize (docA, annotObj.getDict());
}
-AnnotFreeText::AnnotFreeText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotFreeText::AnnotFreeText(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
type = typeFreeText;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotFreeText::~AnnotFreeText() {
@@ -2126,7 +2128,7 @@ AnnotFreeText::~AnnotFreeText() {
delete rectangle;
}
-void AnnotFreeText::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
+void AnnotFreeText::initialize(PDFDoc *docA, Dict *dict) {
Object obj1;
if (dict->lookup("DA", &obj1)->isString()) {
@@ -2224,28 +2226,28 @@ void AnnotFreeText::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
// AnnotLine
//------------------------------------------------------------------------
-AnnotLine::AnnotLine(XRef *xrefA, PDFRectangle *rect, PDFRectangle *lRect, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotLine::AnnotLine(PDFDoc *docA, PDFRectangle *rect, PDFRectangle *lRect) :
+ AnnotMarkup(docA, rect) {
Object obj1;
type = typeLine;
annotObj.dictSet ("Subtype", obj1.initName ("Line"));
Object obj2, obj3;
- obj2.initArray (xrefA);
+ obj2.initArray (doc->getXRef());
obj2.arrayAdd (obj3.initReal (lRect->x1));
obj2.arrayAdd (obj3.initReal (lRect->y1));
obj2.arrayAdd (obj3.initReal (lRect->x2));
obj2.arrayAdd (obj3.initReal (lRect->y2));
annotObj.dictSet ("L", &obj2);
- initialize (xrefA, catalog, annotObj.getDict());
+ initialize (docA, annotObj.getDict());
}
-AnnotLine::AnnotLine(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotLine::AnnotLine(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
type = typeLine;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotLine::~AnnotLine() {
@@ -2259,7 +2261,7 @@ AnnotLine::~AnnotLine() {
delete measure;
}
-void AnnotLine::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
+void AnnotLine::initialize(PDFDoc *docA, Dict *dict) {
Object obj1;
if (dict->lookup("L", &obj1)->isArray() && obj1.arrayGetLength() == 4) {
@@ -2475,9 +2477,9 @@ void AnnotLine::draw(Gfx *gfx, GBool printing) {
//------------------------------------------------------------------------
// AnnotTextMarkup
//------------------------------------------------------------------------
-AnnotTextMarkup::AnnotTextMarkup(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType,
- AnnotQuadrilaterals *quadPoints, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotTextMarkup::AnnotTextMarkup(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType,
+ AnnotQuadrilaterals *quadPoints) :
+ AnnotMarkup(docA, rect) {
Object obj1;
switch (subType) {
@@ -2498,7 +2500,7 @@ AnnotTextMarkup::AnnotTextMarkup(XRef *xrefA, PDFRectangle *rect, AnnotSubtype s
}
Object obj2;
- obj2.initArray (xrefA);
+ obj2.initArray (doc->getXRef());
for (int i = 0; i < quadPoints->getQuadrilateralsLength(); ++i) {
Object obj3;
@@ -2515,17 +2517,17 @@ AnnotTextMarkup::AnnotTextMarkup(XRef *xrefA, PDFRectangle *rect, AnnotSubtype s
annotObj.dictSet ("QuadPoints", &obj2);
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotTextMarkup::AnnotTextMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotTextMarkup::AnnotTextMarkup(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
// the real type will be read in initialize()
type = typeHighlight;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
-void AnnotTextMarkup::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
+void AnnotTextMarkup::initialize(PDFDoc *docA, Dict *dict) {
Object obj1;
if (dict->lookup("Subtype", &obj1)->isName()) {
@@ -2691,18 +2693,18 @@ void AnnotTextMarkup::draw(Gfx *gfx, GBool printing) {
// AnnotWidget
//------------------------------------------------------------------------
-AnnotWidget::AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- Annot(xrefA, dict, catalog, obj) {
+AnnotWidget::AnnotWidget(PDFDoc *docA, Dict *dict, Object *obj) :
+ Annot(docA, dict, obj) {
type = typeWidget;
field = NULL;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
-AnnotWidget::AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj, FormField *fieldA) :
- Annot(xrefA, dict, catalog, obj) {
+AnnotWidget::AnnotWidget(PDFDoc *docA, Dict *dict, Object *obj, FormField *fieldA) :
+ Annot(docA, dict, obj) {
type = typeWidget;
field = fieldA;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotWidget::~AnnotWidget() {
@@ -2719,10 +2721,10 @@ AnnotWidget::~AnnotWidget() {
delete parent;
}
-void AnnotWidget::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
+void AnnotWidget::initialize(PDFDoc *docA, Dict *dict) {
Object obj1;
- form = catalog->getForm();
+ form = doc->getCatalog()->getForm();
if(dict->lookup("H", &obj1)->isName()) {
const char *modeName = obj1.getName();
@@ -2750,7 +2752,7 @@ void AnnotWidget::initialize(XRef *xrefA, Catalog *catalog, Dict *dict) {
action = NULL;
if(dict->lookup("A", &obj1)->isDict()) {
- action = LinkAction::parseAction(&obj1, catalog->getBaseURI());
+ action = LinkAction::parseAction(&obj1, doc->getCatalog()->getBaseURI());
}
obj1.free();
@@ -3885,8 +3887,8 @@ void AnnotWidget::draw(Gfx *gfx, GBool printing) {
//------------------------------------------------------------------------
// AnnotMovie
//------------------------------------------------------------------------
-AnnotMovie::AnnotMovie(XRef *xrefA, PDFRectangle *rect, Movie *movieA, Catalog *catalog) :
- Annot(xrefA, rect, catalog) {
+AnnotMovie::AnnotMovie(PDFDoc *docA, PDFRectangle *rect, Movie *movieA) :
+ Annot(docA, rect) {
Object obj1;
type = typeMovie;
@@ -3895,13 +3897,13 @@ AnnotMovie::AnnotMovie(XRef *xrefA, PDFRectangle *rect, Movie *movieA, Catalog *
movie = movieA->copy();
// TODO: create movie dict from movieA
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotMovie::AnnotMovie(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- Annot(xrefA, dict, catalog, obj) {
+AnnotMovie::AnnotMovie(PDFDoc *docA, Dict *dict, Object *obj) :
+ Annot(docA, dict, obj) {
type = typeMovie;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotMovie::~AnnotMovie() {
@@ -3910,7 +3912,7 @@ AnnotMovie::~AnnotMovie() {
delete movie;
}
-void AnnotMovie::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotMovie::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
if (dict->lookup("T", &obj1)->isString()) {
@@ -4036,20 +4038,20 @@ void AnnotMovie::draw(Gfx *gfx, GBool printing) {
//------------------------------------------------------------------------
// AnnotScreen
//------------------------------------------------------------------------
-AnnotScreen::AnnotScreen(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) :
- Annot(xrefA, rect, catalog) {
+AnnotScreen::AnnotScreen(PDFDoc *docA, PDFRectangle *rect) :
+ Annot(docA, rect) {
Object obj1;
type = typeScreen;
annotObj.dictSet ("Subtype", obj1.initName ("Screen"));
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotScreen::AnnotScreen(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- Annot(xrefA, dict, catalog, obj) {
+AnnotScreen::AnnotScreen(PDFDoc *docA, Dict *dict, Object *obj) :
+ Annot(docA, dict, obj) {
type = typeScreen;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotScreen::~AnnotScreen() {
@@ -4063,7 +4065,7 @@ AnnotScreen::~AnnotScreen() {
additionAction.free();
}
-void AnnotScreen::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotScreen::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
title = NULL;
@@ -4074,7 +4076,7 @@ void AnnotScreen::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
action = NULL;
if (dict->lookup("A", &obj1)->isDict()) {
- action = LinkAction::parseAction(&obj1, catalog->getBaseURI());
+ action = LinkAction::parseAction(&obj1, doc->getCatalog()->getBaseURI());
if (action->getKind() == actionRendition && page == 0) {
error (errSyntaxError, -1, "Invalid Rendition action: associated screen annotation without P");
delete action;
@@ -4097,26 +4099,26 @@ void AnnotScreen::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
//------------------------------------------------------------------------
// AnnotStamp
//------------------------------------------------------------------------
-AnnotStamp::AnnotStamp(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotStamp::AnnotStamp(PDFDoc *docA, PDFRectangle *rect) :
+ AnnotMarkup(docA, rect) {
Object obj1;
type = typeStamp;
annotObj.dictSet ("Subtype", obj1.initName ("Stamp"));
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotStamp::AnnotStamp(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotStamp::AnnotStamp(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
type = typeStamp;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotStamp::~AnnotStamp() {
delete icon;
}
-void AnnotStamp::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotStamp::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
if (dict->lookup("Name", &obj1)->isName()) {
@@ -4131,8 +4133,8 @@ void AnnotStamp::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
//------------------------------------------------------------------------
// AnnotGeometry
//------------------------------------------------------------------------
-AnnotGeometry::AnnotGeometry(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotGeometry::AnnotGeometry(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType) :
+ AnnotMarkup(docA, rect) {
Object obj1;
switch (subType) {
@@ -4146,14 +4148,14 @@ AnnotGeometry::AnnotGeometry(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subTy
assert (0 && "Invalid subtype for AnnotGeometry\n");
}
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotGeometry::AnnotGeometry(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotGeometry::AnnotGeometry(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
// the real type will be read in initialize()
type = typeSquare;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotGeometry::~AnnotGeometry() {
@@ -4162,7 +4164,7 @@ AnnotGeometry::~AnnotGeometry() {
delete geometryRect;
}
-void AnnotGeometry::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotGeometry::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
if (dict->lookup("Subtype", &obj1)->isName()) {
@@ -4326,9 +4328,8 @@ void AnnotGeometry::draw(Gfx *gfx, GBool printing) {
//------------------------------------------------------------------------
// AnnotPolygon
//------------------------------------------------------------------------
-AnnotPolygon::AnnotPolygon(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType,
- AnnotPath *path, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotPolygon::AnnotPolygon(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType, AnnotPath *path) :
+ AnnotMarkup(docA, rect) {
Object obj1;
switch (subType) {
@@ -4343,7 +4344,7 @@ AnnotPolygon::AnnotPolygon(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType
}
Object obj2;
- obj2.initArray (xrefA);
+ obj2.initArray (doc->getXRef());
for (int i = 0; i < path->getCoordsLength(); ++i) {
Object obj3;
@@ -4354,14 +4355,14 @@ AnnotPolygon::AnnotPolygon(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType
annotObj.dictSet ("Vertices", &obj2);
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotPolygon::AnnotPolygon(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotPolygon::AnnotPolygon(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
// the real type will be read in initialize()
type = typePolygon;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotPolygon::~AnnotPolygon() {
@@ -4374,7 +4375,7 @@ AnnotPolygon::~AnnotPolygon() {
delete borderEffect;
}
-void AnnotPolygon::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotPolygon::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
if (dict->lookup("Subtype", &obj1)->isName()) {
@@ -4449,27 +4450,27 @@ void AnnotPolygon::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
//------------------------------------------------------------------------
// AnnotCaret
//------------------------------------------------------------------------
-AnnotCaret::AnnotCaret(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotCaret::AnnotCaret(PDFDoc *docA, PDFRectangle *rect) :
+ AnnotMarkup(docA, rect) {
Object obj1;
type = typeCaret;
annotObj.dictSet ("Subtype", obj1.initName ("Caret"));
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotCaret::AnnotCaret(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotCaret::AnnotCaret(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
type = typeCaret;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotCaret::~AnnotCaret() {
delete caretRect;
}
-void AnnotCaret::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotCaret::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
symbol = symbolNone;
@@ -4495,8 +4496,8 @@ void AnnotCaret::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
//------------------------------------------------------------------------
// AnnotInk
//------------------------------------------------------------------------
-AnnotInk::AnnotInk(XRef *xrefA, PDFRectangle *rect, AnnotPath **paths, int n_paths, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotInk::AnnotInk(PDFDoc *docA, PDFRectangle *rect, AnnotPath **paths, int n_paths) :
+ AnnotMarkup(docA, rect) {
Object obj1;
type = typeInk;
@@ -4504,12 +4505,12 @@ AnnotInk::AnnotInk(XRef *xrefA, PDFRectangle *rect, AnnotPath **paths, int n_pat
annotObj.dictSet ("Subtype", obj1.initName ("Ink"));
Object obj2;
- obj2.initArray (xrefA);
+ obj2.initArray (doc->getXRef());
for (int i = 0; i < n_paths; ++i) {
AnnotPath *path = paths[i];
Object obj3;
- obj3.initArray (xrefA);
+ obj3.initArray (doc->getXRef());
for (int j = 0; j < path->getCoordsLength(); ++j) {
Object obj4;
@@ -4523,13 +4524,13 @@ AnnotInk::AnnotInk(XRef *xrefA, PDFRectangle *rect, AnnotPath **paths, int n_pat
annotObj.dictSet ("InkList", &obj2);
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotInk::AnnotInk(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotInk::AnnotInk(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
type = typeInk;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotInk::~AnnotInk() {
@@ -4540,7 +4541,7 @@ AnnotInk::~AnnotInk() {
}
}
-void AnnotInk::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotInk::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
if (dict->lookup("InkList", &obj1)->isArray()) {
@@ -4566,8 +4567,8 @@ void AnnotInk::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
//------------------------------------------------------------------------
// AnnotFileAttachment
//------------------------------------------------------------------------
-AnnotFileAttachment::AnnotFileAttachment(XRef *xrefA, PDFRectangle *rect, GooString *filename, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotFileAttachment::AnnotFileAttachment(PDFDoc *docA, PDFRectangle *rect, GooString *filename) :
+ AnnotMarkup(docA, rect) {
Object obj1;
type = typeFileAttachment;
@@ -4578,13 +4579,13 @@ AnnotFileAttachment::AnnotFileAttachment(XRef *xrefA, PDFRectangle *rect, GooStr
obj2.initString(filename->copy());
annotObj.dictSet ("FS", &obj2);
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotFileAttachment::AnnotFileAttachment(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotFileAttachment::AnnotFileAttachment(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
type = typeFileAttachment;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotFileAttachment::~AnnotFileAttachment() {
@@ -4594,7 +4595,7 @@ AnnotFileAttachment::~AnnotFileAttachment() {
delete name;
}
-void AnnotFileAttachment::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotFileAttachment::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
if (dict->lookup("FS", &obj1)->isDict() || dict->lookup("FS", &obj1)->isString()) {
@@ -4781,8 +4782,8 @@ void AnnotFileAttachment::draw(Gfx *gfx, GBool printing) {
//------------------------------------------------------------------------
// AnnotSound
//------------------------------------------------------------------------
-AnnotSound::AnnotSound(XRef *xrefA, PDFRectangle *rect, Sound *soundA, Catalog *catalog) :
- AnnotMarkup(xrefA, rect, catalog) {
+AnnotSound::AnnotSound(PDFDoc *docA, PDFRectangle *rect, Sound *soundA) :
+ AnnotMarkup(docA, rect) {
Object obj1;
type = typeSound;
@@ -4795,13 +4796,13 @@ AnnotSound::AnnotSound(XRef *xrefA, PDFRectangle *rect, Sound *soundA, Catalog *
str->incRef(); //FIXME: initStream should do this?
annotObj.dictSet ("Sound", &obj2);
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-AnnotSound::AnnotSound(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- AnnotMarkup(xrefA, dict, catalog, obj) {
+AnnotSound::AnnotSound(PDFDoc *docA, Dict *dict, Object *obj) :
+ AnnotMarkup(docA, dict, obj) {
type = typeSound;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
AnnotSound::~AnnotSound() {
@@ -4810,7 +4811,7 @@ AnnotSound::~AnnotSound() {
delete name;
}
-void AnnotSound::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void AnnotSound::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
sound = Sound::parseSound(dict->lookup("Sound", &obj1));
@@ -4942,21 +4943,21 @@ void AnnotSound::draw(Gfx *gfx, GBool printing) {
//------------------------------------------------------------------------
// Annot3D
//------------------------------------------------------------------------
-Annot3D::Annot3D(XRef *xrefA, PDFRectangle *rect, Catalog *catalog) :
- Annot(xrefA, rect, catalog) {
+Annot3D::Annot3D(PDFDoc *docA, PDFRectangle *rect) :
+ Annot(docA, rect) {
Object obj1;
type = type3D;
annotObj.dictSet ("Subtype", obj1.initName ("3D"));
- initialize(xrefA, catalog, annotObj.getDict());
+ initialize(docA, annotObj.getDict());
}
-Annot3D::Annot3D(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj) :
- Annot(xrefA, dict, catalog, obj) {
+Annot3D::Annot3D(PDFDoc *docA, Dict *dict, Object *obj) :
+ Annot(docA, dict, obj) {
type = type3D;
- initialize(xrefA, catalog, dict);
+ initialize(docA, dict);
}
Annot3D::~Annot3D() {
@@ -4964,7 +4965,7 @@ Annot3D::~Annot3D() {
delete activation;
}
-void Annot3D::initialize(XRef *xrefA, Catalog *catalog, Dict* dict) {
+void Annot3D::initialize(PDFDoc *docA, Dict* dict) {
Object obj1;
if (dict->lookup("3DA", &obj1)->isDict()) {
@@ -5063,11 +5064,12 @@ Annot3D::Activation::Activation(Dict *dict) {
// Annots
//------------------------------------------------------------------------
-Annots::Annots(XRef *xref, Catalog *catalog, Object *annotsObj) {
+Annots::Annots(PDFDoc *docA, Object *annotsObj) {
Annot *annot;
Object obj1;
int i;
+ doc = docA;
annots = NULL;
size = 0;
nAnnots = 0;
@@ -5080,7 +5082,7 @@ Annots::Annots(XRef *xref, Catalog *catalog, Object *annotsObj) {
Object obj2;
if (annotsObj->arrayGet(i, &obj1)->isDict()) {
annotsObj->arrayGetNF(i, &obj2);
- annot = createAnnot (xref, obj1.getDict(), catalog, &obj2);
+ annot = createAnnot (obj1.getDict(), &obj2);
if (annot) {
if (annot->isOk()) {
appendAnnot(annot);
@@ -5105,7 +5107,7 @@ void Annots::appendAnnot(Annot *annot) {
}
}
-Annot *Annots::createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj) {
+Annot *Annots::createAnnot(Dict* dict, Object *obj) {
Annot *annot = NULL;
Object obj1;
@@ -5113,45 +5115,45 @@ Annot *Annots::createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj
const char *typeName = obj1.getName();
if (!strcmp(typeName, "Text")) {
- annot = new AnnotText(xref, dict, catalog, obj);
+ annot = new AnnotText(doc, dict, obj);
} else if (!strcmp(typeName, "Link")) {
- annot = new AnnotLink(xref, dict, catalog, obj);
+ annot = new AnnotLink(doc, dict, obj);
} else if (!strcmp(typeName, "FreeText")) {
- annot = new AnnotFreeText(xref, dict, catalog, obj);
+ annot = new AnnotFreeText(doc, dict, obj);
} else if (!strcmp(typeName, "Line")) {
- annot = new AnnotLine(xref, dict, catalog, obj);
+ annot = new AnnotLine(doc, dict, obj);
} else if (!strcmp(typeName, "Square")) {
- annot = new AnnotGeometry(xref, dict, catalog, obj);
+ annot = new AnnotGeometry(doc, dict, obj);
} else if (!strcmp(typeName, "Circle")) {
- annot = new AnnotGeometry(xref, dict, catalog, obj);
+ annot = new AnnotGeometry(doc, dict, obj);
} else if (!strcmp(typeName, "Polygon")) {
- annot = new AnnotPolygon(xref, dict, catalog, obj);
+ annot = new AnnotPolygon(doc, dict, obj);
} else if (!strcmp(typeName, "PolyLine")) {
- annot = new AnnotPolygon(xref, dict, catalog, obj);
+ annot = new AnnotPolygon(doc, dict, obj);
} else if (!strcmp(typeName, "Highlight")) {
- annot = new AnnotTextMarkup(xref, dict, catalog, obj);
+ annot = new AnnotTextMarkup(doc, dict, obj);
} else if (!strcmp(typeName, "Underline")) {
- annot = new AnnotTextMarkup(xref, dict, catalog, obj);
+ annot = new AnnotTextMarkup(doc, dict, obj);
} else if (!strcmp(typeName, "Squiggly")) {
- annot = new AnnotTextMarkup(xref, dict, catalog, obj);
+ annot = new AnnotTextMarkup(doc, dict, obj);
} else if (!strcmp(typeName, "StrikeOut")) {
- annot = new AnnotTextMarkup(xref, dict, catalog, obj);
+ annot = new AnnotTextMarkup(doc, dict, obj);
} else if (!strcmp(typeName, "Stamp")) {
- annot = new AnnotStamp(xref, dict, catalog, obj);
+ annot = new AnnotStamp(doc, dict, obj);
} else if (!strcmp(typeName, "Caret")) {
- annot = new AnnotCaret(xref, dict, catalog, obj);
+ annot = new AnnotCaret(doc, dict, obj);
} else if (!strcmp(typeName, "Ink")) {
- annot = new AnnotInk(xref, dict, catalog, obj);
+ annot = new AnnotInk(doc, dict, obj);
} else if (!strcmp(typeName, "FileAttachment")) {
- annot = new AnnotFileAttachment(xref, dict, catalog, obj);
+ annot = new AnnotFileAttachment(doc, dict, obj);
} else if (!strcmp(typeName, "Sound")) {
- annot = new AnnotSound(xref, dict, catalog, obj);
+ annot = new AnnotSound(doc, dict, obj);
} else if(!strcmp(typeName, "Movie")) {
- annot = new AnnotMovie(xref, dict, catalog, obj);
+ annot = new AnnotMovie(doc, dict, obj);
} else if(!strcmp(typeName, "Widget")) {
// Find the annot in forms
if (obj->isRef()) {
- Form *form = catalog->getForm();
+ Form *form = doc->getCatalog()->getForm();
if (form) {
FormWidget *widget = form->findWidgetByRef(obj->getRef());
if (widget) {
@@ -5161,17 +5163,17 @@ Annot *Annots::createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj
}
}
if (!annot)
- annot = new AnnotWidget(xref, dict, catalog, obj);
+ annot = new AnnotWidget(doc, dict, obj);
} else if(!strcmp(typeName, "Screen")) {
- annot = new AnnotScreen(xref, dict, catalog, obj);
+ annot = new AnnotScreen(doc, dict, obj);
} else if(!strcmp(typeName, "PrinterMark")) {
- annot = new Annot(xref, dict, catalog, obj);
+ annot = new Annot(doc, dict, obj);
} else if (!strcmp(typeName, "TrapNet")) {
- annot = new Annot(xref, dict, catalog, obj);
+ annot = new Annot(doc, dict, obj);
} else if (!strcmp(typeName, "Watermark")) {
- annot = new Annot(xref, dict, catalog, obj);
+ annot = new Annot(doc, dict, obj);
} else if (!strcmp(typeName, "3D")) {
- annot = new Annot3D(xref, dict, catalog, obj);
+ annot = new Annot3D(doc, dict, obj);
} else if (!strcmp(typeName, "Popup")) {
/* Popup annots are already handled by markup annots
* Here we only care about popup annots without a
@@ -5180,13 +5182,13 @@ Annot *Annots::createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj
Object obj2;
if (dict->lookup("Parent", &obj2)->isNull())
- annot = new AnnotPopup(xref, dict, catalog, obj);
+ annot = new AnnotPopup(doc, dict, obj);
else
annot = NULL;
obj2.free();
} else {
- annot = new Annot(xref, dict, catalog, obj);
+ annot = new Annot(doc, dict, obj);
}
}
obj1.free();
diff --git a/poppler/Annot.h b/poppler/Annot.h
index 5796acb..64ad7f0 100644
--- a/poppler/Annot.h
+++ b/poppler/Annot.h
@@ -39,10 +39,10 @@
class XRef;
class Gfx;
-class Catalog;
class CharCodeToUnicode;
class GfxFont;
class GfxResources;
+class PDFDoc;
class Form;
class FormWidget;
class FormField;
@@ -455,9 +455,9 @@ public:
type3D // 3D 25
};
- Annot(XRef *xrefA, PDFRectangle *rectA, Catalog *catalog);
- Annot(XRef *xrefA, Dict *dict, Catalog *catalog);
- Annot(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ Annot(PDFDoc *docA, PDFRectangle *rectA);
+ Annot(PDFDoc *docA, Dict *dict);
+ Annot(PDFDoc *docA, Dict *dict, Object *obj);
GBool isOk() { return ok; }
void incRefCnt();
@@ -488,6 +488,7 @@ public:
void setAppearanceState(const char *state);
// getters
+ PDFDoc *getDoc() const { return doc; }
XRef *getXRef() const { return xref; }
GBool getHasRef() const { return hasRef; }
Ref getRef() const { return ref; }
@@ -514,7 +515,7 @@ private:
void readArrayNum(Object *pdfArray, int key, double *value);
// write vStr[i:j[ in appearBuf
- void initialize (XRef *xrefA, Dict *dict, Catalog *catalog);
+ void initialize (PDFDoc *docA, Dict *dict);
protected:
@@ -555,6 +556,7 @@ protected:
OCGs *optContentConfig; // Optional content config
Object oc; // OC
+ PDFDoc *doc;
XRef *xref; // the xref table for this PDF file
Ref ref; // object ref identifying this annotation
GooString *appearBuf;
@@ -572,8 +574,8 @@ protected:
class AnnotPopup: public Annot {
public:
- AnnotPopup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog);
- AnnotPopup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotPopup(PDFDoc *docA, PDFRectangle *rect);
+ AnnotPopup(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotPopup();
Object *getParent(Object *obj) { return parent.fetch (xref, obj); }
@@ -584,7 +586,7 @@ public:
void setOpen(GBool openA);
protected:
- void initialize(XRef *xrefA, Dict *dict, Catalog *catalog);
+ void initialize(PDFDoc *docA, Dict *dict);
Object parent; // Parent
GBool open; // Open
@@ -601,8 +603,8 @@ public:
replyTypeGroup // Group
};
- AnnotMarkup(XRef *xrefA, PDFRectangle *rect, Catalog *catalog);
- AnnotMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotMarkup(PDFDoc *docA, PDFRectangle *rect);
+ AnnotMarkup(PDFDoc *docA, Dict *dict, Object *obj);
virtual ~AnnotMarkup();
// getters
@@ -636,7 +638,7 @@ protected:
AnnotExternalDataType exData; // ExData
private:
- void initialize(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ void initialize(PDFDoc *docA, Dict *dict, Object *obj);
};
//------------------------------------------------------------------------
@@ -658,8 +660,8 @@ public:
stateNone // None
};
- AnnotText(XRef *xrefA, PDFRectangle *rect, Catalog *catalog);
- AnnotText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotText(PDFDoc *docA, PDFRectangle *rect);
+ AnnotText(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotText();
virtual void draw(Gfx *gfx, GBool printing);
@@ -674,7 +676,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
GBool open; // Open (Default false)
GooString *icon; // Name (Default Note)
@@ -691,8 +693,8 @@ private:
class AnnotMovie: public Annot {
public:
- AnnotMovie(XRef *xrefA, PDFRectangle *rect, Movie *movieA, Catalog *catalog);
- AnnotMovie(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotMovie(PDFDoc *docA, PDFRectangle *rect, Movie *movieA);
+ AnnotMovie(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotMovie();
virtual void draw(Gfx *gfx, GBool printing);
@@ -701,7 +703,7 @@ class AnnotMovie: public Annot {
Movie* getMovie() { return movie; }
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
GooString* title; // T
Movie* movie; // Movie + A
@@ -715,8 +717,8 @@ class AnnotMovie: public Annot {
class AnnotScreen: public Annot {
public:
- AnnotScreen(XRef *xrefA, PDFRectangle *rect, Catalog *catalog);
- AnnotScreen(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotScreen(PDFDoc *docA, PDFRectangle *rect);
+ AnnotScreen(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotScreen();
GooString* getTitle() { return title; }
@@ -726,7 +728,7 @@ class AnnotScreen: public Annot {
Object* getAdditionActions() { return &additionAction; }
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
GooString* title; // T
@@ -751,8 +753,8 @@ public:
effectPush // P
};
- AnnotLink(XRef *xrefA, PDFRectangle *rect, Catalog *catalog);
- AnnotLink(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotLink(PDFDoc *docA, PDFRectangle *rect);
+ AnnotLink(PDFDoc *docA, Dict *dict, Object *obj);
virtual ~AnnotLink();
virtual void draw(Gfx *gfx, GBool printing);
@@ -765,7 +767,7 @@ public:
protected:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
LinkAction *action; // A, Dest
AnnotLinkEffect linkEffect; // H (Default I)
@@ -793,8 +795,8 @@ public:
intentFreeTextTypeWriter // FreeTextTypeWriter
};
- AnnotFreeText(XRef *xrefA, PDFRectangle *rect, GooString *da, Catalog *catalog);
- AnnotFreeText(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, GooString *da);
+ AnnotFreeText(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotFreeText();
// getters
@@ -810,7 +812,7 @@ public:
protected:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
// required
GooString *appearanceString; // DA
@@ -845,8 +847,8 @@ public:
captionPosTop // Top
};
- AnnotLine(XRef *xrefA, PDFRectangle *rect, PDFRectangle *lRect, Catalog *catalog);
- AnnotLine(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotLine(PDFDoc *docA, PDFRectangle *rect, PDFRectangle *lRect);
+ AnnotLine(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotLine();
virtual void draw(Gfx *gfx, GBool printing);
@@ -871,7 +873,7 @@ public:
protected:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
// required
AnnotCoord *coord1, *coord2;
@@ -900,9 +902,9 @@ protected:
class AnnotTextMarkup: public AnnotMarkup {
public:
- AnnotTextMarkup(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType,
- AnnotQuadrilaterals *quadPoints, Catalog *catalog);
- AnnotTextMarkup(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotTextMarkup(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType,
+ AnnotQuadrilaterals *quadPoints);
+ AnnotTextMarkup(PDFDoc *docA, Dict *dict, Object *obj);
virtual ~AnnotTextMarkup();
virtual void draw(Gfx *gfx, GBool printing);
@@ -911,7 +913,7 @@ public:
protected:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
AnnotQuadrilaterals *quadrilaterals; // QuadPoints
};
@@ -923,8 +925,8 @@ protected:
class AnnotStamp: public AnnotMarkup {
public:
- AnnotStamp(XRef *xrefA, PDFRectangle *rect, Catalog *catalog);
- AnnotStamp(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotStamp(PDFDoc *docA, PDFRectangle *rect);
+ AnnotStamp(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotStamp();
// getters
@@ -932,7 +934,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
GooString *icon; // Name (Default Draft)
};
@@ -944,8 +946,8 @@ private:
class AnnotGeometry: public AnnotMarkup {
public:
- AnnotGeometry(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType, Catalog *catalog);
- AnnotGeometry(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotGeometry(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType);
+ AnnotGeometry(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotGeometry();
virtual void draw(Gfx *gfx, GBool printing);
@@ -957,7 +959,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
AnnotColor *interiorColor; // IC
AnnotBorderEffect *borderEffect; // BE
@@ -977,9 +979,8 @@ public:
polygonDimension // PolygonDimension
};
- AnnotPolygon(XRef *xrefA, PDFRectangle *rect, AnnotSubtype subType,
- AnnotPath *path, Catalog *catalog);
- AnnotPolygon(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotPolygon(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType, AnnotPath *path);
+ AnnotPolygon(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotPolygon();
// getters
@@ -992,7 +993,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
// required
AnnotPath *vertices; // Vertices
@@ -1020,8 +1021,8 @@ public:
symbolP // P
};
- AnnotCaret(XRef *xrefA, PDFRectangle *rect, Catalog *catalog);
- AnnotCaret(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotCaret(PDFDoc *docA, PDFRectangle *rect);
+ AnnotCaret(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotCaret();
// getters
@@ -1030,7 +1031,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
AnnotCaretSymbol symbol; // Sy (Default None)
PDFRectangle *caretRect; // RD (combined with Rect)
@@ -1043,8 +1044,8 @@ private:
class AnnotInk: public AnnotMarkup {
public:
- AnnotInk(XRef *xrefA, PDFRectangle *rect, AnnotPath **paths, int n_paths, Catalog *catalog);
- AnnotInk(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotInk(PDFDoc *docA, PDFRectangle *rect, AnnotPath **paths, int n_paths);
+ AnnotInk(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotInk();
// getters
@@ -1053,7 +1054,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
// required
AnnotPath **inkList; // InkList
@@ -1071,8 +1072,8 @@ private:
class AnnotFileAttachment: public AnnotMarkup {
public:
- AnnotFileAttachment(XRef *xrefA, PDFRectangle *rect, GooString *filename, Catalog *catalog);
- AnnotFileAttachment(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotFileAttachment(PDFDoc *docA, PDFRectangle *rect, GooString *filename);
+ AnnotFileAttachment(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotFileAttachment();
virtual void draw(Gfx *gfx, GBool printing);
@@ -1083,7 +1084,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
// required
Object file; // FS
@@ -1099,8 +1100,8 @@ private:
class AnnotSound: public AnnotMarkup {
public:
- AnnotSound(XRef *xrefA, PDFRectangle *rect, Sound *soundA, Catalog *catalog);
- AnnotSound(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ AnnotSound(PDFDoc *docA, PDFRectangle *rect, Sound *soundA);
+ AnnotSound(PDFDoc *docA, Dict *dict, Object *obj);
~AnnotSound();
virtual void draw(Gfx *gfx, GBool printing);
@@ -1111,7 +1112,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
// required
Sound *sound; // Sound
@@ -1134,8 +1135,8 @@ public:
highlightModePush // P,T
};
- AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
- AnnotWidget(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj, FormField *fieldA);
+ AnnotWidget(PDFDoc *docA, Dict *dict, Object *obj);
+ AnnotWidget(PDFDoc *docA, Dict *dict, Object *obj, FormField *fieldA);
virtual ~AnnotWidget();
virtual void draw(Gfx *gfx, GBool printing);
@@ -1154,7 +1155,7 @@ public:
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
void drawText(GooString *text, GooString *da, GfxResources *resources,
GBool multiline, int comb, int quadding,
@@ -1225,15 +1226,15 @@ class Annot3D: public Annot {
};
public:
- Annot3D(XRef *xrefA, PDFRectangle *rect, Catalog *catalog);
- Annot3D(XRef *xrefA, Dict *dict, Catalog *catalog, Object *obj);
+ Annot3D(PDFDoc *docA, PDFRectangle *rect);
+ Annot3D(PDFDoc *docA, Dict *dict, Object *obj);
~Annot3D();
// getters
private:
- void initialize(XRef *xrefA, Catalog *catalog, Dict *dict);
+ void initialize(PDFDoc *docA, Dict *dict);
Activation *activation; // 3DA
};
@@ -1246,7 +1247,7 @@ class Annots {
public:
// Build a list of Annot objects.
- Annots(XRef *xref, Catalog *catalog, Object *annotsObj);
+ Annots(PDFDoc *docA, Object *annotsObj);
~Annots();
@@ -1256,9 +1257,10 @@ public:
void appendAnnot(Annot *annot);
private:
- Annot* createAnnot(XRef *xref, Dict* dict, Catalog *catalog, Object *obj);
+ Annot* createAnnot(Dict* dict, Object *obj);
Annot *findAnnot(Ref *ref);
+ PDFDoc *doc;
Annot **annots;
int nAnnots;
int size;
diff --git a/poppler/Catalog.cc b/poppler/Catalog.cc
index fd418b0..664c421 100644
--- a/poppler/Catalog.cc
+++ b/poppler/Catalog.cc
@@ -116,11 +116,6 @@ Catalog::Catalog(PDFDoc *docA) {
// get the ViewerPreferences dictionary
catDict.dictLookup("ViewerPreferences", &viewerPreferences);
-
- // perform form-related loading after all widgets have been loaded
- if (getForm())
- getForm()->postWidgetsLoad(this);
-
catDict.free();
return;
@@ -871,7 +866,9 @@ Form *Catalog::getForm()
{
if (!form) {
if (acroForm.isDict()) {
- form = new Form(xref,&acroForm);
+ form = new Form(doc, &acroForm);
+ // perform form-related loading after all widgets have been loaded
+ form->postWidgetsLoad();
}
}
diff --git a/poppler/Form.cc b/poppler/Form.cc
index 80ff935..f2b6604 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -34,6 +34,7 @@
#include "Dict.h"
#include "Gfx.h"
#include "Form.h"
+#include "PDFDoc.h"
#include "XRef.h"
#include "PDFDocEncoding.h"
#include "Annot.h"
@@ -86,13 +87,13 @@ void FormWidget::print(int indent) {
}
#endif
-void FormWidget::createWidgetAnnotation(Catalog *catalog) {
+void FormWidget::createWidgetAnnotation(PDFDoc *docA) {
if (widget)
return;
Object obj1;
obj1.initRef(ref.num, ref.gen);
- widget = new AnnotWidget(xref, obj.getDict(), catalog, &obj1, field);
+ widget = new AnnotWidget(docA, obj.getDict(), &obj1, field);
obj1.free();
}
@@ -612,13 +613,13 @@ void FormField::fillChildrenSiblingsID()
}
}
-void FormField::createWidgetAnnotations(Catalog *catalog) {
+void FormField::createWidgetAnnotations(PDFDoc *docA) {
if (terminal) {
for (int i = 0; i < numChildren; i++)
- widgets[i]->createWidgetAnnotation(catalog);
+ widgets[i]->createWidgetAnnotation(docA);
} else {
for (int i = 0; i < numChildren; i++)
- children[i]->createWidgetAnnotations(catalog);
+ children[i]->createWidgetAnnotations(docA);
}
}
@@ -1241,11 +1242,12 @@ void FormFieldSignature::print(int indent)
// Form
//------------------------------------------------------------------------
-Form::Form(XRef *xrefA, Object* acroFormA)
+Form::Form(PDFDoc *docA, Object* acroFormA)
{
Object obj1;
- xref = xrefA;
+ doc = docA;
+ xref = doc->getXRef();
acroForm = acroFormA;
size = 0;
@@ -1308,7 +1310,7 @@ Form::Form(XRef *xrefA, Object* acroFormA)
}
std::set<int> usedParents;
- rootFields[numFields++] = createFieldFromDict (&obj2, xrefA, oref.getRef(), NULL, &usedParents);
+ rootFields[numFields++] = createFieldFromDict (&obj2, xref, oref.getRef(), NULL, &usedParents);
obj2.free();
oref.free();
@@ -1394,7 +1396,7 @@ FormField *Form::createFieldFromDict (Object* obj, XRef *xrefA, const Ref& pref,
return field;
}
-void Form::postWidgetsLoad (Catalog *catalog)
+void Form::postWidgetsLoad()
{
// We create the widget annotations associated to
// every form widget here, because the AnnotWidget constructor
@@ -1402,7 +1404,7 @@ void Form::postWidgetsLoad (Catalog *catalog)
// a FormWidget the Catalog is still creating the form object
for (int i = 0; i < numFields; i++) {
rootFields[i]->fillChildrenSiblingsID();
- rootFields[i]->createWidgetAnnotations(catalog);
+ rootFields[i]->createWidgetAnnotations(doc);
}
}
diff --git a/poppler/Form.h b/poppler/Form.h
index ba802ec..3fb6a4a 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -29,9 +29,9 @@ class Dict;
class Annot;
class AnnotWidget;
class Annots;
-class Catalog;
class LinkAction;
class GfxResources;
+class PDFDoc;
enum FormFieldType {
formButton,
@@ -106,7 +106,7 @@ public:
// decode id and retrieve pageNum and fieldNum
static void decodeID (unsigned id, unsigned* pageNum, unsigned* fieldNum);
- void createWidgetAnnotation(Catalog *catalog);
+ void createWidgetAnnotation(PDFDoc *docA);
AnnotWidget *getWidgetAnnotation() const { return widget; }
#ifdef DEBUG_FORMS
@@ -285,7 +285,7 @@ public:
// only implemented in FormFieldButton
virtual void fillChildrenSiblingsID ();
- void createWidgetAnnotations(Catalog *catalog);
+ void createWidgetAnnotations(PDFDoc *docA);
#ifdef DEBUG_FORMS
void printTree(int indent = 0);
@@ -489,7 +489,7 @@ public:
class Form {
public:
- Form(XRef *xrefA, Object* acroForm);
+ Form(PDFDoc *docA, Object* acroForm);
~Form();
@@ -511,11 +511,12 @@ public:
FormWidget* findWidgetByRef (Ref aref);
- void postWidgetsLoad(Catalog *catalog);
+ void postWidgetsLoad();
private:
FormField** rootFields;
int numFields;
int size;
+ PDFDoc *doc;
XRef* xref;
Object *acroForm;
GBool needAppearances;
diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc
index ae08570..9c9c109 100644
--- a/poppler/PSOutputDev.cc
+++ b/poppler/PSOutputDev.cc
@@ -1453,7 +1453,7 @@ void PSOutputDev::writeDocSetup(PDFDoc *doc, Catalog *catalog,
if ((resDict = page->getResourceDict())) {
setupResources(resDict);
}
- annots = new Annots(xref, catalog, page->getAnnots(&obj1));
+ annots = new Annots(doc, page->getAnnots(&obj1));
obj1.free();
for (i = 0; i < annots->getNumAnnots(); ++i) {
if (annots->getAnnot(i)->getAppearance(&obj1)->isStream()) {
diff --git a/poppler/Page.cc b/poppler/Page.cc
index 7c48aad..2650d5c 100644
--- a/poppler/Page.cc
+++ b/poppler/Page.cc
@@ -349,7 +349,7 @@ Page::~Page() {
Annots *Page::getAnnots() {
if (!annots) {
Object obj;
- annots = new Annots(xref, doc->getCatalog(), getAnnots(&obj));
+ annots = new Annots(doc, getAnnots(&obj));
obj.free();
}
More information about the poppler
mailing list