From 7be1dd95faeebdb20ea7108a6269b8a01def320b Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 1 Mar 2016 00:16:49 -0300 Subject: [PATCH] event-widget: draw icons at the end of the widget Instead of breaking the vertical alignment of events by drawing icons both at the start and end of the widget, only draw them by the end. This commit also improves drawing for RTL locales. --- src/gcal-event-widget.c | 58 ++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/src/gcal-event-widget.c b/src/gcal-event-widget.c index e1c55182..e90f3316 100644 --- a/src/gcal-event-widget.c +++ b/src/gcal-event-widget.c @@ -31,6 +31,7 @@ struct _GcalEventWidget GDateTime *dt_end; /* internal data */ + gboolean clock_format_24h : 1; gboolean read_only : 1; gchar *css_class; @@ -175,8 +176,18 @@ gcal_event_widget_set_event_internal (GcalEventWidget *self, static void gcal_event_widget_init(GcalEventWidget *self) { + GSettings *settings; + gchar *clock_format; + + settings = g_settings_new ("org.gnome.desktop.interface"); + clock_format = g_settings_get_string (settings, "clock-format"); + self->clock_format_24h = g_strcmp0 (clock_format, "24h") == 0; + gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE); + + g_clear_object (&settings); + g_free (clock_format); } static void @@ -418,8 +429,9 @@ gcal_event_widget_draw (GtkWidget *widget, GtkStateFlags state; GtkBorder padding; - gint width, height, layout_height; - gint left_gap, right_gap, icon_size = 0; + gint width, height, layout_height, x; + gint end_gap, icon_size = 0; + gboolean is_ltr; PangoLayout *layout; PangoFontDescription *font_desc; @@ -428,6 +440,7 @@ gcal_event_widget_draw (GtkWidget *widget, self = GCAL_EVENT_WIDGET (widget); context = gtk_widget_get_style_context (widget); state = gtk_style_context_get_state (context); + is_ltr = gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL; gtk_style_context_get_padding (context, state, &padding); @@ -449,10 +462,17 @@ gcal_event_widget_draw (GtkWidget *widget, { GDateTime *local_start_time; gchar *start_time; - local_start_time = g_date_time_to_local (gcal_event_get_date_start (self->event)); - start_time = g_date_time_format (local_start_time, "%R%p"); - display_text = g_strdup_printf ("(%s) %s", start_time, gcal_event_get_summary (self->event)); + + if (self->clock_format_24h) + start_time = g_date_time_format (local_start_time, "%R"); + else + start_time = g_date_time_format (local_start_time, "%I:%M %P"); + + if (is_ltr) + display_text = g_strdup_printf ("(%s) %s", start_time, gcal_event_get_summary (self->event)); + else + display_text = g_strdup_printf ("%s (%s)", gcal_event_get_summary (self->event), start_time); g_clear_pointer (&local_start_time, g_date_time_unref); g_clear_pointer (&start_time, g_free); @@ -470,21 +490,20 @@ gcal_event_widget_draw (GtkWidget *widget, pango_layout_get_pixel_size (layout, NULL, &layout_height); icon_size = 4 * (layout_height / 4); - left_gap = 0; + end_gap = 0; + if (gcal_event_has_alarms (self->event)) - { - left_gap = icon_size + padding.left; - pango_layout_set_width (layout, (width - (left_gap + padding.left + padding.right) ) * PANGO_SCALE); - } + end_gap += icon_size + (is_ltr ? padding.left : padding.right); - right_gap = 0; if (self->read_only) - { - right_gap = icon_size + padding.right; - pango_layout_set_width (layout, (width - (left_gap + padding.left + padding.right + right_gap) ) * PANGO_SCALE); - } + end_gap += icon_size + (is_ltr ? padding.left : padding.right); - gtk_render_layout (context, cr, padding.left + left_gap, padding.top, layout); + x = is_ltr ? padding.left : padding.left + end_gap; + + pango_layout_set_width (layout, (width - (padding.left + padding.right + end_gap)) * PANGO_SCALE); + gtk_render_layout (context, cr, x, padding.top, layout); + + x += is_ltr ? (width - end_gap - padding.left - padding.right) : (- padding.right - padding.left - icon_size); /* render reminder icon */ if (gcal_event_has_alarms (self->event)) @@ -504,7 +523,10 @@ gcal_event_widget_draw (GtkWidget *widget, &was_symbolic, NULL); - gdk_cairo_set_source_pixbuf (cr, pixbuf, padding.left, padding.top); + gdk_cairo_set_source_pixbuf (cr, pixbuf, x + padding.left, padding.top); + + x += is_ltr ? (padding.left + icon_size) : (- padding.right - icon_size); + g_object_unref (pixbuf); cairo_paint (cr); } @@ -527,7 +549,7 @@ gcal_event_widget_draw (GtkWidget *widget, &was_symbolic, NULL); - gdk_cairo_set_source_pixbuf (cr, pixbuf, width - right_gap, padding.top); + gdk_cairo_set_source_pixbuf (cr, pixbuf, x + padding.left, padding.top); g_object_unref (pixbuf); cairo_paint (cr); }