From 948aae4d6fd9263055de898eccbcc6d795ddb3b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erick=20P=C3=A9rez=20Castellanos?= Date: Sat, 27 Jul 2013 20:16:05 -0400 Subject: [PATCH] gcal-all-day-grid: added get_cell_position helper Helper to detect the position of a marked cell --- src/gcal-all-day-grid.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/gcal-all-day-grid.h | 5 +++++ 2 files changed, 46 insertions(+) diff --git a/src/gcal-all-day-grid.c b/src/gcal-all-day-grid.c index f11b6f1a..5616ec30 100644 --- a/src/gcal-all-day-grid.c +++ b/src/gcal-all-day-grid.c @@ -1010,3 +1010,44 @@ gcal_all_day_grid_clear_marks (GcalAllDayGrid *all_day) priv->end_mark_cell = -1; gtk_widget_queue_draw (GTK_WIDGET (all_day)); } + +void +gcal_all_day_grid_get_cell_position (GcalAllDayGrid *all_day, + guint cell, + gint *x, + gint *y) +{ + GcalAllDayGridPrivate *priv; + + GtkWidget *widget; + + GtkBorder padding; + PangoLayout *layout; + PangoRectangle logical_rect; + + gint width_block; + + priv = gcal_all_day_grid_get_instance_private (all_day); + + widget = GTK_WIDGET (all_day); + width_block = gtk_widget_get_allocated_width (widget) / priv->columns_nr; + + if (x != NULL) + *x = cell * width_block + width_block / 2; + + if (y != NULL) + { + layout = gtk_widget_create_pango_layout (widget, "0"); + + gtk_style_context_get_padding (gtk_widget_get_style_context (widget), + gtk_widget_get_state_flags (widget), + &padding); + pango_layout_get_extents (layout, NULL, &logical_rect); + pango_extents_to_pixels (&logical_rect, NULL); + + *y = (gtk_widget_get_allocated_height (widget) - + (padding.top + logical_rect.height + padding.bottom)) / 2; + + g_object_unref (layout); + } +} diff --git a/src/gcal-all-day-grid.h b/src/gcal-all-day-grid.h index 99af7966..f152118b 100644 --- a/src/gcal-all-day-grid.h +++ b/src/gcal-all-day-grid.h @@ -64,6 +64,11 @@ GtkWidget* gcal_all_day_grid_get_by_uuid (GcalAllDayGrid *all_day, void gcal_all_day_grid_clear_marks (GcalAllDayGrid *all_day); +void gcal_all_day_grid_get_cell_position (GcalAllDayGrid *all_day, + guint cell, + gint *x, + gint *y); + G_END_DECLS #endif /* __GCAL_ALL_DAY_GRID_H__ */