aboutsummaryrefslogtreecommitdiff
path: root/tests/poppler/glib/poppler-annot.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/poppler/glib/poppler-annot.cc')
-rw-r--r--tests/poppler/glib/poppler-annot.cc1372
1 files changed, 1372 insertions, 0 deletions
diff --git a/tests/poppler/glib/poppler-annot.cc b/tests/poppler/glib/poppler-annot.cc
new file mode 100644
index 00000000..62a0879c
--- /dev/null
+++ b/tests/poppler/glib/poppler-annot.cc
@@ -0,0 +1,1372 @@
+/* poppler-annot.cc: glib interface to poppler
+ *
+ * Copyright (C) 2007 Inigo Martinez <inigomartinez@gmail.com>
+ * Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "poppler.h"
+#include "poppler-private.h"
+
+/**
+ * SECTION:poppler-annot
+ * @short_description: Annotations
+ * @title: PopplerAnnot
+ */
+
+typedef struct _PopplerAnnotClass PopplerAnnotClass;
+typedef struct _PopplerAnnotMarkupClass PopplerAnnotMarkupClass;
+typedef struct _PopplerAnnotFreeTextClass PopplerAnnotFreeTextClass;
+typedef struct _PopplerAnnotTextClass PopplerAnnotTextClass;
+typedef struct _PopplerAnnotFileAttachmentClass PopplerAnnotFileAttachmentClass;
+typedef struct _PopplerAnnotMovieClass PopplerAnnotMovieClass;
+typedef struct _PopplerAnnotScreenClass PopplerAnnotScreenClass;
+
+struct _PopplerAnnotClass
+{
+ GObjectClass parent_class;
+};
+
+struct _PopplerAnnotMarkup
+{
+ PopplerAnnot parent_instance;
+};
+
+struct _PopplerAnnotMarkupClass
+{
+ PopplerAnnotClass parent_class;
+};
+
+struct _PopplerAnnotText
+{
+ PopplerAnnotMarkup parent_instance;
+};
+
+struct _PopplerAnnotTextClass
+{
+ PopplerAnnotMarkupClass parent_class;
+};
+
+struct _PopplerAnnotFreeText
+{
+ PopplerAnnotMarkup parent_instance;
+};
+
+struct _PopplerAnnotFreeTextClass
+{
+ PopplerAnnotMarkupClass parent_class;
+};
+
+struct _PopplerAnnotFileAttachment
+{
+ PopplerAnnotMarkup parent_instance;
+};
+
+struct _PopplerAnnotFileAttachmentClass
+{
+ PopplerAnnotMarkupClass parent_class;
+};
+
+struct _PopplerAnnotMovie
+{
+ PopplerAnnot parent_instance;
+
+ PopplerMovie *movie;
+};
+
+struct _PopplerAnnotMovieClass
+{
+ PopplerAnnotClass parent_class;
+};
+
+struct _PopplerAnnotScreen
+{
+ PopplerAnnot parent_instance;
+
+ PopplerAction *action;
+};
+
+struct _PopplerAnnotScreenClass
+{
+ PopplerAnnotClass parent_class;
+};
+
+
+G_DEFINE_TYPE (PopplerAnnot, poppler_annot, G_TYPE_OBJECT)
+G_DEFINE_TYPE (PopplerAnnotMarkup, poppler_annot_markup, POPPLER_TYPE_ANNOT)
+G_DEFINE_TYPE (PopplerAnnotText, poppler_annot_text, POPPLER_TYPE_ANNOT_MARKUP)
+G_DEFINE_TYPE (PopplerAnnotFreeText, poppler_annot_free_text, POPPLER_TYPE_ANNOT_MARKUP)
+G_DEFINE_TYPE (PopplerAnnotFileAttachment, poppler_annot_file_attachment, POPPLER_TYPE_ANNOT_MARKUP)
+G_DEFINE_TYPE (PopplerAnnotMovie, poppler_annot_movie, POPPLER_TYPE_ANNOT)
+G_DEFINE_TYPE (PopplerAnnotScreen, poppler_annot_screen, POPPLER_TYPE_ANNOT)
+
+static void
+poppler_annot_finalize (GObject *object)
+{
+ PopplerAnnot *poppler_annot = POPPLER_ANNOT (object);
+
+ poppler_annot->annot = NULL;
+
+ G_OBJECT_CLASS (poppler_annot_parent_class)->finalize (object);
+}
+
+static void
+poppler_annot_init (PopplerAnnot *poppler_annot)
+{
+}
+
+static void
+poppler_annot_class_init (PopplerAnnotClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->finalize = poppler_annot_finalize;
+}
+
+PopplerAnnot *
+_poppler_annot_new (Annot *annot)
+{
+ PopplerAnnot *poppler_annot;
+
+ poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT, NULL));
+ poppler_annot->annot = annot;
+
+ return poppler_annot;
+}
+
+static void
+poppler_annot_markup_init (PopplerAnnotMarkup *poppler_annot)
+{
+}
+
+static void
+poppler_annot_markup_class_init (PopplerAnnotMarkupClass *klass)
+{
+}
+
+static void
+poppler_annot_text_init (PopplerAnnotText *poppler_annot)
+{
+}
+
+static void
+poppler_annot_text_class_init (PopplerAnnotTextClass *klass)
+{
+}
+
+PopplerAnnot *
+_poppler_annot_text_new (Annot *annot)
+{
+ PopplerAnnot *poppler_annot;
+
+ poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_TEXT, NULL));
+ poppler_annot->annot = annot;
+
+ return poppler_annot;
+}
+
+/**
+ * poppler_annot_text_new:
+ * @doc: a #PopplerDocument
+ * @rect: a #PopplerRectangle
+ *
+ * Creates a new Text annotation that will be
+ * located on @rect when added to a page. See
+ * poppler_page_add_annot()
+ *
+ * Return value: A newly created #PopplerAnnotText annotation
+ *
+ * Since: 0.16
+ */
+PopplerAnnot *
+poppler_annot_text_new (PopplerDocument *doc,
+ PopplerRectangle *rect)
+{
+ Annot *annot;
+ PDFRectangle pdf_rect(rect->x1, rect->y1,
+ rect->x2, rect->y2);
+
+ annot = new AnnotText (doc->doc->getXRef(), &pdf_rect, doc->doc->getCatalog());
+
+ return _poppler_annot_text_new (annot);
+}
+
+static void
+poppler_annot_free_text_init (PopplerAnnotFreeText *poppler_annot)
+{
+}
+
+static void
+poppler_annot_free_text_class_init (PopplerAnnotFreeTextClass *klass)
+{
+}
+
+PopplerAnnot *
+_poppler_annot_free_text_new (Annot *annot)
+{
+ PopplerAnnot *poppler_annot;
+
+ poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_FREE_TEXT, NULL));
+ poppler_annot->annot = annot;
+
+ return poppler_annot;
+}
+
+static void
+poppler_annot_file_attachment_init (PopplerAnnotFileAttachment *poppler_annot)
+{
+}
+
+static void
+poppler_annot_file_attachment_class_init (PopplerAnnotFileAttachmentClass *klass)
+{
+}
+
+PopplerAnnot *
+_poppler_annot_file_attachment_new (Annot *annot)
+{
+ PopplerAnnot *poppler_annot;
+
+ poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_FILE_ATTACHMENT, NULL));
+ poppler_annot->annot = annot;
+
+ return poppler_annot;
+}
+
+
+static void
+poppler_annot_movie_finalize (GObject *object)
+{
+ PopplerAnnotMovie *annot_movie = POPPLER_ANNOT_MOVIE (object);
+
+ if (annot_movie->movie) {
+ g_object_unref (annot_movie->movie);
+ annot_movie->movie = NULL;
+ }
+
+ G_OBJECT_CLASS (poppler_annot_movie_parent_class)->finalize (object);
+}
+
+static void
+poppler_annot_movie_init (PopplerAnnotMovie *poppler_annot)
+{
+}
+
+static void
+poppler_annot_movie_class_init (PopplerAnnotMovieClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->finalize = poppler_annot_movie_finalize;
+}
+
+PopplerAnnot *
+_poppler_annot_movie_new (Annot *annot)
+{
+ PopplerAnnot *poppler_annot;
+ AnnotMovie *annot_movie;
+
+ poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_MOVIE, NULL));
+ poppler_annot->annot = annot;
+
+ annot_movie = static_cast<AnnotMovie *>(poppler_annot->annot);
+ POPPLER_ANNOT_MOVIE (poppler_annot)->movie = _poppler_movie_new (annot_movie->getMovie());
+
+ return poppler_annot;
+}
+
+static void
+poppler_annot_screen_finalize (GObject *object)
+{
+ PopplerAnnotScreen *annot_screen = POPPLER_ANNOT_SCREEN (object);
+
+ if (annot_screen->action) {
+ poppler_action_free (annot_screen->action);
+ annot_screen->action = NULL;
+ }
+
+ G_OBJECT_CLASS (poppler_annot_screen_parent_class)->finalize (object);
+}
+
+static void
+poppler_annot_screen_init (PopplerAnnotScreen *poppler_annot)
+{
+}
+
+static void
+poppler_annot_screen_class_init (PopplerAnnotScreenClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->finalize = poppler_annot_screen_finalize;
+}
+
+PopplerAnnot *
+_poppler_annot_screen_new (Annot *annot)
+{
+ PopplerAnnot *poppler_annot;
+ AnnotScreen *annot_screen;
+ LinkAction *action;
+
+ poppler_annot = POPPLER_ANNOT (g_object_new (POPPLER_TYPE_ANNOT_SCREEN, NULL));
+ poppler_annot->annot = annot;
+
+ annot_screen = static_cast<AnnotScreen *>(poppler_annot->annot);
+ action = annot_screen->getAction();
+ if (action)
+ POPPLER_ANNOT_SCREEN (poppler_annot)->action = _poppler_action_new (NULL, action, NULL);
+
+ return poppler_annot;
+}
+
+
+/* Public methods */
+/**
+ * poppler_annot_get_annot_type:
+ * @poppler_annot: a #PopplerAnnot
+ *
+ * Gets the type of @poppler_annot
+ *
+ * Return value: #PopplerAnnotType of @poppler_annot.
+ **/
+PopplerAnnotType
+poppler_annot_get_annot_type (PopplerAnnot *poppler_annot)
+{
+ g_return_val_if_fail (POPPLER_IS_ANNOT (poppler_annot), POPPLER_ANNOT_UNKNOWN);
+
+ switch (poppler_annot->annot->getType ())
+ {
+ case Annot::typeText:
+ return POPPLER_ANNOT_TEXT;
+ case Annot::typeLink:
+ return POPPLER_ANNOT_LINK;
+ case Annot::typeFreeText:
+ return POPPLER_ANNOT_FREE_TEXT;
+ case Annot::typeLine:
+ return POPPLER_ANNOT_LINE;
+ case Annot::typeSquare:
+ return POPPLER_ANNOT_SQUARE;
+ case Annot::typeCircle:
+ return POPPLER_ANNOT_CIRCLE;
+ case Annot::typePolygon:
+ return POPPLER_ANNOT_POLYGON;
+ case Annot::typePolyLine:
+ return POPPLER_ANNOT_POLY_LINE;
+ case Annot::typeHighlight:
+ return POPPLER_ANNOT_HIGHLIGHT;
+ case Annot::typeUnderline:
+ return POPPLER_ANNOT_UNDERLINE;
+ case Annot::typeSquiggly:
+ return POPPLER_ANNOT_SQUIGGLY;
+ case Annot::typeStrikeOut:
+ return POPPLER_ANNOT_STRIKE_OUT;
+ case Annot::typeStamp:
+ return POPPLER_ANNOT_STAMP;
+ case Annot::typeCaret:
+ return POPPLER_ANNOT_CARET;
+ case Annot::typeInk:
+ return POPPLER_ANNOT_INK;
+ case Annot::typePopup:
+ return POPPLER_ANNOT_POPUP;
+ case Annot::typeFileAttachment:
+ return POPPLER_ANNOT_FILE_ATTACHMENT;
+ case Annot::typeSound:
+ return POPPLER_ANNOT_SOUND;
+ case Annot::typeMovie:
+ return POPPLER_ANNOT_MOVIE;
+ case Annot::typeWidget:
+ return POPPLER_ANNOT_WIDGET;
+ case Annot::typeScreen:
+ return POPPLER_ANNOT_SCREEN;
+ case Annot::typePrinterMark:
+ return POPPLER_ANNOT_PRINTER_MARK;
+ case Annot::typeTrapNet:
+ return POPPLER_ANNOT_TRAP_NET;
+ case Annot::typeWatermark:
+ return POPPLER_ANNOT_WATERMARK;
+ case Annot::type3D:
+ return POPPLER_ANNOT_3D;
+ default:
+ g_warning ("Unsupported Annot Type");
+ }
+
+ return POPPLER_ANNOT_UNKNOWN;
+}
+
+/**
+ * poppler_annot_get_contents:
+ * @poppler_annot: a #PopplerAnnot
+ *
+ * Retrieves the contents of @poppler_annot.
+ *
+ * Return value: a new allocated string with the contents of @poppler_annot. It
+ * must be freed with g_free() when done.
+ **/
+gchar *
+poppler_annot_get_contents (PopplerAnnot *poppler_annot)
+{
+ GooString *contents;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT (poppler_annot), NULL);
+
+ contents = poppler_annot->annot->getContents ();
+
+ return contents ? _poppler_goo_string_to_utf8 (contents) : NULL;
+}
+
+/**
+ * poppler_annot_set_contents:
+ * @poppler_annot: a #PopplerAnnot
+ * @contents: a text string containing the new contents
+ *
+ * Sets the contents of @poppler_annot to the given value,
+ * replacing the current contents.
+ *
+ * Since: 0.12
+ **/
+void
+poppler_annot_set_contents (PopplerAnnot *poppler_annot,
+ const gchar *contents)
+{
+ GooString *goo_tmp;
+ gchar *tmp;
+ gsize length = 0;
+
+ g_return_if_fail (POPPLER_IS_ANNOT (poppler_annot));
+
+ tmp = contents ? g_convert (contents, -1, "UTF-16BE", "UTF-8", NULL, &length, NULL) : NULL;
+ goo_tmp = new GooString (tmp, length);
+ g_free (tmp);
+ poppler_annot->annot->setContents (goo_tmp);
+ delete (goo_tmp);
+}
+
+/**
+ * poppler_annot_get_name:
+ * @poppler_annot: a #PopplerAnnot
+ *
+ * Retrieves the name of @poppler_annot.
+ *
+ * Return value: a new allocated string with the name of @poppler_annot. It must
+ * be freed with g_free() when done.
+ **/
+gchar *
+poppler_annot_get_name (PopplerAnnot *poppler_annot)
+{
+ GooString *name;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT (poppler_annot), NULL);
+
+ name = poppler_annot->annot->getName ();
+
+ return name ? _poppler_goo_string_to_utf8 (name) : NULL;
+}
+
+/**
+ * poppler_annot_get_modified:
+ * @poppler_annot: a #PopplerAnnot
+ *
+ * Retrieves the last modification data of @poppler_annot. The returned
+ * string will be either a PDF format date or a text string.
+ * See also #poppler_date_parse()
+ *
+ * Return value: a new allocated string with the last modification data of
+ * @poppler_annot. It must be freed with g_free() when done.
+ **/
+gchar *
+poppler_annot_get_modified (PopplerAnnot *poppler_annot)
+{
+ GooString *text;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT (poppler_annot), NULL);
+
+ text = poppler_annot->annot->getModified ();
+
+ return text ? _poppler_goo_string_to_utf8 (text) : NULL;
+}
+
+/**
+ * poppler_annot_get_flags
+ * @poppler_annot: a #PopplerAnnot
+ *
+ * Retrieves the flag field specifying various characteristics of the
+ * @poppler_annot.
+ *
+ * Return value: the flag field of @poppler_annot.
+ **/
+PopplerAnnotFlag
+poppler_annot_get_flags (PopplerAnnot *poppler_annot)
+{
+ g_return_val_if_fail (POPPLER_IS_ANNOT (poppler_annot), (PopplerAnnotFlag) 0);
+
+ return (PopplerAnnotFlag) poppler_annot->annot->getFlags ();
+}
+
+/**
+ * poppler_annot_get_color:
+ * @poppler_annot: a #PopplerAnnot
+ *
+ * Retrieves the color of @poppler_annot.
+ *
+ * Return value: a new allocated #PopplerColor with the color values of
+ * @poppler_annot, or %NULL. It must be freed with g_free() when done.
+ **/
+PopplerColor *
+poppler_annot_get_color (PopplerAnnot *poppler_annot)
+{
+ AnnotColor *color;
+ PopplerColor *poppler_color = NULL;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT (poppler_annot), NULL);
+
+ color = poppler_annot->annot->getColor ();
+
+ if (color) {
+ const double *values = color->getValues ();
+
+ switch (color->getSpace ())
+ {
+ case AnnotColor::colorGray:
+ poppler_color = g_new (PopplerColor, 1);
+
+ poppler_color->red = (guint16) (values[0] * 65535);
+ poppler_color->green = poppler_color->red;
+ poppler_color->blue = poppler_color->red;
+
+ break;
+ case AnnotColor::colorRGB:
+ poppler_color = g_new (PopplerColor, 1);
+
+ poppler_color->red = (guint16) (values[0] * 65535);
+ poppler_color->green = (guint16) (values[1] * 65535);
+ poppler_color->blue = (guint16) (values[2] * 65535);
+
+ break;
+ case AnnotColor::colorCMYK:
+ g_warning ("Unsupported Annot Color: colorCMYK");
+ case AnnotColor::colorTransparent:
+ break;
+ }
+ }
+
+ return poppler_color;
+}
+
+/**
+ * poppler_annot_set_color:
+ * @poppler_annot: a #PopplerAnnot
+ * @poppler_color: (allow-none): a #PopplerColor, or %NULL
+ *
+ * Sets the color of @poppler_annot.
+ *
+ * Since: 0.16
+ */
+void
+poppler_annot_set_color (PopplerAnnot *poppler_annot,
+ PopplerColor *poppler_color)
+{
+ AnnotColor *color = NULL;
+
+ if (poppler_color) {
+ color = new AnnotColor ((double)poppler_color->red / 65535,
+ (double)poppler_color->green / 65535,
+ (double)poppler_color->blue / 65535);
+ }
+
+ /* Annot takes ownership of the color */
+ poppler_annot->annot->setColor (color);
+}
+
+/**
+ * poppler_annot_get_page_index:
+ * @poppler_annot: a #PopplerAnnot
+ *
+ * Returns the page index to which @poppler_annot is associated, or -1 if unknown
+ *
+ * Return value: page index or -1
+ *
+ * Since: 0.14
+ **/
+gint
+poppler_annot_get_page_index (PopplerAnnot *poppler_annot)
+{
+ gint page_num;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT (poppler_annot), -1);
+
+ page_num = poppler_annot->annot->getPageNum();
+ return page_num <= 0 ? -1 : page_num - 1;
+}
+
+/* PopplerAnnotMarkup */
+/**
+ * poppler_annot_markup_get_label:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ *
+ * Retrieves the label text of @poppler_annot.
+ *
+ * Return value: the label text of @poppler_annot.
+ */
+gchar *
+poppler_annot_markup_get_label (PopplerAnnotMarkup *poppler_annot)
+{
+ AnnotMarkup *annot;
+ GooString *text;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), NULL);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ text = annot->getLabel ();
+
+ return text ? _poppler_goo_string_to_utf8 (text) : NULL;
+}
+
+/**
+ * poppler_annot_markup_set_label:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ * @label: (allow-none): a text string containing the new label, or %NULL
+ *
+ * Sets the label text of @poppler_annot, replacing the current one
+ *
+ * Since: 0.16
+ */
+void
+poppler_annot_markup_set_label (PopplerAnnotMarkup *poppler_annot,
+ const gchar *label)
+{
+ AnnotMarkup *annot;
+ GooString *goo_tmp;
+ gchar *tmp;
+ gsize length = 0;
+
+ g_return_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot));
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ tmp = label ? g_convert (label, -1, "UTF-16BE", "UTF-8", NULL, &length, NULL) : NULL;
+ goo_tmp = new GooString (tmp, length);
+ g_free (tmp);
+ annot->setLabel (goo_tmp);
+ delete goo_tmp;
+}
+
+/**
+ * poppler_annot_markup_has_popup:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ *
+ * Return %TRUE if the markup annotation has a popup window associated
+ *
+ * Return value: %TRUE, if @poppler_annot has popup, %FALSE otherwise
+ *
+ * Since: 0.12
+ **/
+gboolean
+poppler_annot_markup_has_popup (PopplerAnnotMarkup *poppler_annot)
+{
+ AnnotMarkup *annot;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), FALSE);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ return annot->getPopup () != NULL;
+}
+
+/**
+ * poppler_annot_markup_set_popup:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ * @popup_rect: a #PopplerRectangle
+ *
+ * Associates a new popup window for editing contents of @poppler_annot.
+ * Popup window shall be displayed by viewers at @popup_rect on the page.
+ *
+ * Since: 0.16
+ */
+void
+poppler_annot_markup_set_popup (PopplerAnnotMarkup *poppler_annot,
+ PopplerRectangle *popup_rect)
+{
+ AnnotMarkup *annot;
+ AnnotPopup *popup;
+ PDFRectangle pdf_rect(popup_rect->x1, popup_rect->y1,
+ popup_rect->x2, popup_rect->y2);
+
+ 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);
+ annot->setPopup (popup);
+}
+
+/**
+ * poppler_annot_markup_get_popup_is_open:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ *
+ * Retrieves the state of the popup window related to @poppler_annot.
+ *
+ * Return value: the state of @poppler_annot. %TRUE if it's open, %FALSE in
+ * other case.
+ **/
+gboolean
+poppler_annot_markup_get_popup_is_open (PopplerAnnotMarkup *poppler_annot)
+{
+ AnnotMarkup *annot;
+ AnnotPopup *annot_popup;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), FALSE);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ if ((annot_popup = annot->getPopup ()))
+ return annot_popup->getOpen ();
+
+ return FALSE;
+}
+
+/**
+ * poppler_annot_markup_set_popup_is_open:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ * @is_open: whether popup window should initially be displayed open
+ *
+ * Sets the state of the popup window related to @poppler_annot.
+ *
+ * Since: 0.16
+ **/
+void
+poppler_annot_markup_set_popup_is_open (PopplerAnnotMarkup *poppler_annot,
+ gboolean is_open)
+{
+ AnnotMarkup *annot;
+ AnnotPopup *annot_popup;
+
+ g_return_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot));
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ annot_popup = annot->getPopup ();
+ if (!annot_popup)
+ return;
+
+ if (annot_popup->getOpen () != is_open)
+ annot_popup->setOpen (is_open);
+}
+
+/**
+ * poppler_annot_markup_get_popup_rectangle:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ * @poppler_rect: (out): a #PopplerRectangle to store the popup rectangle
+ *
+ * Retrieves the rectangle of the popup window related to @poppler_annot.
+ *
+ * Return value: %TRUE if #PopplerRectangle was correctly filled, %FALSE otherwise
+ *
+ * Since: 0.12
+ **/
+gboolean
+poppler_annot_markup_get_popup_rectangle (PopplerAnnotMarkup *poppler_annot,
+ PopplerRectangle *poppler_rect)
+{
+ AnnotMarkup *annot;
+ Annot *annot_popup;
+ PDFRectangle *annot_rect;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), FALSE);
+ g_return_val_if_fail (poppler_rect != NULL, FALSE);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+ annot_popup = annot->getPopup ();
+ if (!annot_popup)
+ return FALSE;
+
+ annot_rect = annot_popup->getRect ();
+ poppler_rect->x1 = annot_rect->x1;
+ poppler_rect->x2 = annot_rect->x2;
+ poppler_rect->y1 = annot_rect->y1;
+ poppler_rect->y2 = annot_rect->y2;
+
+ return TRUE;
+}
+
+/**
+ * poppler_annot_markup_get_opacity:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ *
+ * Retrieves the opacity value of @poppler_annot.
+ *
+ * Return value: the opacity value of @poppler_annot,
+ * between 0 (transparent) and 1 (opaque)
+ */
+gdouble
+poppler_annot_markup_get_opacity (PopplerAnnotMarkup *poppler_annot)
+{
+ AnnotMarkup *annot;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), 0);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ return annot->getOpacity ();
+}
+
+/**
+ * poppler_annot_markup_set_opacity:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ * @opacity: a constant opacity value, between 0 (transparent) and 1 (opaque)
+ *
+ * Sets the opacity of @poppler_annot. This value applies to
+ * all visible elements of @poppler_annot in its closed state,
+ * but not to the pop-up window that appears when it's openened
+ *
+ * Since: 0.16
+ */
+void
+poppler_annot_markup_set_opacity (PopplerAnnotMarkup *poppler_annot,
+ gdouble opacity)
+{
+ AnnotMarkup *annot;
+
+ g_return_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot));
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+ annot->setOpacity(opacity);
+}
+
+/**
+ * poppler_annot_markup_get_date:
+ * @poppler_annot: a #PopplerAnnotMarkup
+ *
+ * Returns the date and time when the annotation was created
+ *
+ * Return value: (transfer full): a #GDate representing the date and time
+ * when the annotation was created, or %NULL
+ */
+GDate *
+poppler_annot_markup_get_date (PopplerAnnotMarkup *poppler_annot)
+{
+ AnnotMarkup *annot;
+ GooString *annot_date;
+ time_t timet;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), NULL);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+ annot_date = annot->getDate ();
+ if (!annot_date)
+ return NULL;
+
+ if (_poppler_convert_pdf_date_to_gtime (annot_date, &timet)) {
+ GDate *date;
+
+ date = g_date_new ();
+ g_date_set_time_t (date, timet);
+
+ return date;
+ }
+
+ return NULL;
+}
+
+/**
+* poppler_annot_markup_get_subject:
+* @poppler_annot: a #PopplerAnnotMarkup
+*
+* Retrives the subject text of @poppler_annot.
+*
+* Return value: the subject text of @poppler_annot.
+*/
+gchar *
+poppler_annot_markup_get_subject (PopplerAnnotMarkup *poppler_annot)
+{
+ AnnotMarkup *annot;
+ GooString *text;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), NULL);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ text = annot->getSubject ();
+
+ return text ? _poppler_goo_string_to_utf8 (text) : NULL;
+}
+
+/**
+* poppler_annot_markup_get_reply_to:
+* @poppler_annot: a #PopplerAnnotMarkup
+*
+* Gets the reply type of @poppler_annot.
+*
+* Return value: #PopplerAnnotMarkupReplyType of @poppler_annot.
+*/
+PopplerAnnotMarkupReplyType
+poppler_annot_markup_get_reply_to (PopplerAnnotMarkup *poppler_annot)
+{
+ AnnotMarkup *annot;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), POPPLER_ANNOT_MARKUP_REPLY_TYPE_R);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ switch (annot->getReplyTo ())
+ {
+ case AnnotMarkup::replyTypeR:
+ return POPPLER_ANNOT_MARKUP_REPLY_TYPE_R;
+ case AnnotMarkup::replyTypeGroup:
+ return POPPLER_ANNOT_MARKUP_REPLY_TYPE_GROUP;
+ default:
+ g_warning ("Unsupported Annot Markup Reply To Type");
+ }
+
+ return POPPLER_ANNOT_MARKUP_REPLY_TYPE_R;
+}
+
+/**
+* poppler_annot_markup_get_external_data:
+* @poppler_annot: a #PopplerAnnotMarkup
+*
+* Gets the external data type of @poppler_annot.
+*
+* Return value: #PopplerAnnotExternalDataType of @poppler_annot.
+*/
+PopplerAnnotExternalDataType
+poppler_annot_markup_get_external_data (PopplerAnnotMarkup *poppler_annot)
+{
+ AnnotMarkup *annot;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_MARKUP (poppler_annot), POPPLER_ANNOT_EXTERNAL_DATA_MARKUP_UNKNOWN);
+
+ annot = static_cast<AnnotMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ switch (annot->getExData ())
+ {
+ case annotExternalDataMarkup3D:
+ return POPPLER_ANNOT_EXTERNAL_DATA_MARKUP_3D;
+ case annotExternalDataMarkupUnknown:
+ return POPPLER_ANNOT_EXTERNAL_DATA_MARKUP_UNKNOWN;
+ default:
+ g_warning ("Unsupported Annot Markup External Data");
+ }
+
+ return POPPLER_ANNOT_EXTERNAL_DATA_MARKUP_UNKNOWN;
+}
+
+/* PopplerAnnotText */
+/**
+ * poppler_annot_text_get_is_open:
+ * @poppler_annot: a #PopplerAnnotText
+ *
+ * Retrieves the state of @poppler_annot.
+ *
+ * Return value: the state of @poppler_annot. %TRUE if it's open, %FALSE in
+ * other case.
+ **/
+gboolean
+poppler_annot_text_get_is_open (PopplerAnnotText *poppler_annot)
+{
+ AnnotText *annot;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_TEXT (poppler_annot), FALSE);
+
+ annot = static_cast<AnnotText *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ return annot->getOpen ();
+}
+
+/**
+ * poppler_annot_text_set_is_open:
+ * @poppler_annot: a #PopplerAnnotText
+ * @is_open: whether annotation should initially be displayed open
+ *
+ * Sets whether @poppler_annot should initially be displayed open
+ *
+ * Since: 0.16
+ */
+void
+poppler_annot_text_set_is_open (PopplerAnnotText *poppler_annot,
+ gboolean is_open)
+{
+ AnnotText *annot;
+
+ g_return_if_fail (POPPLER_IS_ANNOT_TEXT (poppler_annot));
+
+ annot = static_cast<AnnotText *>(POPPLER_ANNOT (poppler_annot)->annot);
+ annot->setOpen(is_open);
+}
+
+/**
+ * poppler_annot_text_get_icon:
+ * @poppler_annot: a #PopplerAnnotText
+ *
+ * Gets name of the icon of @poppler_annot.
+ *
+ * Return value: a new allocated string containing the icon name
+ */
+gchar *
+poppler_annot_text_get_icon (PopplerAnnotText *poppler_annot)
+{
+ AnnotText *annot;
+ GooString *text;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_TEXT (poppler_annot), NULL);
+
+ annot = static_cast<AnnotText *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ text = annot->getIcon ();
+
+ return text ? _poppler_goo_string_to_utf8 (text) : NULL;
+}
+
+/**
+ * poppler_annot_text_set_icon:
+ * @poppler_annot: a #PopplerAnnotText
+ * @icon: the name of an icon
+ *
+ * Sets the icon of @poppler_annot. The following predefined
+ * icons are currently supported:
+ * <variablelist>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_NOTE</term>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_COMMENT</term>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_KEY</term>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_HELP</term>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_NEW_PARAGRAPH</term>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_PARAGRAPH</term>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_INSERT</term>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_CROSS</term>
+ * </varlistentry>
+ * <varlistentry>
+ * <term>#POPPLER_ANNOT_TEXT_ICON_CIRCLE</term>
+ * </varlistentry>
+ * </variablelist>
+ *
+ * Since: 0.16
+ */
+void
+poppler_annot_text_set_icon (PopplerAnnotText *poppler_annot,
+ const gchar *icon)
+{
+ AnnotText *annot;
+ GooString *text;
+
+ g_return_if_fail (POPPLER_IS_ANNOT_TEXT (poppler_annot));
+
+ annot = static_cast<AnnotText *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ text = new GooString(icon);
+ annot->setIcon(text);
+ delete text;
+}
+
+/**
+ * poppler_annot_text_get_state:
+ * @poppler_annot: a #PopplerAnnotText
+ *
+ * Retrieves the state of @poppler_annot.
+ *
+ * Return value: #PopplerAnnotTextState of @poppler_annot.
+ **/
+PopplerAnnotTextState
+poppler_annot_text_get_state (PopplerAnnotText *poppler_annot)
+{
+ AnnotText *annot;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_TEXT (poppler_annot), POPPLER_ANNOT_TEXT_STATE_UNKNOWN);
+
+ annot = static_cast<AnnotText *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ switch (annot->getState ())
+ {
+ case AnnotText::stateUnknown:
+ return POPPLER_ANNOT_TEXT_STATE_UNKNOWN;
+ case AnnotText::stateMarked:
+ return POPPLER_ANNOT_TEXT_STATE_MARKED;
+ case AnnotText::stateUnmarked:
+ return POPPLER_ANNOT_TEXT_STATE_UNMARKED;
+ case AnnotText::stateAccepted:
+ return POPPLER_ANNOT_TEXT_STATE_ACCEPTED;
+ case AnnotText::stateRejected:
+ return POPPLER_ANNOT_TEXT_STATE_REJECTED;
+ case AnnotText::stateCancelled:
+ return POPPLER_ANNOT_TEXT_STATE_CANCELLED;
+ case AnnotText::stateCompleted:
+ return POPPLER_ANNOT_TEXT_STATE_COMPLETED;
+ case AnnotText::stateNone:
+ return POPPLER_ANNOT_TEXT_STATE_NONE;
+ default:
+ g_warning ("Unsupported Annot Text State");
+ }
+
+ return POPPLER_ANNOT_TEXT_STATE_UNKNOWN;
+}
+
+/* PopplerAnnotFreeText */
+/**
+ * poppler_annot_free_text_get_quadding:
+ * @poppler_annot: a #PopplerAnnotFreeText
+ *
+ * Retrieves the justification of the text of @poppler_annot.
+ *
+ * Return value: #PopplerAnnotFreeTextQuadding of @poppler_annot.
+ **/
+PopplerAnnotFreeTextQuadding
+poppler_annot_free_text_get_quadding (PopplerAnnotFreeText *poppler_annot)
+{
+ AnnotFreeText *annot;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_FREE_TEXT (poppler_annot), POPPLER_ANNOT_FREE_TEXT_QUADDING_LEFT_JUSTIFIED);
+
+ annot = static_cast<AnnotFreeText *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ switch (annot->getQuadding ())
+ {
+ case AnnotFreeText::quaddingLeftJustified:
+ return POPPLER_ANNOT_FREE_TEXT_QUADDING_LEFT_JUSTIFIED;
+ case AnnotFreeText::quaddingCentered:
+ return POPPLER_ANNOT_FREE_TEXT_QUADDING_CENTERED;
+ case AnnotFreeText::quaddingRightJustified:
+ return POPPLER_ANNOT_FREE_TEXT_QUADDING_RIGHT_JUSTIFIED;
+ default:
+ g_warning ("Unsupported Annot Free Text Quadding");
+ }
+
+ return POPPLER_ANNOT_FREE_TEXT_QUADDING_LEFT_JUSTIFIED;
+}
+
+/**
+ * poppler_annot_free_text_get_callout_line:
+ * @poppler_annot: a #PopplerAnnotFreeText
+ *
+ * Retrieves a #PopplerCalloutLine of four or six numbers specifying a callout
+ * line attached to the @poppler_annot.
+ *
+ * Return value: a new allocated #PopplerCalloutLine if the annot has a callout
+ * line, NULL in other case. It must be freed with g_free() when
+ * done.
+ **/
+PopplerAnnotCalloutLine *
+poppler_annot_free_text_get_callout_line (PopplerAnnotFreeText *poppler_annot)
+{
+ AnnotFreeText *annot;
+ AnnotCalloutLine *line;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_FREE_TEXT (poppler_annot), NULL);
+
+ annot = static_cast<AnnotFreeText *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ if ((line = annot->getCalloutLine ())) {
+ AnnotCalloutMultiLine *multiline;
+ PopplerAnnotCalloutLine *callout = g_new0 (PopplerAnnotCalloutLine, 1);
+
+ callout->x1 = line->getX1();
+ callout->y1 = line->getY1();
+ callout->x2 = line->getX2();
+ callout->y2 = line->getY2();
+
+ if ((multiline = static_cast<AnnotCalloutMultiLine *>(line))) {
+ callout->multiline = TRUE;
+ callout->x3 = multiline->getX3();
+ callout->y3 = multiline->getY3();
+ return callout;
+ }
+</