[evince] libdocument: Use a common annotation type for text markup annotations



commit 28e04b43c190b71cb141978505a4d7e36ab17a12
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Sun Nov 16 11:29:32 2014 +0100

    libdocument: Use a common annotation type for text markup annotations
    
    And a type property for the different kinds of text markup annotations

 libdocument/ev-annotation.c |   69 +++++++++++++++++++++++++++++++++++++++++-
 libdocument/ev-annotation.h |    6 +++-
 2 files changed, 72 insertions(+), 3 deletions(-)
---
diff --git a/libdocument/ev-annotation.c b/libdocument/ev-annotation.c
index b6fd112..a84b5a1 100644
--- a/libdocument/ev-annotation.c
+++ b/libdocument/ev-annotation.c
@@ -68,6 +68,8 @@ struct _EvAnnotationAttachmentClass {
 
 struct _EvAnnotationTextMarkup {
        EvAnnotation parent;
+
+        EvAnnotationTextMarkupType type;
 };
 
 struct _EvAnnotationTextMarkupClass {
@@ -111,6 +113,11 @@ enum {
        PROP_ATTACHMENT_ATTACHMENT = PROP_MARKUP_POPUP_IS_OPEN + 1
 };
 
+/* EvAnnotationTextMarkup */
+enum {
+        PROP_TEXT_MARKUP_TYPE = PROP_MARKUP_POPUP_IS_OPEN + 1
+};
+
 G_DEFINE_ABSTRACT_TYPE (EvAnnotation, ev_annotation, G_TYPE_OBJECT)
 G_DEFINE_INTERFACE (EvAnnotationMarkup, ev_annotation_markup, EV_TYPE_ANNOTATION)
 G_DEFINE_TYPE_WITH_CODE (EvAnnotationText, ev_annotation_text, EV_TYPE_ANNOTATION,
@@ -1247,8 +1254,53 @@ ev_annotation_attachment_set_attachment (EvAnnotationAttachment *annot,
 
 /* EvAnnotationTextMarkup */
 static void
+ev_annotation_text_markup_get_property (GObject    *object,
+                                        guint       prop_id,
+                                        GValue     *value,
+                                        GParamSpec *pspec)
+{
+       EvAnnotationTextMarkup *annot = EV_ANNOTATION_TEXT_MARKUP (object);
+
+       if (prop_id < PROP_TEXT_MARKUP_TYPE) {
+               ev_annotation_markup_get_property (object, prop_id, value, pspec);
+               return;
+       }
+
+       switch (prop_id) {
+       case PROP_TEXT_MARKUP_TYPE:
+               g_value_set_enum (value, annot->type);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+       }
+}
+
+static void
+ev_annotation_text_markup_set_property (GObject      *object,
+                                        guint         prop_id,
+                                        const GValue *value,
+                                        GParamSpec   *pspec)
+{
+       EvAnnotationTextMarkup *annot = EV_ANNOTATION_TEXT_MARKUP (object);
+
+       if (prop_id < PROP_TEXT_MARKUP_TYPE) {
+               ev_annotation_markup_set_property (object, prop_id, value, pspec);
+               return;
+       }
+
+       switch (prop_id) {
+       case PROP_TEXT_MARKUP_TYPE:
+                annot->type = g_value_get_enum (value);
+               break;
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+       }
+}
+
+static void
 ev_annotation_text_markup_init (EvAnnotationTextMarkup *annot)
 {
+        EV_ANNOTATION (annot)->type = EV_ANNOTATION_TYPE_TEXT_MARKUP;
 }
 
 static void
@@ -1257,6 +1309,20 @@ ev_annotation_text_markup_class_init (EvAnnotationTextMarkupClass *class)
        GObjectClass *g_object_class = G_OBJECT_CLASS (class);
 
        ev_annotation_markup_class_install_properties (g_object_class);
+
+        g_object_class->get_property = ev_annotation_text_markup_get_property;
+        g_object_class->set_property = ev_annotation_text_markup_set_property;
+
+        g_object_class_install_property (g_object_class,
+                                        PROP_TEXT_MARKUP_TYPE,
+                                        g_param_spec_enum ("type",
+                                                           "Type",
+                                                           "The text markup annotation type",
+                                                           EV_TYPE_ANNOTATION_TEXT_MARKUP_TYPE,
+                                                           EV_ANNOTATION_TEXT_MARKUP_HIGHLIGHT,
+                                                           G_PARAM_READWRITE |
+                                                            G_PARAM_CONSTRUCT |
+                                                            G_PARAM_STATIC_STRINGS));
 }
 
 static void
@@ -1269,8 +1335,7 @@ ev_annotation_text_markup_highlight_new (EvPage *page)
 {
         EvAnnotation *annot = EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT_MARKUP,
                                                            "page", page,
+                                                           "type", EV_ANNOTATION_TEXT_MARKUP_HIGHLIGHT,
                                                            NULL));
-        annot->type = EV_ANNOTATION_TYPE_HIGHLIGHT;
-
         return annot;
 }
diff --git a/libdocument/ev-annotation.h b/libdocument/ev-annotation.h
index dc1023e..6501525 100644
--- a/libdocument/ev-annotation.h
+++ b/libdocument/ev-annotation.h
@@ -93,7 +93,7 @@ typedef enum {
        EV_ANNOTATION_TYPE_UNKNOWN,
        EV_ANNOTATION_TYPE_TEXT,
        EV_ANNOTATION_TYPE_ATTACHMENT,
-       EV_ANNOTATION_TYPE_HIGHLIGHT
+       EV_ANNOTATION_TYPE_TEXT_MARKUP
 } EvAnnotationType;
 
 typedef enum {
@@ -109,6 +109,10 @@ typedef enum {
        EV_ANNOTATION_TEXT_ICON_UNKNOWN
 } EvAnnotationTextIcon;
 
+typedef enum {
+        EV_ANNOTATION_TEXT_MARKUP_HIGHLIGHT
+} EvAnnotationTextMarkupType;
+
 /* EvAnnotation */
 GType                ev_annotation_get_type                  (void) G_GNUC_CONST;
 EvAnnotationType     ev_annotation_get_annotation_type       (EvAnnotation           *annot);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]