X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=pdf2swf%2Fxpdf%2FLink.cc;h=af64c8bef5d713977649ad9e2e0909ee4fbee81f;hp=154a5772a1f713d195d287047b44b8da98e56d63;hb=50dd339d3d6262763616efe8d7ee415ab19befb9;hpb=33b4efceb35f7582426665aba920fd950edc0602 diff --git a/pdf2swf/xpdf/Link.cc b/pdf2swf/xpdf/Link.cc index 154a577..af64c8b 100644 --- a/pdf2swf/xpdf/Link.cc +++ b/pdf2swf/xpdf/Link.cc @@ -2,7 +2,7 @@ // // Link.cc // -// Copyright 1996 Derek B. Noonburg +// Copyright 1996-2002 Glyph & Cog, LLC // //======================================================================== @@ -10,6 +10,7 @@ #pragma implementation #endif +#include #include #include #include "gmem.h" @@ -28,32 +29,27 @@ static GString *getFileSpecName(Object *fileSpecObj); // LinkDest //------------------------------------------------------------------------ -LinkDest::LinkDest(Array *a, GBool pageIsRef1) { +LinkDest::LinkDest(Array *a) { Object obj1, obj2; // initialize fields - pageIsRef = pageIsRef1; left = bottom = right = top = zoom = 0; ok = gFalse; // get page - if (pageIsRef) { - if (!a->getNF(0, &obj1)->isRef()) { - if(obj1.getType()!=objInt) - error(-1, "Bad annotation destination (1) type=%d", obj1.getType()); - goto err2; - } + a->getNF(0, &obj1); + if (obj1.isInt()) { + pageNum = obj1.getInt() + 1; + pageIsRef = gFalse; + } else if (obj1.isRef()) { pageRef.num = obj1.getRefNum(); pageRef.gen = obj1.getRefGen(); - obj1.free(); + pageIsRef = gTrue; } else { - if (!a->get(0, &obj1)->isInt()) { - error(-1, "Bad annotation destination (2)"); - goto err2; - } - pageNum = obj1.getInt() + 1; - obj1.free(); + error(-1, "Bad annotation destination"); + goto err2; } + obj1.free(); // get destination type a->get(1, &obj1); @@ -221,7 +217,7 @@ LinkGoTo::LinkGoTo(Object *destObj) { // destination dictionary } else if (destObj->isArray()) { - dest = new LinkDest(destObj->getArray(), gTrue); + dest = new LinkDest(destObj->getArray()); if (!dest->isOk()) { delete dest; dest = NULL; @@ -259,7 +255,7 @@ LinkGoToR::LinkGoToR(Object *fileSpecObj, Object *destObj) { // destination dictionary } else if (destObj->isArray()) { - dest = new LinkDest(destObj->getArray(), gFalse); + dest = new LinkDest(destObj->getArray()); if (!dest->isOk()) { delete dest; dest = NULL; @@ -385,8 +381,8 @@ LinkNamed::~LinkNamed() { // LinkUnknown //------------------------------------------------------------------------ -LinkUnknown::LinkUnknown(char *action1) { - action = new GString(action1); +LinkUnknown::LinkUnknown(char *actionA) { + action = new GString(actionA); } LinkUnknown::~LinkUnknown() { @@ -446,13 +442,16 @@ Link::Link(Dict *dict, GString *baseURI) { } // get border - borderW = 0; + borderW = 1; if (!dict->lookup("Border", &obj1)->isNull()) { - if (obj1.isArray() && obj1.arrayGet(2, &obj2)->isNum()) - borderW = obj2.getNum(); - else - error(-1, "Bad annotation border"); - obj2.free(); + if (obj1.isArray() && obj1.arrayGetLength() >= 3) { + if (obj1.arrayGet(2, &obj2)->isNum()) { + borderW = obj2.getNum(); + } else { + error(-1, "Bad annotation border"); + } + obj2.free(); + } } obj1.free(); @@ -579,7 +578,7 @@ Links::~Links() { LinkAction *Links::find(double x, double y) { int i; - for (i = 0; i < numLinks; ++i) { + for (i = numLinks - 1; i >= 0; --i) { if (links[i]->inRect(x, y)) { return links[i]->getAction(); }