diff options
Diffstat (limited to 'Build/source/libs/poppler/poppler-src/poppler/Annot.h')
-rw-r--r-- | Build/source/libs/poppler/poppler-src/poppler/Annot.h | 1669 |
1 files changed, 0 insertions, 1669 deletions
diff --git a/Build/source/libs/poppler/poppler-src/poppler/Annot.h b/Build/source/libs/poppler/poppler-src/poppler/Annot.h deleted file mode 100644 index 83c10b397b1..00000000000 --- a/Build/source/libs/poppler/poppler-src/poppler/Annot.h +++ /dev/null @@ -1,1669 +0,0 @@ -//======================================================================== -// -// Annot.h -// -// Copyright 2000-2003 Glyph & Cog, LLC -// -//======================================================================== - -//======================================================================== -// -// Modified under the Poppler project - http://poppler.freedesktop.org -// -// All changes made under the Poppler project to this file are licensed -// under GPL version 2 or later -// -// Copyright (C) 2006 Scott Turner <scotty1024@mac.com> -// Copyright (C) 2007, 2008 Julien Rebetez <julienr@svn.gnome.org> -// Copyright (C) 2007-2011, 2013, 2015 Carlos Garcia Campos <carlosgc@gnome.org> -// Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez@gmail.com> -// Copyright (C) 2008 Michael Vrable <mvrable@cs.ucsd.edu> -// Copyright (C) 2008 Hugo Mercier <hmercier31@gmail.com> -// Copyright (C) 2008 Pino Toscano <pino@kde.org> -// Copyright (C) 2008 Tomas Are Haavet <tomasare@gmail.com> -// Copyright (C) 2009-2011, 2013, 2016-2018 Albert Astals Cid <aacid@kde.org> -// Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso@hotmail.it> -// Copyright (C) 2012, 2015 Tobias Koenig <tokoe@kdab.com> -// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag@alfa.de> -// Copyright (C) 2013, 2017 Adrian Johnson <ajohnson@redneon.com> -// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by the LiMux project of the city of Munich -// -// To see a description of the changes please see the Changelog file that -// came with your tarball or type make ChangeLog if you are building from git -// -//======================================================================== - -#ifndef ANNOT_H -#define ANNOT_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class XRef; -class Gfx; -class CharCodeToUnicode; -class GfxFont; -class GfxResources; -class Page; -class PDFDoc; -class Form; -class FormWidget; -class FormField; -class FormFieldButton; -class FormFieldText; -class FormFieldChoice; -class PDFRectangle; -class Movie; -class LinkAction; -class Sound; -class FileSpec; - -enum AnnotLineEndingStyle { - annotLineEndingSquare, // Square - annotLineEndingCircle, // Circle - annotLineEndingDiamond, // Diamond - annotLineEndingOpenArrow, // OpenArrow - annotLineEndingClosedArrow, // ClosedArrow - annotLineEndingNone, // None - annotLineEndingButt, // Butt - annotLineEndingROpenArrow, // ROpenArrow - annotLineEndingRClosedArrow, // RClosedArrow - annotLineEndingSlash // Slash -}; - -enum AnnotExternalDataType { - annotExternalDataMarkupUnknown, - annotExternalDataMarkup3D // Markup3D -}; - -//------------------------------------------------------------------------ -// AnnotCoord -//------------------------------------------------------------------------ - -class AnnotCoord { -public: - - AnnotCoord() : x(0), y(0) { } - AnnotCoord(double _x, double _y) : x(_x), y(_y) { } - - double getX() const { return x; } - double getY() const { return y; } - -protected: - - double x, y; -}; - -//------------------------------------------------------------------------ -// AnnotPath -//------------------------------------------------------------------------ - -class AnnotPath { -public: - AnnotPath(); - AnnotPath(Array *array); - AnnotPath(AnnotCoord **coords, int coordLength); - ~AnnotPath(); - - AnnotPath(const AnnotPath &) = delete; - AnnotPath& operator=(const AnnotPath &other) = delete; - - double getX(int coord) const; - double getY(int coord) const; - AnnotCoord *getCoord(int coord) const; - int getCoordsLength() const { return coordsLength; } -protected: - AnnotCoord **coords; - int coordsLength; - - void parsePathArray(Array *array); -}; - -//------------------------------------------------------------------------ -// AnnotCalloutLine -//------------------------------------------------------------------------ - -class AnnotCalloutLine { -public: - - AnnotCalloutLine(double x1, double y1, double x2, double y2); - virtual ~AnnotCalloutLine() { } - - AnnotCalloutLine(const AnnotCalloutLine &) = delete; - AnnotCalloutLine& operator=(const AnnotCalloutLine &other) = delete; - - double getX1() const { return coord1.getX(); } - double getY1() const { return coord1.getY(); } - double getX2() const { return coord2.getX(); } - double getY2() const { return coord2.getY(); } - -protected: - - AnnotCoord coord1, coord2; -}; - -//------------------------------------------------------------------------ -// AnnotCalloutMultiLine -//------------------------------------------------------------------------ - -class AnnotCalloutMultiLine: public AnnotCalloutLine { -public: - - AnnotCalloutMultiLine(double x1, double y1, double x2, double y2, - double x3, double y3); - - double getX3() const { return coord3.getX(); } - double getY3() const { return coord3.getY(); } - -protected: - - AnnotCoord coord3; -}; - -//------------------------------------------------------------------------ -// AnnotBorderEffect -//------------------------------------------------------------------------ - -class AnnotBorderEffect { -public: - - enum AnnotBorderEffectType { - borderEffectNoEffect, // S - borderEffectCloudy // C - }; - - AnnotBorderEffect(Dict *dict); - - AnnotBorderEffectType getEffectType() const { return effectType; } - double getIntensity() const { return intensity; } - -private: - - AnnotBorderEffectType effectType; // S (Default S) - double intensity; // I (Default 0) -}; - -//------------------------------------------------------------------------ -// AnnotQuadrilateral -//------------------------------------------------------------------------ - -class AnnotQuadrilaterals { -public: - class AnnotQuadrilateral { - public: - AnnotQuadrilateral(double x1, double y1, double x2, double y2, double x3, - double y3, double x4, double y4); - - AnnotCoord coord1, coord2, coord3, coord4; - }; - - AnnotQuadrilaterals(Array *array, PDFRectangle *rect); - AnnotQuadrilaterals(AnnotQuadrilateral **quads, int quadsLength); - ~AnnotQuadrilaterals(); - - AnnotQuadrilaterals(const AnnotQuadrilaterals &) = delete; - AnnotQuadrilaterals& operator=(const AnnotQuadrilaterals &other) = delete; - - double getX1(int quadrilateral); - double getY1(int quadrilateral); - double getX2(int quadrilateral); - double getY2(int quadrilateral); - double getX3(int quadrilateral); - double getY3(int quadrilateral); - double getX4(int quadrilateral); - double getY4(int quadrilateral); - int getQuadrilateralsLength() const { return quadrilateralsLength; } -protected: - - AnnotQuadrilateral** quadrilaterals; - int quadrilateralsLength; -}; - -//------------------------------------------------------------------------ -// AnnotBorder -//------------------------------------------------------------------------ - -class AnnotBorder { -public: - enum AnnotBorderType { - typeArray, - typeBS - }; - - enum AnnotBorderStyle { - borderSolid, // Solid - borderDashed, // Dashed - borderBeveled, // Beveled - borderInset, // Inset - borderUnderlined // Underlined - }; - - virtual ~AnnotBorder(); - - AnnotBorder(const AnnotBorder &) = delete; - AnnotBorder& operator=(const AnnotBorder &other) = delete; - - virtual void setWidth(double new_width) { width = new_width; } - - virtual AnnotBorderType getType() const = 0; - virtual double getWidth() const { return width; } - virtual int getDashLength() const { return dashLength; } - virtual double *getDash() const { return dash; } - virtual AnnotBorderStyle getStyle() const { return style; } - - virtual Object writeToObject(XRef *xref) const = 0; - -protected: - AnnotBorder(); - - GBool parseDashArray(Object *dashObj); - - AnnotBorderType type; - double width; - static const int DASH_LIMIT = 10; // implementation note 82 in Appendix H. - int dashLength; - double *dash; - AnnotBorderStyle style; -}; - -//------------------------------------------------------------------------ -// AnnotBorderArray -//------------------------------------------------------------------------ - -class AnnotBorderArray: public AnnotBorder { -public: - AnnotBorderArray(); - AnnotBorderArray(Array *array); - - void setHorizontalCorner(double hc) { horizontalCorner = hc; } - void setVerticalCorner(double vc) { verticalCorner = vc; } - - double getHorizontalCorner() const { return horizontalCorner; } - double getVerticalCorner() const { return verticalCorner; } - -private: - AnnotBorderType getType() const override { return typeArray; } - Object writeToObject(XRef *xref) const override; - - double horizontalCorner; // (Default 0) - double verticalCorner; // (Default 0) - // double width; // (Default 1) (inherited from AnnotBorder) -}; - -//------------------------------------------------------------------------ -// AnnotBorderBS -//------------------------------------------------------------------------ - -class AnnotBorderBS: public AnnotBorder { -public: - - AnnotBorderBS(); - AnnotBorderBS(Dict *dict); - -private: - AnnotBorderType getType() const override { return typeBS; } - Object writeToObject(XRef *xref) const override; - - const char *getStyleName() const; - - // double width; // W (Default 1) (inherited from AnnotBorder) - // AnnotBorderStyle style; // S (Default S) (inherited from AnnotBorder) - // double *dash; // D (Default [3]) (inherited from AnnotBorder) -}; - -//------------------------------------------------------------------------ -// AnnotColor -//------------------------------------------------------------------------ - -class AnnotColor { -public: - - enum AnnotColorSpace { - colorTransparent = 0, - colorGray = 1, - colorRGB = 3, - colorCMYK = 4 - }; - - AnnotColor(); - AnnotColor(double gray); - AnnotColor(double r, double g, double b); - AnnotColor(double c, double m, double y, double k); - AnnotColor(Array *array, int adjust = 0); - - void adjustColor(int adjust); - - AnnotColorSpace getSpace() const { return (AnnotColorSpace) length; } - const double *getValues() const { return values; } - - Object writeToObject(XRef *xref) const; - -private: - - double values[4]; - int length; -}; - -//------------------------------------------------------------------------ -// AnnotIconFit -//------------------------------------------------------------------------ - -class AnnotIconFit { -public: - - enum AnnotIconFitScaleWhen { - scaleAlways, // A - scaleBigger, // B - scaleSmaller, // S - scaleNever // N - }; - - enum AnnotIconFitScale { - scaleAnamorphic, // A - scaleProportional // P - }; - - AnnotIconFit(Dict *dict); - - AnnotIconFitScaleWhen getScaleWhen() { return scaleWhen; } - AnnotIconFitScale getScale() { return scale; } - double getLeft() { return left; } - double getBottom() { return bottom; } - bool getFullyBounds() { return fullyBounds; } - -protected: - - AnnotIconFitScaleWhen scaleWhen; // SW (Default A) - AnnotIconFitScale scale; // S (Default P) - double left; // A (Default [0.5 0.5] - double bottom; // Only if scale is P - bool fullyBounds; // FB (Default false) -}; - -//------------------------------------------------------------------------ -// AnnotAppearance -//------------------------------------------------------------------------ - -class AnnotAppearance { -public: - - enum AnnotAppearanceType { - appearNormal, - appearRollover, - appearDown - }; - - AnnotAppearance(PDFDoc *docA, Object *dict); - ~AnnotAppearance(); - - // State is ignored if no subdictionary is present - Object getAppearanceStream(AnnotAppearanceType type, const char *state); - - // Access keys in normal appearance subdictionary (N) - GooString * getStateKey(int i); - int getNumStates(); - - // Removes all associated streams in the xref table. Caller is required to - // reset parent annotation's AP and AS after this call. - void removeAllStreams(); - - // Test if this AnnotAppearance references the specified stream - GBool referencesStream(Ref targetStreamRef); - -private: - static GBool referencesStream(Object *stateObj, Ref targetStreamRef); - void removeStream(Ref refToStream); - void removeStateStreams(Object *state); - -protected: - PDFDoc *doc; - XRef *xref; // the xref table for this PDF file - Object appearDict; // Annotation's AP -}; - -//------------------------------------------------------------------------ -// AnnotAppearanceCharacs -//------------------------------------------------------------------------ - -class AnnotAppearanceCharacs { -public: - - enum AnnotAppearanceCharacsTextPos { - captionNoIcon, // 0 - captionNoCaption, // 1 - captionBelow, // 2 - captionAbove, // 3 - captionRight, // 4 - captionLeft, // 5 - captionOverlaid // 6 - }; - - AnnotAppearanceCharacs(Dict *dict); - ~AnnotAppearanceCharacs(); - - AnnotAppearanceCharacs(const AnnotAppearanceCharacs &) = delete; - AnnotAppearanceCharacs& operator=(const AnnotAppearanceCharacs &) = delete; - - int getRotation() const { return rotation; } - const AnnotColor *getBorderColor() const { return borderColor; } - const AnnotColor *getBackColor() const { return backColor; } - const GooString *getNormalCaption() const { return normalCaption; } - const GooString *getRolloverCaption() const { return rolloverCaption; } - const GooString *getAlternateCaption() const { return alternateCaption; } - const AnnotIconFit *getIconFit() const { return iconFit; } - AnnotAppearanceCharacsTextPos getPosition() const { return position; } - -protected: - - int rotation; // R (Default 0) - AnnotColor *borderColor; // BC - AnnotColor *backColor; // BG - GooString *normalCaption; // CA - GooString *rolloverCaption; // RC - GooString *alternateCaption; // AC - // I - // RI - // IX - AnnotIconFit *iconFit; // IF - AnnotAppearanceCharacsTextPos position; // TP (Default 0) -}; - -//------------------------------------------------------------------------ -// AnnotAppearanceBBox -//------------------------------------------------------------------------ - -class AnnotAppearanceBBox -{ -public: - AnnotAppearanceBBox(PDFRectangle *init); - - void setBorderWidth(double w) { borderWidth = w; } - - // The following functions operate on coords relative to [origX origY] - void extendTo(double x, double y); - void getBBoxRect(double bbox[4]) const; - - // Get boundaries in page coordinates - double getPageXMin() const; - double getPageYMin() const; - double getPageXMax() const; - double getPageYMax() const; - -private: - double origX, origY, borderWidth; - double minX, minY, maxX, maxY; -}; - -//------------------------------------------------------------------------ -// AnnotAppearanceBuilder -//------------------------------------------------------------------------ - -class AnnotAppearanceBuilder { -public: - AnnotAppearanceBuilder(); - ~AnnotAppearanceBuilder(); - - AnnotAppearanceBuilder(const AnnotAppearanceBuilder &) = delete; - AnnotAppearanceBuilder& operator=(const AnnotAppearanceBuilder &) = delete; - - void setDrawColor(const AnnotColor *color, GBool fill); - void setLineStyleForBorder(const AnnotBorder *border); - void drawCircle(double cx, double cy, double r, GBool fill); - void drawCircleTopLeft(double cx, double cy, double r); - void drawCircleBottomRight(double cx, double cy, double r); - void drawFieldBorder(const FormField *field, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect); - bool drawFormField(const FormField *field, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect, const GooString *appearState, XRef *xref, bool *addedDingbatsResource); - - void writeString(const GooString &str); - - void append(const char *text); - void appendf(const char *fmt, ...) GOOSTRING_FORMAT; - - const GooString *buffer() const; - -private: - bool drawListBox(const FormFieldChoice *fieldChoice, const AnnotBorder *border, const PDFRectangle *rect, - const GooString *da, const GfxResources *resources, int quadding); - bool drawFormFieldButton(const FormFieldButton *field, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect, const GooString *appearState, XRef *xref, bool *addedDingbatsResource); - bool drawFormFieldText(const FormFieldText *fieldText, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect); - bool drawFormFieldChoice(const FormFieldChoice *fieldChoice, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect); - bool drawText(const GooString *text, const GooString *da, const GfxResources *resources, - const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect, - GBool multiline, int comb, int quadding, - GBool txField, GBool forceZapfDingbats, - XRef *xref, bool *addedDingbatsResource, // xref and addedDingbatsResource both must not be null if forceZapfDingbats is passed - GBool password); - - GooString *appearBuf; -}; - -//------------------------------------------------------------------------ -// Annot -//------------------------------------------------------------------------ - -class Annot { - friend class Annots; - friend class Page; -public: - enum AnnotFlag { - flagUnknown = 0x0000, - flagInvisible = 0x0001, - flagHidden = 0x0002, - flagPrint = 0x0004, - flagNoZoom = 0x0008, - flagNoRotate = 0x0010, - flagNoView = 0x0020, - flagReadOnly = 0x0040, - flagLocked = 0x0080, - flagToggleNoView = 0x0100, - flagLockedContents = 0x0200 - }; - - enum AnnotSubtype { - typeUnknown, // 0 - typeText, // Text 1 - typeLink, // Link 2 - typeFreeText, // FreeText 3 - typeLine, // Line 4 - typeSquare, // Square 5 - typeCircle, // Circle 6 - typePolygon, // Polygon 7 - typePolyLine, // PolyLine 8 - typeHighlight, // Highlight 9 - typeUnderline, // Underline 10 - typeSquiggly, // Squiggly 11 - typeStrikeOut, // StrikeOut 12 - typeStamp, // Stamp 13 - typeCaret, // Caret 14 - typeInk, // Ink 15 - typePopup, // Popup 16 - typeFileAttachment, // FileAttachment 17 - typeSound, // Sound 18 - typeMovie, // Movie 19 - typeWidget, // Widget 20 - typeScreen, // Screen 21 - typePrinterMark, // PrinterMark 22 - typeTrapNet, // TrapNet 23 - typeWatermark, // Watermark 24 - type3D, // 3D 25 - typeRichMedia // RichMedia 26 - }; - - /** - * Describes the additional actions of a screen or widget annotation. - */ - enum AdditionalActionsType { - actionCursorEntering, ///< Performed when the cursor enters the annotation's active area - actionCursorLeaving, ///< Performed when the cursor exists the annotation's active area - actionMousePressed, ///< Performed when the mouse button is pressed inside the annotation's active area - actionMouseReleased, ///< Performed when the mouse button is released inside the annotation's active area - actionFocusIn, ///< Performed when the annotation receives the input focus - actionFocusOut, ///< Performed when the annotation loses the input focus - actionPageOpening, ///< Performed when the page containing the annotation is opened - actionPageClosing, ///< Performed when the page containing the annotation is closed - actionPageVisible, ///< Performed when the page containing the annotation becomes visible - actionPageInvisible ///< Performed when the page containing the annotation becomes invisible - }; - - enum FormAdditionalActionsType { - actionFieldModified, ///< Performed when the when the user modifies the field - actionFormatField, ///< Performed before the field is formatted to display its value - actionValidateField, ///< Performed when the field value changes - actionCalculateField, ///< Performed when the field needs to be recalculated - }; - - Annot(PDFDoc *docA, PDFRectangle *rectA); - Annot(PDFDoc *docA, Object *dictObject); - Annot(PDFDoc *docA, Object *dictObject, Object *obj); - GBool isOk() { return ok; } - - void incRefCnt(); - void decRefCnt(); - - virtual void draw(Gfx *gfx, GBool printing); - // Get the resource dict of the appearance stream - virtual Object getAppearanceResDict(); - - GBool match(Ref *refA) - { return ref.num == refA->num && ref.gen == refA->gen; } - - double getXMin(); - double getYMin(); - double getXMax(); - double getYMax(); - - void setRect(PDFRectangle *rect); - void setRect(double x1, double y1, double x2, double y2); - - // Sets the annot contents to new_content - // new_content should never be NULL - virtual void setContents(GooString *new_content); - void setName(GooString *new_name); - void setModified(GooString *new_date); - void setFlags(Guint new_flags); - - void setBorder(AnnotBorder *new_border); // Takes ownership - - // The annotation takes the ownership of - // new_color. - void setColor(AnnotColor *new_color); - - 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; } - AnnotSubtype getType() const { return type; } - PDFRectangle *getRect() const { return rect; } - void getRect(double *x1, double *y1, double *x2, double *y2) const; - const GooString *getContents() const { return contents; } - int getPageNum() const { return page; } - const GooString *getName() const { return name; } - const GooString *getModified() const { return modified; } - Guint getFlags() const { return flags; } - AnnotAppearance *getAppearStreams() const { return appearStreams; } - const GooString *getAppearState() const { return appearState; } - AnnotBorder *getBorder() const { return border; } - AnnotColor *getColor() const { return color; } - int getTreeKey() const { return treeKey; } - - int getId() { return ref.num; } - - // Check if point is inside the annot rectangle. - GBool inRect(double x, double y) const; - - static void layoutText(const GooString *text, GooString *outBuf, int *i, const GfxFont *font, - double *width, double widthLimit, int *charCount, - GBool noReencode); - -private: - void readArrayNum(Object *pdfArray, int key, double *value); - // write vStr[i:j[ in appearBuf - - void initialize (PDFDoc *docA, Dict *dict); - void setPage (int new_page, GBool updateP); // Called by Page::addAnnot and Annots ctor - - -protected: - virtual ~Annot(); - virtual void removeReferencedObjects(); // Called by Page::removeAnnot - Object createForm(const GooString *appearBuf, double *bbox, GBool transparencyGroup, Dict *resDict); - Dict *createResourcesDict(const char *formName, Object &&formStream, const char *stateName, - double opacity, const char *blendMode); - GBool isVisible(GBool printing); - int getRotation() const; - - // Updates the field key of the annotation dictionary - // and sets M to the current time - void update(const char *key, Object &&value); - - // Delete appearance streams and reset appearance state - void invalidateAppearance(); - - Object annotObj; - - int refCnt; - - // required data - AnnotSubtype type; // Annotation type - PDFRectangle *rect; // Rect - - // optional data - GooString *contents; // Contents - GooString *name; // NM - GooString *modified; // M - int page; // P - Guint flags; // F (must be a 32 bit unsigned int) - AnnotAppearance *appearStreams; // AP - Object appearance; // a reference to the Form XObject stream - // for the normal appearance - AnnotAppearanceBBox *appearBBox; // BBox of generated appearance - GooString *appearState; // AS - int treeKey; // Struct Parent; - Object oc; // OC - - PDFDoc *doc; - XRef *xref; // the xref table for this PDF file - Ref ref; // object ref identifying this annotation - AnnotBorder *border; // Border, BS - AnnotColor *color; // C - GBool ok; - - bool hasRef; -#ifdef MULTITHREADED - GooMutex mutex; -#endif -}; - -//------------------------------------------------------------------------ -// AnnotPopup -//------------------------------------------------------------------------ - -class AnnotPopup: public Annot { -public: - AnnotPopup(PDFDoc *docA, PDFRectangle *rect); - AnnotPopup(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotPopup(); - - Object *getParentNF() { return &parent; } - void setParent(Object *parentA); - void setParent(Annot *parentA); - GBool getOpen() const { return open; } - void setOpen(GBool openA); - -protected: - void initialize(PDFDoc *docA, Dict *dict); - - Object parent; // Parent - GBool open; // Open -}; - -//------------------------------------------------------------------------ -// AnnotMarkup -//------------------------------------------------------------------------ - -class AnnotMarkup: public Annot { -public: - enum AnnotMarkupReplyType { - replyTypeR, // R - replyTypeGroup // Group - }; - - AnnotMarkup(PDFDoc *docA, PDFRectangle *rect); - AnnotMarkup(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotMarkup(); - - // getters - const GooString *getLabel() const { return label; } - AnnotPopup *getPopup() const { return popup; } - double getOpacity() const { return opacity; } - // getRC - const GooString *getDate() const { return date; } - int getInReplyToID() const { return inReplyTo.num; } - const GooString *getSubject() const { return subject; } - AnnotMarkupReplyType getReplyTo() const { return replyTo; } - AnnotExternalDataType getExData() const { return exData; } - - // The annotation takes the ownership of new_popup - void setPopup(AnnotPopup *new_popup); - void setLabel(GooString *new_label); - void setOpacity(double opacityA); - void setDate(GooString *new_date); - -protected: - void removeReferencedObjects() override; - - GooString *label; // T (Default autor) - AnnotPopup *popup; // Popup - double opacity; // CA (Default 1.0) - // RC - GooString *date; // CreationDate - Ref inReplyTo; // IRT - GooString *subject; // Subj - AnnotMarkupReplyType replyTo; // RT (Default R) - // this object is overrided by the custom intent fields defined in some - // annotation types. - //GooString *intent; // IT - AnnotExternalDataType exData; // ExData - -private: - void initialize(PDFDoc *docA, Dict *dict, Object *obj); -}; - -//------------------------------------------------------------------------ -// AnnotText -//------------------------------------------------------------------------ - -class AnnotText: public AnnotMarkup { -public: - enum AnnotTextState { - stateUnknown, - // Marked state model - stateMarked, // Marked - stateUnmarked, // Unmarked - // Review state model - stateAccepted, // Accepted - stateRejected, // Rejected - stateCancelled, // Cancelled - stateCompleted, // Completed - stateNone // None - }; - - AnnotText(PDFDoc *docA, PDFRectangle *rect); - AnnotText(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotText(); - - void draw(Gfx *gfx, GBool printing) override; - - // getters - GBool getOpen() const { return open; } - const GooString *getIcon() const { return icon; } - AnnotTextState getState() const { return state; } - - void setOpen(GBool openA); - void setIcon(GooString *new_icon); - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - GBool open; // Open (Default false) - GooString *icon; // Name (Default Note) - AnnotTextState state; // State (Default Umarked if - // StateModel Marked - // None if StareModel Review) -}; - -//------------------------------------------------------------------------ -// AnnotMovie -//------------------------------------------------------------------------ - - - -class AnnotMovie: public Annot { - public: - AnnotMovie(PDFDoc *docA, PDFRectangle *rect, Movie *movieA); - AnnotMovie(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotMovie(); - - void draw(Gfx *gfx, GBool printing) override; - - const GooString* getTitle() const { return title; } - Movie* getMovie() { return movie; } - - private: - void initialize(PDFDoc *docA, Dict *dict); - - GooString* title; // T - Movie* movie; // Movie + A -}; - - -//------------------------------------------------------------------------ -// AnnotScreen -//------------------------------------------------------------------------ - -class AnnotScreen: public Annot { - public: - - AnnotScreen(PDFDoc *docA, PDFRectangle *rect); - AnnotScreen(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotScreen(); - - const GooString* getTitle() const { return title; } - - AnnotAppearanceCharacs *getAppearCharacs() { return appearCharacs; } - LinkAction* getAction() { return action; } // The caller should now delete the result - LinkAction *getAdditionalAction(AdditionalActionsType type); // The caller should delete the result - - private: - void initialize(PDFDoc *docA, Dict *dict); - - - GooString* title; // T - - AnnotAppearanceCharacs* appearCharacs; // MK - - LinkAction *action; // A - Object additionalActions; // AA -}; - -//------------------------------------------------------------------------ -// AnnotLink -//------------------------------------------------------------------------ - -class AnnotLink: public Annot { -public: - - enum AnnotLinkEffect { - effectNone, // N - effectInvert, // I - effectOutline, // O - effectPush // P - }; - - AnnotLink(PDFDoc *docA, PDFRectangle *rect); - AnnotLink(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotLink(); - - void draw(Gfx *gfx, GBool printing) override; - - // getters - LinkAction *getAction() const { return action; } - AnnotLinkEffect getLinkEffect() const { return linkEffect; } - Dict *getUriAction() const { return uriAction; } - AnnotQuadrilaterals *getQuadrilaterals() const { return quadrilaterals; } - -protected: - - void initialize(PDFDoc *docA, Dict *dict); - - LinkAction *action; // A, Dest - AnnotLinkEffect linkEffect; // H (Default I) - Dict *uriAction; // PA - - AnnotQuadrilaterals *quadrilaterals; // QuadPoints -}; - -//------------------------------------------------------------------------ -// AnnotFreeText -//------------------------------------------------------------------------ - -class AnnotFreeText: public AnnotMarkup { -public: - - enum AnnotFreeTextQuadding { - quaddingLeftJustified, // 0 - quaddingCentered, // 1 - quaddingRightJustified // 2 - }; - - enum AnnotFreeTextIntent { - intentFreeText, // FreeText - intentFreeTextCallout, // FreeTextCallout - intentFreeTextTypeWriter // FreeTextTypeWriter - }; - - AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, GooString *da); - AnnotFreeText(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotFreeText(); - - void draw(Gfx *gfx, GBool printing) override; - Object getAppearanceResDict() override; - void setContents(GooString *new_content) override; - - void setAppearanceString(GooString *new_string); - void setQuadding(AnnotFreeTextQuadding new_quadding); - void setStyleString(GooString *new_string); - void setCalloutLine(AnnotCalloutLine *line); - void setIntent(AnnotFreeTextIntent new_intent); - - // getters - const GooString *getAppearanceString() const { return appearanceString; } - AnnotFreeTextQuadding getQuadding() const { return quadding; } - // return rc - const GooString *getStyleString() const { return styleString; } - AnnotCalloutLine *getCalloutLine() const { return calloutLine; } - AnnotFreeTextIntent getIntent() const { return intent; } - AnnotBorderEffect *getBorderEffect() const { return borderEffect; } - PDFRectangle *getRectangle() const { return rectangle; } - AnnotLineEndingStyle getEndStyle() const { return endStyle; } - -protected: - - void initialize(PDFDoc *docA, Dict *dict); - static void parseAppearanceString(GooString *da, double &fontsize, AnnotColor* &fontcolor); - void generateFreeTextAppearance(); - - // required - GooString *appearanceString; // DA - - // optional - AnnotFreeTextQuadding quadding; // Q (Default 0) - // RC - GooString *styleString; // DS - AnnotCalloutLine *calloutLine; // CL - AnnotFreeTextIntent intent; // IT - AnnotBorderEffect *borderEffect; // BE - PDFRectangle *rectangle; // RD - // inherited from Annot - // AnnotBorderBS border; // BS - AnnotLineEndingStyle endStyle; // LE (Default None) -}; - -//------------------------------------------------------------------------ -// AnnotLine -//------------------------------------------------------------------------ - -class AnnotLine: public AnnotMarkup { -public: - - enum AnnotLineIntent { - intentLineArrow, // LineArrow - intentLineDimension // LineDimension - }; - - enum AnnotLineCaptionPos { - captionPosInline, // Inline - captionPosTop // Top - }; - - AnnotLine(PDFDoc *docA, PDFRectangle *rect); - AnnotLine(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotLine(); - - void draw(Gfx *gfx, GBool printing) override; - Object getAppearanceResDict() override; - void setContents(GooString *new_content) override; - - void setVertices(double x1, double y1, double x2, double y2); - void setStartEndStyle(AnnotLineEndingStyle start, AnnotLineEndingStyle end); - void setInteriorColor(AnnotColor *new_color); - void setLeaderLineLength(double len); - void setLeaderLineExtension(double len); - void setCaption(bool new_cap); - void setIntent(AnnotLineIntent new_intent); - - // getters - AnnotLineEndingStyle getStartStyle() const { return startStyle; } - AnnotLineEndingStyle getEndStyle() const { return endStyle; } - AnnotColor *getInteriorColor() const { return interiorColor; } - double getLeaderLineLength() const { return leaderLineLength; } - double getLeaderLineExtension() const { return leaderLineExtension; } - bool getCaption() const { return caption; } - AnnotLineIntent getIntent() const { return intent; } - double getLeaderLineOffset() const { return leaderLineOffset; } - AnnotLineCaptionPos getCaptionPos() const { return captionPos; } - Dict *getMeasure() const { return measure; } - double getCaptionTextHorizontal() const { return captionTextHorizontal; } - double getCaptionTextVertical() const { return captionTextVertical; } - double getX1() const { return coord1->getX(); } - double getY1() const { return coord1->getY(); } - double getX2() const { return coord2->getX(); } - double getY2() const { return coord2->getY(); } - -protected: - - void initialize(PDFDoc *docA, Dict *dict); - void generateLineAppearance(); - - // required - AnnotCoord *coord1, *coord2; - - // optional - // inherited from Annot - // AnnotBorderBS border; // BS - AnnotLineEndingStyle startStyle; // LE (Default [/None /None]) - AnnotLineEndingStyle endStyle; // - AnnotColor *interiorColor; // IC - double leaderLineLength; // LL (Default 0) - double leaderLineExtension; // LLE (Default 0) - bool caption; // Cap (Default false) - AnnotLineIntent intent; // IT - double leaderLineOffset; // LLO - AnnotLineCaptionPos captionPos; // CP (Default Inline) - Dict *measure; // Measure - double captionTextHorizontal; // CO (Default [0, 0]) - double captionTextVertical; // -}; - -//------------------------------------------------------------------------ -// AnnotTextMarkup -//------------------------------------------------------------------------ - -class AnnotTextMarkup: public AnnotMarkup { -public: - - AnnotTextMarkup(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType); - AnnotTextMarkup(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotTextMarkup(); - - void draw(Gfx *gfx, GBool printing) override; - - // typeHighlight, typeUnderline, typeSquiggly or typeStrikeOut - void setType(AnnotSubtype new_type); - - void setQuadrilaterals(AnnotQuadrilaterals *quadPoints); - - AnnotQuadrilaterals *getQuadrilaterals() const { return quadrilaterals; } - -protected: - - void initialize(PDFDoc *docA, Dict *dict); - - AnnotQuadrilaterals *quadrilaterals; // QuadPoints -}; - -//------------------------------------------------------------------------ -// AnnotStamp -//------------------------------------------------------------------------ - -class AnnotStamp: public AnnotMarkup { -public: - - AnnotStamp(PDFDoc *docA, PDFRectangle *rect); - AnnotStamp(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotStamp(); - - void setIcon(GooString *new_icon); - - // getters - const GooString *getIcon() const { return icon; } - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - GooString *icon; // Name (Default Draft) -}; - -//------------------------------------------------------------------------ -// AnnotGeometry -//------------------------------------------------------------------------ - -class AnnotGeometry: public AnnotMarkup { -public: - - AnnotGeometry(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType); - AnnotGeometry(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotGeometry(); - - void draw(Gfx *gfx, GBool printing) override; - - void setType(AnnotSubtype new_type); // typeSquare or typeCircle - void setInteriorColor(AnnotColor *new_color); - - // getters - AnnotColor *getInteriorColor() const { return interiorColor; } - AnnotBorderEffect *getBorderEffect() const { return borderEffect; } - PDFRectangle *getGeometryRect() const { return geometryRect; } - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - AnnotColor *interiorColor; // IC - AnnotBorderEffect *borderEffect; // BE - PDFRectangle *geometryRect; // RD (combined with Rect) -}; - -//------------------------------------------------------------------------ -// AnnotPolygon -//------------------------------------------------------------------------ - -class AnnotPolygon: public AnnotMarkup { -public: - - enum AnnotPolygonIntent { - polygonCloud, // PolygonCloud - polylineDimension, // PolyLineDimension - polygonDimension // PolygonDimension - }; - - AnnotPolygon(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType); - AnnotPolygon(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotPolygon(); - - void draw(Gfx *gfx, GBool printing) override; - - void setType(AnnotSubtype new_type); // typePolygon or typePolyLine - void setVertices(AnnotPath *path); - void setStartEndStyle(AnnotLineEndingStyle start, AnnotLineEndingStyle end); - void setInteriorColor(AnnotColor *new_color); - void setIntent(AnnotPolygonIntent new_intent); - - // getters - AnnotPath *getVertices() const { return vertices; } - AnnotLineEndingStyle getStartStyle() const { return startStyle; } - AnnotLineEndingStyle getEndStyle() const { return endStyle; } - AnnotColor *getInteriorColor() const { return interiorColor; } - AnnotBorderEffect *getBorderEffect() const { return borderEffect; } - AnnotPolygonIntent getIntent() const { return intent; } - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - // required - AnnotPath *vertices; // Vertices - - // optional - AnnotLineEndingStyle startStyle; // LE (Default [/None /None]) - AnnotLineEndingStyle endStyle; // - // inherited from Annot - // AnnotBorderBS border; // BS - AnnotColor *interiorColor; // IC - AnnotBorderEffect *borderEffect; // BE - AnnotPolygonIntent intent; // IT - // Measure -}; - -//------------------------------------------------------------------------ -// AnnotCaret -//------------------------------------------------------------------------ - -class AnnotCaret: public AnnotMarkup { -public: - - enum AnnotCaretSymbol { - symbolNone, // None - symbolP // P - }; - - AnnotCaret(PDFDoc *docA, PDFRectangle *rect); - AnnotCaret(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotCaret(); - - void setSymbol(AnnotCaretSymbol new_symbol); - - // getters - AnnotCaretSymbol getSymbol() const { return symbol; } - PDFRectangle *getCaretRect() const { return caretRect; } - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - AnnotCaretSymbol symbol; // Sy (Default None) - PDFRectangle *caretRect; // RD (combined with Rect) -}; - -//------------------------------------------------------------------------ -// AnnotInk -//------------------------------------------------------------------------ - -class AnnotInk: public AnnotMarkup { -public: - - AnnotInk(PDFDoc *docA, PDFRectangle *rect); - AnnotInk(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotInk(); - - void draw(Gfx *gfx, GBool printing) override; - - void setInkList(AnnotPath **paths, int n_paths); - - // getters - AnnotPath **getInkList() const { return inkList; } - int getInkListLength() const { return inkListLength; } - -private: - - void initialize(PDFDoc *docA, Dict *dict); - void writeInkList(AnnotPath **paths, int n_paths, Array *dest_array); - void parseInkList(Array *src_array); - void freeInkList(); - - // required - AnnotPath **inkList; // InkList - int inkListLength; - - // optional - // inherited from Annot - // AnnotBorderBS border; // BS -}; - -//------------------------------------------------------------------------ -// AnnotFileAttachment -//------------------------------------------------------------------------ - -class AnnotFileAttachment: public AnnotMarkup { -public: - - AnnotFileAttachment(PDFDoc *docA, PDFRectangle *rect, GooString *filename); - AnnotFileAttachment(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotFileAttachment(); - - void draw(Gfx *gfx, GBool printing) override; - - // getters - Object *getFile() { return &file; } - const GooString *getName() const { return name; } - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - // required - Object file; // FS - - // optional - GooString *name; // Name -}; - -//------------------------------------------------------------------------ -// AnnotSound -//------------------------------------------------------------------------ - -class AnnotSound: public AnnotMarkup { -public: - - AnnotSound(PDFDoc *docA, PDFRectangle *rect, Sound *soundA); - AnnotSound(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotSound(); - - void draw(Gfx *gfx, GBool printing) override; - - // getters - Sound *getSound() { return sound; } - const GooString *getName() const { return name; } - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - // required - Sound *sound; // Sound - - // optional - GooString *name; // Name -}; - -//------------------------------------------------------------------------ -// AnnotWidget -//------------------------------------------------------------------------ - -class AnnotWidget: public Annot { -public: - - enum AnnotWidgetHighlightMode { - highlightModeNone, // N - highlightModeInvert, // I - highlightModeOutline, // O - highlightModePush // P,T - }; - - AnnotWidget(PDFDoc *docA, Object *dictObject, Object *obj); - AnnotWidget(PDFDoc *docA, Object *dictObject, Object *obj, FormField *fieldA); - ~AnnotWidget(); - - void draw(Gfx *gfx, GBool printing) override; - - void generateFieldAppearance (bool *addDingbatsResource); - void updateAppearanceStream (); - - AnnotWidgetHighlightMode getMode() { return mode; } - AnnotAppearanceCharacs *getAppearCharacs() { return appearCharacs; } - LinkAction *getAction() { return action; } // The caller should not delete the result - LinkAction *getAdditionalAction(AdditionalActionsType type); // The caller should delete the result - LinkAction *getFormAdditionalAction(FormAdditionalActionsType type); // The caller should delete the result - Dict *getParent() { return parent; } - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - Form *form; - FormField *field; // FormField object for this annotation - AnnotWidgetHighlightMode mode; // H (Default I) - AnnotAppearanceCharacs *appearCharacs; // MK - LinkAction *action; // A - Object additionalActions; // AA - // inherited from Annot - // AnnotBorderBS border; // BS - Dict *parent; // Parent - Ref updatedAppearanceStream; // {-1,-1} if updateAppearanceStream has never been called -}; - -//------------------------------------------------------------------------ -// Annot3D -//------------------------------------------------------------------------ - -class Annot3D: public Annot { - class Activation { - public: - enum ActivationATrigger { - aTriggerUnknown, - aTriggerPageOpened, // PO - aTriggerPageVisible, // PV - aTriggerUserAction // XA - }; - - enum ActivationAState { - aStateUnknown, - aStateEnabled, // I - aStateDisabled // L - }; - - enum ActivationDTrigger { - dTriggerUnknown, - dTriggerPageClosed, // PC - dTriggerPageInvisible, // PI - dTriggerUserAction // XD - }; - - enum ActivationDState { - dStateUnknown, - dStateUninstantiaded, // U - dStateInstantiated, // I - dStateLive // L - }; - - Activation(Dict *dict); - private: - - ActivationATrigger aTrigger; // A (Default XA) - ActivationAState aState; // AIS (Default L) - ActivationDTrigger dTrigger; // D (Default PI) - ActivationDState dState; // DIS (Default U) - GBool displayToolbar; // TB (Default true) - GBool displayNavigation; // NP (Default false); - }; -public: - - Annot3D(PDFDoc *docA, PDFRectangle *rect); - Annot3D(PDFDoc *docA, Object *dictObject, Object *obj); - ~Annot3D(); - - // getters - -private: - - void initialize(PDFDoc *docA, Dict *dict); - - Activation *activation; // 3DA -}; - -//------------------------------------------------------------------------ -// AnnotRichMedia -//------------------------------------------------------------------------ - -class AnnotRichMedia: public Annot { -public: - class Params { - public: - Params(Dict *dict); - ~Params(); - - Params(const Params &) = delete; - Params& operator=(const Params &) = delete; - - const GooString* getFlashVars() const; - - private: - // optional - GooString *flashVars; // FlashVars - }; - - class Instance { - public: - enum Type { - type3D, // 3D - typeFlash, // Flash - typeSound, // Sound - typeVideo // Video - }; - - Instance(Dict *dict); - ~Instance(); - - Instance(const Instance &) = delete; - Instance& operator=(const Instance &) = delete; - - Type getType() const; - Params* getParams() const; - - private: - // optional - Type type; // Subtype - Params *params; // Params - }; - - class Configuration { - public: - enum Type { - type3D, // 3D - typeFlash, // Flash - typeSound, // Sound - typeVideo // Video - }; - - Configuration(Dict *dict); - ~Configuration(); - - Configuration(const Configuration &) = delete; - Configuration& operator=(const Configuration &) = delete; - - Type getType() const; - const GooString* getName() const; - int getInstancesCount() const; - Instance* getInstance(int index) const; - - private: - // optional - Type type; // Subtype - GooString *name; // Name - Instance **instances; // Instances - int nInstances; - }; - - class Content; - - class Asset { - public: - Asset(); - ~Asset(); - - Asset(const Asset &) = delete; - Asset& operator=(const Asset &) = delete; - - const GooString* getName() const; - Object* getFileSpec() const; - - private: - friend class AnnotRichMedia::Content; - - GooString *name; - Object fileSpec; - }; - - class Content { - public: - Content(Dict *dict); - ~Content(); - - Content(const Content &) = delete; - Content& operator=(const Content &) = delete; - - int getConfigurationsCount() const; - Configuration* getConfiguration(int index) const; - - int getAssetsCount() const; - Asset* getAsset(int index) const; - - private: - // optional - Configuration **configurations; // Configurations - int nConfigurations; - - Asset **assets; // Assets - int nAssets; - }; - - class Activation { - public: - enum Condition { - conditionPageOpened, // PO - conditionPageVisible, // PV - conditionUserAction // XA - }; - - Activation(Dict *dict); - - Condition getCondition() const; - - private: - // optional - Condition condition; - }; - - class Deactivation { - public: - enum Condition { - conditionPageClosed, // PC - conditionPageInvisible, // PI - conditionUserAction // XD - }; - - Deactivation(Dict *dict); - - Condition getCondition() const; - - private: - // optional - Condition condition; - }; - - class Settings { - public: - Settings(Dict *dict); - ~Settings(); - - Settings(const Settings &) = delete; - Settings& operator=(const Settings &) = delete; - - Activation* getActivation() const; - Deactivation* getDeactivation() const; - - private: - // optional - Activation *activation; - Deactivation *deactivation; - }; - - AnnotRichMedia(PDFDoc *docA, PDFRectangle *rect); - AnnotRichMedia(PDFDoc *docA, Object *dictObject, Object *obj); - ~AnnotRichMedia(); - - Content* getContent() const; - - Settings* getSettings() const; - -private: - void initialize(PDFDoc *docA, Dict *dict); - - // required - Content *content; // RichMediaContent - - // optional - Settings *settings; // RichMediaSettings -}; - - -//------------------------------------------------------------------------ -// Annots -//------------------------------------------------------------------------ - -class Annots { -public: - - // Build a list of Annot objects and call setPage on them - Annots(PDFDoc *docA, int page, Object *annotsObj); - - ~Annots(); - - Annots(const Annots &) = delete; - Annots& operator=(const Annots &) = delete; - - // Iterate through list of annotations. - int getNumAnnots() { return nAnnots; } - Annot *getAnnot(int i) { return annots[i]; } - void appendAnnot(Annot *annot); - GBool removeAnnot(Annot *annot); - -private: - Annot* createAnnot(Object* dictObject, Object *obj); - Annot *findAnnot(Ref *ref); - - PDFDoc *doc; - Annot **annots; - int nAnnots; - int size; -}; - -#endif |