#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
};
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
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;
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",
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);
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;
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");
}
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)
{
}
+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;
+}