X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=libdocument%2Fev-annotation.c;h=8a8e055e1e127563bd912bde57cc3e23312a458c;hb=7d59434cbd7ea6bdd42a6f3223a47cbb06ba4069;hp=7d2810fe8c9f6f12aacdc6661939e0a1efa69ca8;hpb=44205a9ede6bde99d7594a9c531521540acc7e81;p=evince.git diff --git a/libdocument/ev-annotation.c b/libdocument/ev-annotation.c index 7d2810fe..8a8e055e 100644 --- a/libdocument/ev-annotation.c +++ b/libdocument/ev-annotation.c @@ -24,13 +24,15 @@ #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, PROP_LABEL, PROP_OPACITY, + PROP_HAS_POPUP, PROP_RECTANGLE, PROP_IS_OPEN }; @@ -65,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 @@ -108,21 +115,11 @@ 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; gdouble opacity; + gboolean has_popup; gboolean is_open; EvRectangle *rectangle; } EvAnnotationMarkupProps; @@ -147,6 +144,13 @@ ev_annotation_markup_iface_base_init (EvAnnotationMarkupIface *iface) G_MAXDOUBLE, 0, G_PARAM_READWRITE)); + g_object_interface_install_property (iface, + g_param_spec_boolean ("has_popup", + "Has popup", + "Whether the markup annotation has " + "a popup window associated", + TRUE, + G_PARAM_READWRITE)); g_object_interface_install_property (iface, g_param_spec_boxed ("rectangle", "Rectangle", @@ -211,6 +215,9 @@ ev_annotation_markup_set_property (GObject *object, case PROP_OPACITY: props->opacity = g_value_get_double (value); break; + case PROP_HAS_POPUP: + props->has_popup = g_value_get_boolean (value); + break; case PROP_RECTANGLE: ev_rectangle_free (props->rectangle); props->rectangle = g_value_dup_boxed (value); @@ -240,6 +247,9 @@ ev_annotation_markup_get_property (GObject *object, case PROP_OPACITY: g_value_set_double (value, props->opacity); break; + case PROP_HAS_POPUP: + g_value_set_boolean (value, props->has_popup); + break; case PROP_RECTANGLE: g_value_set_boxed (value, props->rectangle); break; @@ -259,6 +269,7 @@ ev_annotation_markup_class_install_properties (GObjectClass *klass) g_object_class_override_property (klass, PROP_LABEL, "label"); g_object_class_override_property (klass, PROP_OPACITY, "opacity"); + g_object_class_override_property (klass, PROP_HAS_POPUP, "has_popup"); g_object_class_override_property (klass, PROP_RECTANGLE, "rectangle"); g_object_class_override_property (klass, PROP_IS_OPEN, "is_open"); } @@ -306,6 +317,18 @@ ev_annotation_markup_set_opacity (EvAnnotationMarkup *markup, g_object_set (G_OBJECT (markup), "opacity", opacity, NULL); } +gboolean +ev_annotation_markup_has_popup (EvAnnotationMarkup *markup) +{ + gboolean retval; + + g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), FALSE); + + g_object_get (G_OBJECT (markup), "has_popup", &retval, NULL); + + return retval; +} + void ev_annotation_markup_get_rectangle (EvAnnotationMarkup *markup, EvRectangle *ev_rect) @@ -359,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; +}