summaryrefslogtreecommitdiff
path: root/libdocument/ev-annotation.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdocument/ev-annotation.c')
-rw-r--r--libdocument/ev-annotation.c143
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;
+}