diff options
Diffstat (limited to 'libdocument/ev-annotation.c')
| -rw-r--r-- | libdocument/ev-annotation.c | 143 |
1 files changed, 142 insertions, 1 deletions
diff --git a/libdocument/ev-annotation.c b/libdocument/ev-annotation.c index 03fe925c..7b4b575d 100644 --- a/libdocument/ev-annotation.c +++ b/libdocument/ev-annotation.c @@ -66,7 +66,18 @@ struct _EvAnnotationAttachmentClass { EvAnnotationClass parent_class; }; -static void ev_annotation_text_markup_iface_init (EvAnnotationMarkupInterface *iface); +struct _EvAnnotationTextMarkup { + EvAnnotation parent; + + EvAnnotationTextMarkupType type; +}; + +struct _EvAnnotationTextMarkupClass { + EvAnnotationClass parent_class; +}; + +static void ev_annotation_text_markup_iface_init (EvAnnotationMarkupInterface *iface); +static void ev_annotation_text_markup_markup_iface_init (EvAnnotationMarkupInterface *iface); static void ev_annotation_attachment_markup_iface_init (EvAnnotationMarkupInterface *iface); /* EvAnnotation */ @@ -101,6 +112,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, @@ -113,6 +129,11 @@ G_DEFINE_TYPE_WITH_CODE (EvAnnotationAttachment, ev_annotation_attachment, EV_TY G_IMPLEMENT_INTERFACE (EV_TYPE_ANNOTATION_MARKUP, ev_annotation_attachment_markup_iface_init); }); +G_DEFINE_TYPE_WITH_CODE (EvAnnotationTextMarkup, ev_annotation_text_markup, EV_TYPE_ANNOTATION, + { + G_IMPLEMENT_INTERFACE (EV_TYPE_ANNOTATION_MARKUP, + ev_annotation_text_markup_markup_iface_init); + }); /* EvAnnotation */ static void @@ -1218,3 +1239,123 @@ ev_annotation_attachment_set_attachment (EvAnnotationAttachment *annot, return TRUE; } + +/* EvAnnotationTextMarkup */ +static void +ev_annotation_text_markup_init (EvAnnotationTextMarkup *annot) +{ + EV_ANNOTATION (annot)->type = EV_ANNOTATION_TYPE_TEXT_MARKUP; +} + +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 = (EvAnnotationTextMarkupType) g_value_get_enum (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +} + +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_class_init (EvAnnotationTextMarkupClass *klass) +{ + GObjectClass *g_object_class = G_OBJECT_CLASS (klass); + + ev_annotation_markup_class_install_properties (g_object_class); + + g_object_class->set_property = ev_annotation_text_markup_set_property; + g_object_class->get_property = ev_annotation_text_markup_get_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)); +} + +static void +ev_annotation_text_markup_markup_iface_init (EvAnnotationMarkupInterface *iface) +{ +} + +EvAnnotation * +ev_annotation_text_markup_highlight_new (EvPage *page) +{ + return EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT_MARKUP, + "page", page, + "type", EV_ANNOTATION_TEXT_MARKUP_HIGHLIGHT, + NULL)); +} + +EvAnnotation * +ev_annotation_text_markup_strike_out_new (EvPage *page) +{ + return EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT_MARKUP, + "page", page, + "type", EV_ANNOTATION_TEXT_MARKUP_STRIKE_OUT, + NULL)); +} + +EvAnnotation * +ev_annotation_text_markup_underline_new (EvPage *page) +{ + return EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT_MARKUP, + "page", page, + "type", EV_ANNOTATION_TEXT_MARKUP_UNDERLINE, + NULL)); +} + +EvAnnotation * +ev_annotation_text_markup_squiggly_new (EvPage *page) +{ + return EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT_MARKUP, + "page", page, + "type", EV_ANNOTATION_TEXT_MARKUP_SQUIGGLY, + NULL)); +} + +EvAnnotationTextMarkupType +ev_annotation_text_markup_get_markup_type (EvAnnotationTextMarkup *annot) +{ + g_return_val_if_fail (EV_IS_ANNOTATION_TEXT_MARKUP (annot), 0); + + return annot->type; +} |
