aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-week-view-titles-item.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2009-09-22 07:25:41 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-09-22 22:34:26 +0800
commit7be192643685acdc081332fc9177417d67870c53 (patch)
tree1c04a080735ed962b6dd89594e16efbf62ed5123 /calendar/gui/e-week-view-titles-item.c
parent5a80f92d37e7e8a814f70f826b7b33f5d21b0f72 (diff)
downloadgsoc2013-evolution-7be192643685acdc081332fc9177417d67870c53.tar
gsoc2013-evolution-7be192643685acdc081332fc9177417d67870c53.tar.gz
gsoc2013-evolution-7be192643685acdc081332fc9177417d67870c53.tar.bz2
gsoc2013-evolution-7be192643685acdc081332fc9177417d67870c53.tar.lz
gsoc2013-evolution-7be192643685acdc081332fc9177417d67870c53.tar.xz
gsoc2013-evolution-7be192643685acdc081332fc9177417d67870c53.tar.zst
gsoc2013-evolution-7be192643685acdc081332fc9177417d67870c53.zip
Calendar canvas item cleanup.
Diffstat (limited to 'calendar/gui/e-week-view-titles-item.c')
-rw-r--r--calendar/gui/e-week-view-titles-item.c242
1 files changed, 157 insertions, 85 deletions
diff --git a/calendar/gui/e-week-view-titles-item.c b/calendar/gui/e-week-view-titles-item.c
index 69108f43cb..f2d90e7150 100644
--- a/calendar/gui/e-week-view-titles-item.c
+++ b/calendar/gui/e-week-view-titles-item.c
@@ -29,92 +29,83 @@
#include <e-util/e-util.h>
#include "e-week-view-titles-item.h"
-static void e_week_view_titles_item_set_property(GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec);
-static void e_week_view_titles_item_update (GnomeCanvasItem *item,
- double *affine,
- ArtSVP *clip_path,
- gint flags);
-static void e_week_view_titles_item_draw (GnomeCanvasItem *item,
- GdkDrawable *drawable,
- gint x,
- gint y,
- gint width,
- gint height);
-static double e_week_view_titles_item_point (GnomeCanvasItem *item,
- double x,
- double y,
- gint cx,
- gint cy,
- GnomeCanvasItem **actual_item);
-
-/* The arguments we take */
+#define E_WEEK_VIEW_TITLES_ITEM_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE \
+ ((obj), E_TYPE_WEEK_VIEW_TITLES_ITEM, EWeekViewTitlesItemPrivate))
+
+struct _EWeekViewTitlesItemPrivate {
+ EWeekView *week_view;
+};
+
enum {
PROP_0,
PROP_WEEK_VIEW
};
-G_DEFINE_TYPE (EWeekViewTitlesItem, e_week_view_titles_item, GNOME_TYPE_CANVAS_ITEM)
+static gpointer parent_class;
static void
-e_week_view_titles_item_class_init (EWeekViewTitlesItemClass *class)
+week_view_titles_item_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- GObjectClass *object_class;
- GnomeCanvasItemClass *item_class;
-
- object_class = G_OBJECT_CLASS (class);
- object_class->set_property = e_week_view_titles_item_set_property;
-
- item_class = GNOME_CANVAS_ITEM_CLASS (class);
- item_class->update = e_week_view_titles_item_update;
- item_class->draw = e_week_view_titles_item_draw;
- item_class->point = e_week_view_titles_item_point;
+ switch (property_id) {
+ case PROP_WEEK_VIEW:
+ e_week_view_titles_item_set_week_view (
+ E_WEEK_VIEW_TITLES_ITEM (object),
+ g_value_get_object (value));
+ return;
+ }
- g_object_class_install_property (
- object_class,
- PROP_WEEK_VIEW,
- g_param_spec_pointer (
- "week_view",
- NULL,
- NULL,
- G_PARAM_WRITABLE));
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
-e_week_view_titles_item_init (EWeekViewTitlesItem *wvtitem)
+week_view_titles_item_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- wvtitem->week_view = NULL;
+ switch (property_id) {
+ case PROP_WEEK_VIEW:
+ g_value_set_object (
+ value,
+ e_week_view_titles_item_get_week_view (
+ E_WEEK_VIEW_TITLES_ITEM (object)));
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
-e_week_view_titles_item_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
+week_view_titles_item_dispose (GObject *object)
{
- EWeekViewTitlesItem *wvtitem;
+ EWeekViewTitlesItemPrivate *priv;
- wvtitem = E_WEEK_VIEW_TITLES_ITEM (object);
+ priv = E_WEEK_VIEW_TITLES_ITEM_GET_PRIVATE (object);
- switch (property_id) {
- case PROP_WEEK_VIEW:
- wvtitem->week_view = g_value_get_pointer (value);
- return;
+ if (priv->week_view != NULL) {
+ g_object_unref (priv->week_view);
+ priv->week_view = NULL;
}
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ /* Chain up to parent's dispose() method. */
+ G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
-e_week_view_titles_item_update (GnomeCanvasItem *item,
- double *affine,
- ArtSVP *clip_path,
- gint flags)
+week_view_titles_item_update (GnomeCanvasItem *item,
+ gdouble *affine,
+ ArtSVP *clip_path,
+ gint flags)
{
- if (GNOME_CANVAS_ITEM_CLASS (e_week_view_titles_item_parent_class)->update)
- (* GNOME_CANVAS_ITEM_CLASS (e_week_view_titles_item_parent_class)->update) (item, affine, clip_path, flags);
+ GnomeCanvasItemClass *canvas_item_class;
+
+ /* Chain up to parent's update() method. */
+ canvas_item_class = GNOME_CANVAS_ITEM_CLASS (parent_class);
+ canvas_item_class->update (item, affine, clip_path, flags);
/* The item covers the entire canvas area. */
item->x1 = 0;
@@ -123,19 +114,15 @@ e_week_view_titles_item_update (GnomeCanvasItem *item,
item->y2 = INT_MAX;
}
-/*
- * DRAWING ROUTINES - functions to paint the canvas item.
- */
-
static void
-e_week_view_titles_item_draw (GnomeCanvasItem *canvas_item,
- GdkDrawable *drawable,
- gint x,
- gint y,
- gint width,
- gint height)
+week_view_titles_item_draw (GnomeCanvasItem *canvas_item,
+ GdkDrawable *drawable,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
{
- EWeekViewTitlesItem *wvtitem;
+ EWeekViewTitlesItem *titles_item;
EWeekView *week_view;
GtkStyle *style;
GdkGC *fg_gc, *light_gc, *dark_gc;
@@ -146,13 +133,8 @@ e_week_view_titles_item_draw (GnomeCanvasItem *canvas_item,
gint weekday;
PangoLayout *layout;
-#if 0
- g_print ("In e_week_view_titles_item_draw %i,%i %ix%i\n",
- x, y, width, height);
-#endif
-
- wvtitem = E_WEEK_VIEW_TITLES_ITEM (canvas_item);
- week_view = wvtitem->week_view;
+ titles_item = E_WEEK_VIEW_TITLES_ITEM (canvas_item);
+ week_view = e_week_view_titles_item_get_week_view (titles_item);
g_return_if_fail (week_view != NULL);
style = gtk_widget_get_style (GTK_WIDGET (week_view));
@@ -259,15 +241,105 @@ e_week_view_titles_item_draw (GnomeCanvasItem *canvas_item,
g_object_unref (layout);
}
-/* This is supposed to return the nearest item the the point and the distance.
- Since we are the only item we just return ourself and 0 for the distance.
- This is needed so that we get button/motion events. */
static double
-e_week_view_titles_item_point (GnomeCanvasItem *item, double x, double y,
- gint cx, gint cy,
- GnomeCanvasItem **actual_item)
+week_view_titles_item_point (GnomeCanvasItem *item,
+ gdouble x,
+ gdouble y,
+ gint cx,
+ gint cy,
+ GnomeCanvasItem **actual_item)
{
+ /* This is supposed to return the nearest item the the point
+ * and the distance. Since we are the only item we just return
+ * ourself and 0 for the distance. This is needed so that we
+ * get button/motion events. */
*actual_item = item;
+
return 0.0;
}
+static void
+week_view_titles_item_class_init (EWeekViewTitlesItemClass *class)
+{
+ GObjectClass *object_class;
+ GnomeCanvasItemClass *item_class;
+
+ parent_class = g_type_class_peek_parent (class);
+ g_type_class_add_private (class, sizeof (EWeekViewTitlesItemPrivate));
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->set_property = week_view_titles_item_set_property;
+ object_class->get_property = week_view_titles_item_get_property;
+ object_class->dispose = week_view_titles_item_dispose;
+
+ item_class = GNOME_CANVAS_ITEM_CLASS (class);
+ item_class->update = week_view_titles_item_update;
+ item_class->draw = week_view_titles_item_draw;
+ item_class->point = week_view_titles_item_point;
+
+ g_object_class_install_property (
+ object_class,
+ PROP_WEEK_VIEW,
+ g_param_spec_object (
+ "week-view",
+ "Week View",
+ NULL,
+ E_TYPE_WEEK_VIEW,
+ G_PARAM_READWRITE));
+}
+
+static void
+week_view_titles_item_init (EWeekViewTitlesItem *titles_item)
+{
+ titles_item->priv = E_WEEK_VIEW_TITLES_ITEM_GET_PRIVATE (titles_item);
+}
+
+GType
+e_week_view_titles_item_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0)) {
+ const GTypeInfo type_info = {
+ sizeof (EWeekViewTitlesItemClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) week_view_titles_item_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL, /* class_data */
+ sizeof (EWeekViewTitlesItem),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) week_view_titles_item_init,
+ NULL /* value_table */
+ };
+
+ type = g_type_register_static (
+ GNOME_TYPE_CANVAS_ITEM, "EWeekViewTitlesItem",
+ &type_info, 0);
+ }
+
+ return type;
+}
+
+EWeekView *
+e_week_view_titles_item_get_week_view (EWeekViewTitlesItem *titles_item)
+{
+ g_return_val_if_fail (E_IS_WEEK_VIEW_TITLES_ITEM (titles_item), NULL);
+
+ return titles_item->priv->week_view;
+}
+
+void
+e_week_view_titles_item_set_week_view (EWeekViewTitlesItem *titles_item,
+ EWeekView *week_view)
+{
+ g_return_if_fail (E_IS_WEEK_VIEW_TITLES_ITEM (titles_item));
+ g_return_if_fail (E_IS_WEEK_VIEW (week_view));
+
+ if (titles_item->priv->week_view != NULL)
+ g_object_unref (titles_item->priv->week_view);
+
+ titles_item->priv->week_view = g_object_ref (week_view);
+
+ g_object_notify (G_OBJECT (titles_item), "week-view");
+}