upgrade to xpdf 3.00.
[swftools.git] / pdf2swf / xpdf / Link.h
index 4c644b8..9f04420 100644 (file)
@@ -2,14 +2,16 @@
 //
 // Link.h
 //
-// Copyright 1996-2002 Glyph & Cog, LLC
+// Copyright 1996-2003 Glyph & Cog, LLC
 //
 //========================================================================
 
 #ifndef LINK_H
 #define LINK_H
 
-#ifdef __GNUC__
+#include <aconf.h>
+
+#ifdef USE_GCC_PRAGMAS
 #pragma interface
 #endif
 
@@ -29,6 +31,7 @@ enum LinkActionKind {
   actionLaunch,                        // launch app (or open document)
   actionURI,                   // URI
   actionNamed,                 // named action
+  actionMovie,                 // movie action
   actionUnknown                        // anything else
 };
 
@@ -43,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);
 };
 
 //------------------------------------------------------------------------
@@ -240,6 +253,30 @@ private:
 };
 
 //------------------------------------------------------------------------
+// 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
 //------------------------------------------------------------------------
 
@@ -265,6 +302,42 @@ private:
 };
 
 //------------------------------------------------------------------------
+// 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
 //------------------------------------------------------------------------
 
@@ -287,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?
 };