X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=pdf%2Fxpdf%2FLink.h;h=aa8727faec7eb3f15cbba32494f365c44b884923;hb=2af881bd90a35b4f1343b027ba7c3c0464930fb1;hp=71ad0c5cd1b03e549c2fb5fd91a09b7793c26a0b;hpb=50e9d31c05e9ca11ad43cc570556094782c1b956;p=evince.git diff --git a/pdf/xpdf/Link.h b/pdf/xpdf/Link.h index 71ad0c5c..aa8727fa 100644 --- a/pdf/xpdf/Link.h +++ b/pdf/xpdf/Link.h @@ -2,14 +2,16 @@ // // Link.h // -// Copyright 1996 Derek B. Noonburg +// Copyright 1996-2003 Glyph & Cog, LLC // //======================================================================== #ifndef LINK_H #define LINK_H -#ifdef __GNUC__ +#include + +#ifdef USE_GCC_PRAGMAS #pragma interface #endif @@ -28,6 +30,8 @@ enum LinkActionKind { actionGoToR, // go to destination in new file actionLaunch, // launch app (or open document) actionURI, // URI + actionNamed, // named action + actionMovie, // movie action actionUnknown // anything else }; @@ -42,6 +46,16 @@ public: // Check link action type. virtual LinkActionKind getKind() = 0; + + // Parse a destination (old-style action) name, string, or array. + static LinkAction *parseDest(Object *obj); + + // Parse an action dictionary. + static LinkAction *parseAction(Object *obj, GString *baseURI = NULL); + + // Extract a file name from a file specification (string or + // dictionary). + static GString *getFileSpecName(Object *fileSpecObj); }; //------------------------------------------------------------------------ @@ -62,10 +76,8 @@ enum LinkDestKind { class LinkDest { public: - // Build a LinkDest from the array. If is true, the - // page is specified by an object reference; otherwise the page is - // specified by a (zero-relative) page number. - LinkDest(Array *a, GBool pageIsRef1); + // Build a LinkDest from the array. + LinkDest(Array *a); // Copy a LinkDest. LinkDest *copy() { return new LinkDest(this); } @@ -218,6 +230,52 @@ private: GString *uri; // the URI }; +//------------------------------------------------------------------------ +// LinkNamed +//------------------------------------------------------------------------ + +class LinkNamed: public LinkAction { +public: + + // Build a LinkNamed given the action name. + LinkNamed(Object *nameObj); + + virtual ~LinkNamed(); + + virtual GBool isOk() { return name != NULL; } + + virtual LinkActionKind getKind() { return actionNamed; } + GString *getName() { return name; } + +private: + + GString *name; +}; + +//------------------------------------------------------------------------ +// LinkMovie +//------------------------------------------------------------------------ + +class LinkMovie: public LinkAction { +public: + + LinkMovie(Object *annotObj, Object *titleObj); + + virtual ~LinkMovie(); + + virtual GBool isOk() { return annotRef.num >= 0 || title != NULL; } + + virtual LinkActionKind getKind() { return actionMovie; } + GBool hasAnnotRef() { return annotRef.num >= 0; } + Ref *getAnnotRef() { return &annotRef; } + GString *getTitle() { return title; } + +private: + + Ref annotRef; + GString *title; +}; + //------------------------------------------------------------------------ // LinkUnknown //------------------------------------------------------------------------ @@ -226,7 +284,7 @@ class LinkUnknown: public LinkAction { public: // Build a LinkUnknown with the specified action type. - LinkUnknown(char *action1); + LinkUnknown(char *actionA); // Destructor. virtual ~LinkUnknown(); @@ -243,6 +301,42 @@ private: GString *action; // action subtype }; +//------------------------------------------------------------------------ +// LinkBorderStyle +//------------------------------------------------------------------------ + +enum LinkBorderType { + linkBorderSolid, + linkBorderDashed, + linkBorderEmbossed, + linkBorderEngraved, + linkBorderUnderlined +}; + +class LinkBorderStyle { +public: + + LinkBorderStyle(LinkBorderType typeA, double widthA, + double *dashA, int dashLengthA, + double rA, double gA, double bA); + ~LinkBorderStyle(); + + LinkBorderType getType() { return type; } + double getWidth() { return width; } + void getDash(double **dashA, int *dashLengthA) + { *dashA = dash; *dashLengthA = dashLength; } + void getColor(double *rA, double *gA, double *bA) + { *rA = r; *gA = g; *bA = b; } + +private: + + LinkBorderType type; + double width; + double *dash; + int dashLength; + double r, g, b; +}; + //------------------------------------------------------------------------ // Link //------------------------------------------------------------------------ @@ -266,16 +360,18 @@ public: // Get action. LinkAction *getAction() { return action; } - // Get border corners and width. - void getBorder(double *xa1, double *ya1, double *xa2, double *ya2, - double *wa) - { *xa1 = x1; *ya1 = y1; *xa2 = x2; *ya2 = y2; *wa = borderW; } + // Get the link rectangle. + void getRect(double *xa1, double *ya1, double *xa2, double *ya2) + { *xa1 = x1; *ya1 = y1; *xa2 = x2; *ya2 = y2; } + + // Get the border style info. + LinkBorderStyle *getBorderStyle() { return borderStyle; } private: double x1, y1; // lower left corner double x2, y2; // upper right corner - double borderW; // border width + LinkBorderStyle *borderStyle; // border style LinkAction *action; // action GBool ok; // is link valid? }; @@ -294,15 +390,15 @@ public: ~Links(); // Iterate through list of links. - int getNumLinks() { return numLinks; } - Link *getLink(int i) { return links[i]; } + int getNumLinks() const { return numLinks; } + Link *getLink(int i) const { return links[i]; } // If point , is in a link, return the associated action; // else return NULL. - LinkAction *find(double x, double y); + LinkAction *find(double x, double y) const; // Return true if , is in a link. - GBool onLink(double x, double y); + GBool onLink(double x, double y) const; private: