[evince] [libdocument] Add EvAnnotationAttachment to support attachment annotations



commit 69f04772d126cb1d81e5bfcc90897055aab312a5
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Mon Nov 16 13:13:58 2009 +0100

    [libdocument] Add EvAnnotationAttachment to support attachment annotations

 libdocument/ev-annotation.c |   80 ++++++++++++++++++++++++++++++++++++-------
 libdocument/ev-annotation.h |   41 +++++++++++++++++++---
 2 files changed, 102 insertions(+), 19 deletions(-)
---
diff --git a/libdocument/ev-annotation.c b/libdocument/ev-annotation.c
index 2fadb97..8a8e055 100644
--- a/libdocument/ev-annotation.c
+++ b/libdocument/ev-annotation.c
@@ -24,8 +24,9 @@
 #include "ev-annotation.h"
 
 
-static void ev_annotation_markup_iface_base_init (EvAnnotationMarkupIface *iface);
-static void ev_annotation_text_markup_iface_init (EvAnnotationMarkupIface *iface);
+static void ev_annotation_markup_iface_base_init       (EvAnnotationMarkupIface *iface);
+static void ev_annotation_text_markup_iface_init       (EvAnnotationMarkupIface *iface);
+static void ev_annotation_attachment_markup_iface_init (EvAnnotationMarkupIface *iface);
 
 enum {
 	PROP_0,
@@ -66,6 +67,11 @@ G_DEFINE_TYPE_WITH_CODE (EvAnnotationText, ev_annotation_text, EV_TYPE_ANNOTATIO
 		 G_IMPLEMENT_INTERFACE (EV_TYPE_ANNOTATION_MARKUP,
 					ev_annotation_text_markup_iface_init);
 	 });
+G_DEFINE_TYPE_WITH_CODE (EvAnnotationAttachment, ev_annotation_attachment, EV_TYPE_ANNOTATION,
+	 {
+		 G_IMPLEMENT_INTERFACE (EV_TYPE_ANNOTATION_MARKUP,
+					ev_annotation_attachment_markup_iface_init);
+	 });
 
 /* EvAnnotation */
 static void
@@ -109,17 +115,6 @@ ev_annotation_class_init (EvAnnotationClass *klass)
 	g_object_class->finalize = ev_annotation_finalize;
 }
 
-EvAnnotation *
-ev_annotation_text_new (EvPage *page)
-{
-	EvAnnotation *annot;
-
-	annot = EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT, NULL));
-	annot->page = g_object_ref (page);
-
-	return annot;
-}
-
 /* EvAnnotationMarkup */
 typedef struct {
 	gchar   *label;
@@ -387,3 +382,62 @@ ev_annotation_text_markup_iface_init (EvAnnotationMarkupIface *iface)
 {
 }
 
+EvAnnotation *
+ev_annotation_text_new (EvPage *page)
+{
+	EvAnnotation *annot;
+
+	annot = EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT, NULL));
+	annot->page = g_object_ref (page);
+
+	return annot;
+}
+
+/* EvAnnotationAttachment */
+static void
+ev_annotation_attachment_finalize (GObject *object)
+{
+	EvAnnotationAttachment *annot = EV_ANNOTATION_ATTACHMENT (object);
+
+	if (annot->attachment) {
+		g_object_unref (annot->attachment);
+		annot->attachment = NULL;
+	}
+
+	G_OBJECT_CLASS (ev_annotation_attachment_parent_class)->finalize (object);
+}
+
+static void
+ev_annotation_attachment_init (EvAnnotationAttachment *annot)
+{
+}
+
+static void
+ev_annotation_attachment_class_init (EvAnnotationAttachmentClass *klass)
+{
+	GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+	ev_annotation_markup_class_install_properties (g_object_class);
+
+	g_object_class->finalize = ev_annotation_attachment_finalize;
+}
+
+static void
+ev_annotation_attachment_markup_iface_init (EvAnnotationMarkupIface *iface)
+{
+}
+
+EvAnnotation *
+ev_annotation_attachment_new (EvPage       *page,
+			      EvAttachment *attachment)
+{
+	EvAnnotation *annot;
+
+	g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), NULL);
+
+	annot = EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_ATTACHMENT, NULL));
+	annot->page = g_object_ref (page);
+	EV_ANNOTATION_ATTACHMENT (annot)->attachment = g_object_ref (attachment);
+
+	return annot;
+}
diff --git a/libdocument/ev-annotation.h b/libdocument/ev-annotation.h
index 06dd1ef..159dc2c 100644
--- a/libdocument/ev-annotation.h
+++ b/libdocument/ev-annotation.h
@@ -29,6 +29,7 @@
 #include <glib-object.h>
 
 #include "ev-document.h"
+#include "ev-attachment.h"
 
 G_BEGIN_DECLS
 
@@ -56,14 +57,25 @@ G_BEGIN_DECLS
 #define EV_IS_ANNOTATION_TEXT_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_ANNOTATION_TEXT))
 #define EV_ANNOTATION_TEXT_GET_CLASS(object)    (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_ANNOTATION_TEXT, EvAnnotationTextClass))
 
-typedef struct _EvAnnotation             EvAnnotation;
-typedef struct _EvAnnotationClass        EvAnnotationClass;
+/* EvAnnotationText */
+#define EV_TYPE_ANNOTATION_ATTACHMENT              (ev_annotation_attachment_get_type())
+#define EV_ANNOTATION_ATTACHMENT(object)           (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_ANNOTATION_ATTACHMENT, EvAnnotationAttachment))
+#define EV_ANNOTATION_ATTACHMENT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_ANNOTATION_ATTACHMENT, EvAnnotationAttachmentClass))
+#define EV_IS_ANNOTATION_ATTACHMENT(object)        (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_ANNOTATION_ATTACHMENT))
+#define EV_IS_ANNOTATION_ATTACHMENT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_ANNOTATION_ATTACHMENT))
+#define EV_ANNOTATION_ATTACHMENT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_ANNOTATION_ATTACHMENT, EvAnnotationAttachmentClass))
+
+typedef struct _EvAnnotation                EvAnnotation;
+typedef struct _EvAnnotationClass           EvAnnotationClass;
 
-typedef struct _EvAnnotationMarkup       EvAnnotationMarkup;
-typedef struct _EvAnnotationMarkupIface  EvAnnotationMarkupIface;
+typedef struct _EvAnnotationMarkup          EvAnnotationMarkup;
+typedef struct _EvAnnotationMarkupIface     EvAnnotationMarkupIface;
 
-typedef struct _EvAnnotationText         EvAnnotationText;
-typedef struct _EvAnnotationTextClass    EvAnnotationTextClass;
+typedef struct _EvAnnotationText            EvAnnotationText;
+typedef struct _EvAnnotationTextClass       EvAnnotationTextClass;
+
+typedef struct _EvAnnotationAttachment      EvAnnotationAttachment;
+typedef struct _EvAnnotationAttachmentClass EvAnnotationAttachmentClass;
 
 struct _EvAnnotation
 {
@@ -101,6 +113,18 @@ struct _EvAnnotationTextClass
 	EvAnnotationClass parent_class;
 };
 
+struct _EvAnnotationAttachment
+{
+	EvAnnotation parent;
+
+	EvAttachment *attachment;
+};
+
+struct _EvAnnotationAttachmentClass
+{
+	EvAnnotationClass parent_class;
+};
+
 /* EvAnnotation */
 GType         ev_annotation_get_type             (void) G_GNUC_CONST;
 
@@ -123,6 +147,11 @@ void          ev_annotation_markup_set_is_open   (EvAnnotationMarkup *markup,
 GType         ev_annotation_text_get_type        (void) G_GNUC_CONST;
 EvAnnotation *ev_annotation_text_new             (EvPage             *page);
 
+/* EvAnnotationText */
+GType         ev_annotation_attachment_get_type  (void) G_GNUC_CONST;
+EvAnnotation *ev_annotation_attachment_new       (EvPage             *page,
+						  EvAttachment       *attachment);
+
 G_END_DECLS
 
 #endif /* EV_ANNOTATION_H */



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