gcal-all-day-grid: added get_cell_position helper
Helper to detect the position of a marked cell
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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__ */
|
||||
|
||||
Reference in New Issue
Block a user