summaryrefslogtreecommitdiff
path: root/glib
diff options
context:
space:
mode:
authorGermán Poo-Caamaño <gpoo@gnome.org>2013-11-18 16:42:08 -0800
committerCarlos Garcia Campos <carlosgc@gnome.org>2014-01-19 16:13:48 +0100
commit9a7699ebe3e644ba845ef75d9295c88d321cb934 (patch)
tree996e7bd28c4047de7ed6b0f341cf4fffc45eaa6f /glib
parent40040b41216a3dcc833fc224f1c6f15517a88aed (diff)
glib: Add PopplerAnnotTextMarkup class and subtypes
The subtypes are: Highlihght, Squiggly, StrikeOut and Underline. It adds convenient methods to set/get/free quadrilaterals necessaries for TextMarkup annotations. https://bugs.freedesktop.org/show_bug.cgi?id=51487
Diffstat (limited to 'glib')
-rw-r--r--glib/poppler-annot.cc264
-rw-r--r--glib/poppler-annot.h23
-rw-r--r--glib/poppler-page.cc6
-rw-r--r--glib/poppler-private.h1
-rw-r--r--glib/poppler.h1
-rw-r--r--glib/reference/poppler-sections.txt11
6 files changed, 306 insertions, 0 deletions
diff --git a/glib/poppler-annot.cc b/glib/poppler-annot.cc
index 6a1c05e9..a4c00870 100644
--- a/glib/poppler-annot.cc
+++ b/glib/poppler-annot.cc
@@ -33,6 +33,7 @@ typedef struct _PopplerAnnotClass PopplerAnnotClass;
typedef struct _PopplerAnnotMarkupClass PopplerAnnotMarkupClass;
typedef struct _PopplerAnnotFreeTextClass PopplerAnnotFreeTextClass;
typedef struct _PopplerAnnotTextClass PopplerAnnotTextClass;
+typedef struct _PopplerAnnotTextMarkupClass PopplerAnnotTextMarkupClass;
typedef struct _PopplerAnnotFileAttachmentClass PopplerAnnotFileAttachmentClass;
typedef struct _PopplerAnnotMovieClass PopplerAnnotMovieClass;
typedef struct _PopplerAnnotScreenClass PopplerAnnotScreenClass;
@@ -65,6 +66,16 @@ struct _PopplerAnnotTextClass
PopplerAnnotMarkupClass parent_class;
};
+struct _PopplerAnnotTextMarkup
+{
+ PopplerAnnotMarkup parent_instance;
+};
+
+struct _PopplerAnnotTextMarkupClass
+{
+ PopplerAnnotMarkupClass parent_class;
+};
+
struct _PopplerAnnotFreeText
{
PopplerAnnotMarkup parent_instance;
@@ -141,6 +152,7 @@ struct _PopplerAnnotSquareClass
G_DEFINE_TYPE (PopplerAnnot, poppler_annot, G_TYPE_OBJECT)
G_DEFINE_TYPE (PopplerAnnotMarkup, poppler_annot_markup, POPPLER_TYPE_ANNOT)
+G_DEFINE_TYPE (PopplerAnnotTextMarkup, poppler_annot_text_markup, POPPLER_TYPE_ANNOT_MARKUP)
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)
@@ -246,6 +258,208 @@ poppler_annot_text_new (PopplerDocument *doc,
return _poppler_annot_text_new (annot);
}
+PopplerAnnot *
+_poppler_annot_text_markup_new (Annot *annot)
+{
+ return _poppler_create_annot (POPPLER_TYPE_ANNOT_TEXT_MARKUP, annot);
+}
+
+static AnnotQuadrilaterals *
+create_annot_quads_from_poppler_quads (GArray *quads)
+{
+ AnnotQuadrilaterals::AnnotQuadrilateral **quads_array;
+
+ g_assert (quads->len > 0);
+
+ quads_array = (AnnotQuadrilaterals::AnnotQuadrilateral **) g_malloc0_n (
+ sizeof (AnnotQuadrilaterals::AnnotQuadrilateral *),
+ quads->len);
+
+ for (guint i = 0; i < quads->len; i++) {
+ PopplerQuadrilateral *quadrilateral = &g_array_index (quads, PopplerQuadrilateral, i);
+
+ quads_array[i] = new AnnotQuadrilaterals::AnnotQuadrilateral (
+ quadrilateral->p1.x, quadrilateral->p1.y,
+ quadrilateral->p2.x, quadrilateral->p2.y,
+ quadrilateral->p3.x, quadrilateral->p3.y,
+ quadrilateral->p4.x, quadrilateral->p4.y);
+ }
+
+ return new AnnotQuadrilaterals (quads_array, quads->len);
+}
+
+static GArray *
+create_poppler_quads_from_annot_quads (AnnotQuadrilaterals *quads_array)
+{
+ GArray *quads;
+ guint quads_len;
+
+ quads_len = quads_array->getQuadrilateralsLength();
+ quads = g_array_sized_new (FALSE, FALSE,
+ sizeof (PopplerQuadrilateral),
+ quads_len);
+ g_array_set_size (quads, quads_len);
+
+ for (guint i = 0; i < quads_len; ++i) {
+ PopplerQuadrilateral *quadrilateral = &g_array_index (quads, PopplerQuadrilateral, i);
+
+ quadrilateral->p1.x = quads_array->getX1(i);
+ quadrilateral->p1.y = quads_array->getX1(i);
+ quadrilateral->p2.x = quads_array->getX2(i);
+ quadrilateral->p2.y = quads_array->getY2(i);
+ quadrilateral->p3.x = quads_array->getX3(i);
+ quadrilateral->p3.y = quads_array->getY3(i);
+ quadrilateral->p4.x = quads_array->getX4(i);
+ quadrilateral->p4.y = quads_array->getY4(i);
+ }
+
+ return quads;
+}
+
+static void
+poppler_annot_text_markup_init (PopplerAnnotTextMarkup *poppler_annot)
+{
+}
+
+static void
+poppler_annot_text_markup_class_init (PopplerAnnotTextMarkupClass *klass)
+{
+}
+
+/**
+ * poppler_annot_text_markup_new_highlight:
+ * @doc: a #PopplerDocument
+ * @rect: a #PopplerRectangle
+ * @quadrilaterals: (element-type PopplerQuadrilateral): A #GArray of
+ * #PopplerQuadrilateral<!-- -->s
+ *
+ * Creates a new Highlight Text annotation that will be
+ * located on @rect when added to a page. See poppler_page_add_annot()
+ *
+ * Return value: (transfer full): A newly created #PopplerAnnotTextMarkup annotation
+ *
+ * Since: 0.26
+ */
+PopplerAnnot *
+poppler_annot_text_markup_new_highlight (PopplerDocument *doc,
+ PopplerRectangle *rect,
+ GArray *quadrilaterals)
+{
+ PopplerAnnot *poppler_annot;
+ AnnotTextMarkup *annot;
+ PDFRectangle pdf_rect(rect->x1, rect->y1,
+ rect->x2, rect->y2);
+
+ annot = new AnnotTextMarkup (doc->doc, &pdf_rect, Annot::typeHighlight);
+
+ poppler_annot = _poppler_annot_text_markup_new (annot);
+ poppler_annot_text_markup_set_quadrilaterals (POPPLER_ANNOT_TEXT_MARKUP (poppler_annot),
+ quadrilaterals);
+ return poppler_annot;
+}
+
+/**
+ * poppler_annot_text_markup_new_squiggly:
+ * @doc: a #PopplerDocument
+ * @rect: a #PopplerRectangle
+ * @quadrilaterals: (element-type PopplerQuadrilateral): A #GArray of
+ * #PopplerQuadrilateral<!-- -->s
+ *
+ * Creates a new Squiggly Text annotation that will be
+ * located on @rect when added to a page. See poppler_page_add_annot()
+ *
+ * Return value: (transfer full): A newly created #PopplerAnnotTextMarkup annotation
+ *
+ * Since: 0.26
+ */
+PopplerAnnot *
+poppler_annot_text_markup_new_squiggly (PopplerDocument *doc,
+ PopplerRectangle *rect,
+ GArray *quadrilaterals)
+{
+ PopplerAnnot *poppler_annot;
+ AnnotTextMarkup *annot;
+ PDFRectangle pdf_rect(rect->x1, rect->y1,
+ rect->x2, rect->y2);
+
+ g_return_val_if_fail (quadrilaterals != NULL && quadrilaterals->len > 0, NULL);
+
+ annot = new AnnotTextMarkup (doc->doc, &pdf_rect, Annot::typeSquiggly);
+
+ poppler_annot = _poppler_annot_text_markup_new (annot);
+ poppler_annot_text_markup_set_quadrilaterals (POPPLER_ANNOT_TEXT_MARKUP (poppler_annot),
+ quadrilaterals);
+ return poppler_annot;
+}
+
+/**
+ * poppler_annot_text_markup_new_strikeout:
+ * @doc: a #PopplerDocument
+ * @rect: a #PopplerRectangle
+ * @quadrilaterals: (element-type PopplerQuadrilateral): A #GArray of
+ * #PopplerQuadrilateral<!-- -->s
+ *
+ * Creates a new Strike Out Text annotation that will be
+ * located on @rect when added to a page. See poppler_page_add_annot()
+ *
+ * Return value: (transfer full): A newly created #PopplerAnnotTextMarkup annotation
+ *
+ * Since: 0.26
+ */
+PopplerAnnot *
+poppler_annot_text_markup_new_strikeout (PopplerDocument *doc,
+ PopplerRectangle *rect,
+ GArray *quadrilaterals)
+{
+ PopplerAnnot *poppler_annot;
+ AnnotTextMarkup *annot;
+ PDFRectangle pdf_rect(rect->x1, rect->y1,
+ rect->x2, rect->y2);
+
+ g_return_val_if_fail (quadrilaterals != NULL && quadrilaterals->len > 0, NULL);
+
+ annot = new AnnotTextMarkup (doc->doc, &pdf_rect, Annot::typeStrikeOut);
+
+ poppler_annot = _poppler_annot_text_markup_new (annot);
+ poppler_annot_text_markup_set_quadrilaterals (POPPLER_ANNOT_TEXT_MARKUP (poppler_annot),
+ quadrilaterals);
+ return poppler_annot;
+}
+
+/**
+ * poppler_annot_text_markup_new_underline:
+ * @doc: a #PopplerDocument
+ * @rect: a #PopplerRectangle
+ * @quadrilaterals: (element-type PopplerQuadrilateral): A #GArray of
+ * #PopplerQuadrilateral<!-- -->s
+ *
+ * Creates a new Underline Text annotation that will be
+ * located on @rect when added to a page. See poppler_page_add_annot()
+ *
+ * Return value: (transfer full): A newly created #PopplerAnnotTextMarkup annotation
+ *
+ * Since: 0.26
+ */
+PopplerAnnot *
+poppler_annot_text_markup_new_underline (PopplerDocument *doc,
+ PopplerRectangle *rect,
+ GArray *quadrilaterals)
+{
+ PopplerAnnot *poppler_annot;
+ AnnotTextMarkup *annot;
+ PDFRectangle pdf_rect(rect->x1, rect->y1,
+ rect->x2, rect->y2);
+
+ g_return_val_if_fail (quadrilaterals != NULL && quadrilaterals->len > 0, NULL);
+
+ annot = new AnnotTextMarkup (doc->doc, &pdf_rect, Annot::typeUnderline);
+
+ poppler_annot = _poppler_annot_text_markup_new (annot);
+ poppler_annot_text_markup_set_quadrilaterals (POPPLER_ANNOT_TEXT_MARKUP (poppler_annot),
+ quadrilaterals);
+ return poppler_annot;
+}
+
static void
poppler_annot_free_text_init (PopplerAnnotFreeText *poppler_annot)
{
@@ -1353,6 +1567,56 @@ poppler_annot_text_get_state (PopplerAnnotText *poppler_annot)
return POPPLER_ANNOT_TEXT_STATE_UNKNOWN;
}
+/* PopplerAnnotTextMarkup */
+/**
+ * poppler_annot_text_markup_set_quadrilaterals:
+ * @poppler_annot: A #PopplerAnnotTextMarkup
+ * @quadrilaterals: (element-type PopplerQuadrilateral): A #GArray of
+ * #PopplerQuadrilateral<!-- -->s
+ *
+ * Set the regions (Quadrilaterals) to apply the text markup in @poppler_annot.
+ *
+ * Since: 0.26
+ **/
+void
+poppler_annot_text_markup_set_quadrilaterals (PopplerAnnotTextMarkup *poppler_annot,
+ GArray *quadrilaterals)
+{
+ AnnotTextMarkup *annot;
+
+ g_return_if_fail (POPPLER_IS_ANNOT_TEXT_MARKUP (poppler_annot));
+ g_return_if_fail (quadrilaterals != NULL && quadrilaterals->len > 0);
+
+ annot = static_cast<AnnotTextMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+ AnnotQuadrilaterals *quads = create_annot_quads_from_poppler_quads (quadrilaterals);
+ annot->setQuadrilaterals (quads);
+ delete quads;
+}
+
+/**
+ * poppler_annot_text_markup_get_quadrilaterals:
+ * @poppler_annot: A #PopplerAnnotTextMarkup
+ *
+ * Returns a #GArray of #PopplerQuadrilateral items that map from a
+ * location on @page to a #PopplerAnnotTextMarkup. This array must be freed
+ * when done.
+ *
+ * Return value: (element-type PopplerQuadrilateral) (transfer full): A #GArray of #PopplerQuadrilateral
+ *
+ * Since: 0.26
+ **/
+GArray *
+poppler_annot_text_markup_get_quadrilaterals (PopplerAnnotTextMarkup *poppler_annot)
+{
+ AnnotTextMarkup *annot;
+
+ g_return_val_if_fail (POPPLER_IS_ANNOT_TEXT_MARKUP (poppler_annot), NULL);
+
+ annot = static_cast<AnnotTextMarkup *>(POPPLER_ANNOT (poppler_annot)->annot);
+
+ return create_poppler_quads_from_annot_quads (annot->getQuadrilaterals());
+}
+
/* PopplerAnnotFreeText */
/**
* poppler_annot_free_text_get_quadding:
diff --git a/glib/poppler-annot.h b/glib/poppler-annot.h
index 300e815c..297df038 100644
--- a/glib/poppler-annot.h
+++ b/glib/poppler-annot.h
@@ -38,6 +38,11 @@ G_BEGIN_DECLS
#define POPPLER_ANNOT_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), POPPLER_TYPE_ANNOT_TEXT, PopplerAnnotText))
#define POPPLER_IS_ANNOT_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), POPPLER_TYPE_ANNOT_TEXT))
+#define POPPLER_TYPE_ANNOT_TEXT_MARKUP (poppler_annot_text_markup_get_type ())
+#define POPPLER_ANNOT_TEXT_MARKUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), POPPLER_TYPE_ANNOT_TEXT_MARKUP, PopplerAnnotTextMarkup))
+#define POPPLER_IS_ANNOT_TEXT_MARKUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), POPPLER_TYPE_ANNOT_TEXT_MARKUP))
+
+
#define POPPLER_TYPE_ANNOT_FREE_TEXT (poppler_annot_free_text_get_type ())
#define POPPLER_ANNOT_FREE_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), POPPLER_TYPE_ANNOT_FREE_TEXT, PopplerAnnotFreeText))
#define POPPLER_IS_ANNOT_FREE_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), POPPLER_TYPE_ANNOT_FREE_TEXT))
@@ -217,6 +222,24 @@ void poppler_annot_text_set_icon (
const gchar *icon);
PopplerAnnotTextState poppler_annot_text_get_state (PopplerAnnotText *poppler_annot);
+/* PopplerAnnotTextMarkup */
+GType poppler_annot_text_markup_get_type (void) G_GNUC_CONST;
+PopplerAnnot *poppler_annot_text_markup_new_highlight (PopplerDocument *doc,
+ PopplerRectangle *rect,
+ GArray *quadrilaterals);
+PopplerAnnot *poppler_annot_text_markup_new_squiggly (PopplerDocument *doc,
+ PopplerRectangle *rect,
+ GArray *quadrilaterals);
+PopplerAnnot *poppler_annot_text_markup_new_strikeout (PopplerDocument *doc,
+ PopplerRectangle *rect,
+ GArray *quadrilaterals);
+PopplerAnnot *poppler_annot_text_markup_new_underline (PopplerDocument *doc,
+ PopplerRectangle *rect,
+ GArray *quadrilaterals);
+void poppler_annot_text_markup_set_quadrilaterals (PopplerAnnotTextMarkup *poppler_annot,
+ GArray *quadrilaterals);
+GArray *poppler_annot_text_markup_get_quadrilaterals (PopplerAnnotTextMarkup *poppler_annot);
+
/* PopplerAnnotFreeText */
GType poppler_annot_free_text_get_type (void) G_GNUC_CONST;
PopplerAnnotFreeTextQuadding poppler_annot_free_text_get_quadding (PopplerAnnotFreeText *poppler_annot);
diff --git a/glib/poppler-page.cc b/glib/poppler-page.cc
index ef90eaef..1916f955 100644
--- a/glib/poppler-page.cc
+++ b/glib/poppler-page.cc
@@ -1406,6 +1406,12 @@ poppler_page_get_annot_mapping (PopplerPage *page)
case Annot::typeCircle:
mapping->annot = _poppler_annot_circle_new (annot);
break;
+ case Annot::typeHighlight:
+ case Annot::typeUnderline:
+ case Annot::typeSquiggly:
+ case Annot::typeStrikeOut:
+ mapping->annot = _poppler_annot_text_markup_new (annot);
+ break;
default:
mapping->annot = _poppler_annot_new (annot);
break;
diff --git a/glib/poppler-private.h b/glib/poppler-private.h
index 1a1dab91..93d0f230 100644
--- a/glib/poppler-private.h
+++ b/glib/poppler-private.h
@@ -117,6 +117,7 @@ PopplerMedia *_poppler_media_new (MediaRendition *media);
PopplerAnnot *_poppler_annot_new (Annot *annot);
PopplerAnnot *_poppler_annot_text_new (Annot *annot);
PopplerAnnot *_poppler_annot_free_text_new (Annot *annot);
+PopplerAnnot *_poppler_annot_text_markup_new (Annot *annot);
PopplerAnnot *_poppler_annot_file_attachment_new (Annot *annot);
PopplerAnnot *_poppler_annot_movie_new (Annot *annot);
PopplerAnnot *_poppler_annot_screen_new (Annot *annot);
diff --git a/glib/poppler.h b/glib/poppler.h
index 4313e5ec..0db97d09 100644
--- a/glib/poppler.h
+++ b/glib/poppler.h
@@ -198,6 +198,7 @@ typedef struct _PopplerMedia PopplerMedia;
typedef struct _PopplerAnnot PopplerAnnot;
typedef struct _PopplerAnnotMarkup PopplerAnnotMarkup;
typedef struct _PopplerAnnotText PopplerAnnotText;
+typedef struct _PopplerAnnotTextMarkup PopplerAnnotTextMarkup;
typedef struct _PopplerAnnotFreeText PopplerAnnotFreeText;
typedef struct _PopplerAnnotFileAttachment PopplerAnnotFileAttachment;
typedef struct _PopplerAnnotMovie PopplerAnnotMovie;
diff --git a/glib/reference/poppler-sections.txt b/glib/reference/poppler-sections.txt
index 12218fe1..a954f64a 100644
--- a/glib/reference/poppler-sections.txt
+++ b/glib/reference/poppler-sections.txt
@@ -374,6 +374,7 @@ PopplerAnnot
PopplerAnnotMarkup
PopplerAnnotCircle
PopplerAnnotText
+PopplerAnnotTextMarkup
PopplerAnnotFreeText
PopplerAnnotFileAttachment
PopplerAnnotLine
@@ -428,6 +429,12 @@ poppler_annot_text_set_icon
poppler_annot_text_get_is_open
poppler_annot_text_set_is_open
poppler_annot_text_get_state
+poppler_annot_text_markup_new_highlight
+poppler_annot_text_markup_new_squiggly
+poppler_annot_text_markup_new_strikeout
+poppler_annot_text_markup_new_underline
+poppler_annot_text_markup_set_quadrilaterals
+poppler_annot_text_markup_get_quadrilaterals
poppler_annot_free_text_get_callout_line
poppler_annot_free_text_get_quadding
poppler_annot_file_attachment_get_attachment
@@ -485,12 +492,15 @@ POPPLER_IS_ANNOT_SQUARE
POPPLER_TYPE_ANNOT_SQUARE
POPPLER_ANNOT_TEXT
POPPLER_IS_ANNOT_TEXT
+POPPLER_ANNOT_TEXT_MARKUP
+POPPLER_IS_ANNOT_TEXT_MARKUP
POPPLER_TYPE_ANNOT_TEXT
POPPLER_TYPE_ANNOT_CALLOUT_LINE
POPPLER_TYPE_ANNOT_EXTERNAL_DATA_TYPE
POPPLER_TYPE_ANNOT_FLAG
POPPLER_TYPE_ANNOT_MARKUP_REPLY_TYPE
POPPLER_TYPE_ANNOT_TEXT_STATE
+POPPLER_TYPE_ANNOT_TEXT_MARKUP
POPPLER_TYPE_ANNOT_FREE_TEXT_QUADDING
POPPLER_TYPE_ANNOT_TYPE
POPPLER_TYPE_QUADRILATERAL
@@ -500,6 +510,7 @@ poppler_annot_get_type
poppler_annot_type_get_type
poppler_annot_markup_get_type
poppler_annot_text_get_type
+poppler_annot_text_markup_get_type
poppler_annot_free_text_get_type
poppler_annot_file_attachment_get_type
poppler_annot_screen_get_type