event-widget: render locked state of the calendar

This commit is contained in:
Erick Pérez Castellanos
2014-12-04 17:10:50 -05:00
parent b3cab47334
commit 4c98b16c76
2 changed files with 60 additions and 2 deletions
+57 -2
View File
@@ -33,6 +33,9 @@ typedef struct
gboolean all_day;
gboolean has_reminders;
/* internal data */
gboolean read_only;
/* weak ESource reference */
ESource *source;
/* ECalComponent data */
@@ -559,6 +562,7 @@ gcal_event_widget_draw (GtkWidget *widget,
gint x,y;
gint width, height;
gint left_gap;
gint right_gap;
gint icon_size = 0;
PangoLayout *layout;
@@ -598,7 +602,21 @@ gcal_event_widget_draw (GtkWidget *widget,
pango_extents_to_pixels (&logical_rect, NULL);
icon_size = logical_rect.height;
left_gap = icon_size + padding.left;
pango_layout_set_width (layout, (width - (padding.left + padding.right + left_gap) ) * PANGO_SCALE);
pango_layout_set_width (layout, (width - (left_gap + padding.left + padding.right) ) * PANGO_SCALE);
}
right_gap = 0;
if (priv->read_only)
{
if (icon_size == 0)
{
pango_layout_get_extents (layout, NULL, &logical_rect);
pango_extents_to_pixels (&logical_rect, NULL);
icon_size = logical_rect.height;
}
right_gap = icon_size + padding.right;
pango_layout_set_width (layout, (width - (left_gap + padding.left + padding.right + right_gap) ) * PANGO_SCALE);
}
gtk_render_layout (context, cr,
@@ -606,7 +624,7 @@ gcal_event_widget_draw (GtkWidget *widget,
y + padding.top,
layout);
/* render icon */
/* render reminder icon */
if (priv->has_reminders)
{
GtkIconTheme *icon_theme;
@@ -632,6 +650,32 @@ gcal_event_widget_draw (GtkWidget *widget,
cairo_paint (cr);
}
/* render locked icon */
if (priv->read_only)
{
GtkIconTheme *icon_theme;
GtkIconInfo *icon_info;
GdkPixbuf *pixbuf;
gboolean was_symbolic;
icon_theme = gtk_icon_theme_get_default ();
icon_info = gtk_icon_theme_lookup_icon (icon_theme,
"changes-prevent-symbolic",
icon_size,
0);
pixbuf = gtk_icon_info_load_symbolic_for_context (icon_info,
context,
&was_symbolic,
NULL);
gdk_cairo_set_source_pixbuf (cr,
pixbuf,
width - right_gap,
y + padding.top);
g_object_unref (pixbuf);
cairo_paint (cr);
}
pango_font_description_free (font_desc);
g_object_unref (layout);
@@ -793,6 +837,17 @@ gcal_event_widget_peek_uuid (GcalEventWidget *event)
return priv->uuid;
}
void
gcal_new_event_widget_set_read_only (GcalEventWidget *event,
gboolean read_only)
{
GcalEventWidgetPrivate *priv;
priv = gcal_event_widget_get_instance_private (event);
priv->read_only = read_only;
}
/**
* gcal_event_widget_set_date:
* @event: a #GcalEventWidget
+3
View File
@@ -63,6 +63,9 @@ GtkWidget* gcal_event_widget_new_with_summary_and_color (const gchar *
const gchar* gcal_event_widget_peek_uuid (GcalEventWidget *event);
void gcal_new_event_widget_set_read_only (GcalEventWidget *event,
gboolean read_only);
void gcal_event_widget_set_date (GcalEventWidget *event,
const icaltimetype *date);