[evolution] Bug 762075 - Recognize calendar colors encoded by gdk_rgba_to_string()



commit be9de7d7b80e2c1844069513727938e7a61f31d4
Author: Milan Crha <mcrha redhat com>
Date:   Tue Feb 16 12:29:38 2016 +0100

    Bug 762075 - Recognize calendar colors encoded by gdk_rgba_to_string()

 calendar/gui/e-cal-model.c            |   42 ++++++++++------
 calendar/gui/e-cal-model.h            |    4 ++
 calendar/gui/e-day-view-main-item.c   |   60 +++++++++++-----------
 calendar/gui/e-day-view-top-item.c    |   32 ++++-------
 calendar/gui/e-day-view.c             |   25 ++++-----
 calendar/gui/e-week-view-event-item.c |   81 +++++++++--------------------
 calendar/gui/e-week-view.c            |   26 +++++-----
 calendar/gui/print.c                  |   90 +++++++++++++++++---------------
 e-util/e-cell-text.c                  |   29 ++++-------
 9 files changed, 183 insertions(+), 206 deletions(-)
---
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index 081e900..ad1cdfd 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -3892,8 +3892,24 @@ e_cal_model_get_color_for_component (ECalModel *model,
        return color;
 }
 
+gboolean
+e_cal_model_get_rgba_for_component (ECalModel *model,
+                                   ECalModelComponent *comp_data,
+                                   GdkRGBA *rgba)
+{
+       const gchar *color;
+
+       color = e_cal_model_get_color_for_component (model, comp_data);
+       if (!color)
+               return FALSE;
+
+       return gdk_rgba_parse (rgba, color);
+}
+
 /**
- * e_cal_model_get_rgb_color_for_component
+ * e_cal_model_get_rgb_color_for_component:
+ *
+ * Deprecated: 3.20: Use e_cal_model_get_rgba_for_component() instead
  */
 gboolean
 e_cal_model_get_rgb_color_for_component (ECalModel *model,
@@ -3902,23 +3918,19 @@ e_cal_model_get_rgb_color_for_component (ECalModel *model,
                                          gdouble *green,
                                          gdouble *blue)
 {
-       GdkColor gdk_color;
-       const gchar *color;
+       GdkRGBA rgba;
 
-       color = e_cal_model_get_color_for_component (model, comp_data);
-       if (color && gdk_color_parse (color, &gdk_color)) {
+       if (!e_cal_model_get_rgba_for_component (model, comp_data, &rgba))
+               return FALSE;
 
-               if (red)
-                       *red = ((gdouble) gdk_color.red)/0xffff;
-               if (green)
-                       *green = ((gdouble) gdk_color.green)/0xffff;
-               if (blue)
-                       *blue = ((gdouble) gdk_color.blue)/0xffff;
+       if (red)
+               *red = rgba.red;
+       if (green)
+               *green = rgba.green;
+       if (blue)
+               *blue = rgba.blue;
 
-               return TRUE;
-       }
-
-       return FALSE;
+       return TRUE;
 }
 
 /**
diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h
index 9e0d51a..9282911 100644
--- a/calendar/gui/e-cal-model.h
+++ b/calendar/gui/e-cal-model.h
@@ -346,6 +346,10 @@ gchar *            e_cal_model_get_attendees_status_info
 const gchar *  e_cal_model_get_color_for_component
                                                (ECalModel *model,
                                                 ECalModelComponent *comp_data);
+gboolean       e_cal_model_get_rgba_for_component
+                                               (ECalModel *model,
+                                                ECalModelComponent *comp_data,
+                                                GdkRGBA *rgba);
 gboolean       e_cal_model_get_rgb_color_for_component
                                                (ECalModel *model,
                                                 ECalModelComponent *comp_data,
diff --git a/calendar/gui/e-day-view-main-item.c b/calendar/gui/e-day-view-main-item.c
index 3b2d437..5f6ee1f 100644
--- a/calendar/gui/e-day-view-main-item.c
+++ b/calendar/gui/e-day-view-main-item.c
@@ -102,7 +102,6 @@ day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *main_item,
        ECalendarView *cal_view;
        gint time_divisions;
        gint event_num, start_day, end_day, day, bar_y1, bar_y2, grid_x;
-       GdkColor bg_color;
 
        day_view = e_day_view_main_item_get_day_view (main_item);
 
@@ -154,10 +153,12 @@ day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *main_item,
                                gdk_cairo_set_source_color (cr, 
&day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]);
 
                                if (first) {
+                                       GdkRGBA rgba;
+
                                        first = FALSE;
 
-                                       if (gdk_color_parse (e_cal_model_get_color_for_component 
(e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)), event->comp_data), &bg_color)) {
-                                               gdk_cairo_set_source_color (cr, &bg_color);
+                                       if (e_cal_model_get_rgba_for_component (e_calendar_view_get_model 
(E_CALENDAR_VIEW (day_view)), event->comp_data, &rgba)) {
+                                               gdk_cairo_set_source_rgba (cr, &rgba);
                                        }
                                }
 
@@ -186,7 +187,7 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
        ECalendarView *cal_view;
        gint time_divisions;
        gint item_x, item_y, item_w, item_h, bar_y1, bar_y2;
-       GdkColor bg_color;
+       GdkRGBA bg_rgba;
        ECalComponent *comp;
        gint num_icons, icon_x = 0, icon_y, icon_x_inc = 0, icon_y_inc = 0;
        gint max_icon_w, max_icon_h;
@@ -194,10 +195,8 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
        gboolean draw_attach_icon;
        ECalComponentTransparency transparency;
        cairo_pattern_t *pat;
-       guint16 red, green, blue;
        gint i;
        gdouble radius, x0, y0, rect_height, rect_width, text_x_offset = 0.0;
-       gdouble cc = 65535.0;
        gdouble date_fraction;
        gboolean short_event = FALSE, resize_flag = FALSE, is_editing;
        const gchar *end_resize_suffix;
@@ -255,15 +254,16 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
         * where the event in the first column finishes. The border is drawn
         * along with the event using cairo */
 
-       red = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].red;
-       green = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].green;
-       blue = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].blue;
+       bg_rgba.red = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].red;
+       bg_rgba.green = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].green;
+       bg_rgba.blue = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].blue;
+       bg_rgba.alpha = 1.0;
 
-       if (gdk_color_parse (e_cal_model_get_color_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW 
(day_view)), event->comp_data),
-                            &bg_color)) {
-               red = bg_color.red;
-               green = bg_color.green;
-               blue = bg_color.blue;
+       if (!e_cal_model_get_rgba_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)), 
event->comp_data, &bg_rgba)) {
+               bg_rgba.red = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].red;
+               bg_rgba.green = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].green;
+               bg_rgba.blue = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].blue;
+               bg_rgba.alpha = 1.0;
        }
 
        is_editing = day_view->editing_event_day == day && day_view->editing_event_num == event_num;
@@ -447,7 +447,7 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
 
        draw_curved_rectangle (cr, x0, y0, rect_width,rect_height, radius);
        cairo_set_line_width (cr, 2.);
-       cairo_set_source_rgb (cr, red / cc, green / cc, blue / cc);
+       gdk_cairo_set_source_rgba (cr, &bg_rgba);
        cairo_stroke (cr);
        cairo_restore (cr);
 
@@ -484,19 +484,19 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
                item_x + E_DAY_VIEW_BAR_WIDTH + 1.75, item_y + 7.75,
                item_x + E_DAY_VIEW_BAR_WIDTH + 1.75, item_y + item_h - 7.75);
        if (!short_event) {
-               cairo_pattern_add_color_stop_rgba (pat, 1, red / cc, green / cc, blue / cc, 0.8);
-               cairo_pattern_add_color_stop_rgba (pat, 1 / (date_fraction + (rect_height / 18)), red / cc, 
green / cc, blue / cc, 0.8);
-               cairo_pattern_add_color_stop_rgba (pat, 1 / (date_fraction + (rect_height / 18)), red / cc, 
green / cc, blue / cc, 0.4);
-               cairo_pattern_add_color_stop_rgba (pat, 1, red / cc, green / cc, blue / cc, 0.8);
+               cairo_pattern_add_color_stop_rgba (pat, 1, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.8 * 
bg_rgba.alpha);
+               cairo_pattern_add_color_stop_rgba (pat, 1 / (date_fraction + (rect_height / 18)), 
bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.8 * bg_rgba.alpha);
+               cairo_pattern_add_color_stop_rgba (pat, 1 / (date_fraction + (rect_height / 18)), 
bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.4 * bg_rgba.alpha);
+               cairo_pattern_add_color_stop_rgba (pat, 1, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.8 * 
bg_rgba.alpha);
        } else {
-               cairo_pattern_add_color_stop_rgba (pat, 1, red / cc, green / cc, blue / cc, 0.8);
-               cairo_pattern_add_color_stop_rgba (pat, 0, red / cc, green / cc, blue / cc, 0.4);
+               cairo_pattern_add_color_stop_rgba (pat, 1, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.8 * 
bg_rgba.alpha);
+               cairo_pattern_add_color_stop_rgba (pat, 0, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.4 * 
bg_rgba.alpha);
        }
        cairo_set_source (cr, pat);
        cairo_fill_preserve (cr);
        cairo_pattern_destroy (pat);
 
-       cairo_set_source_rgba (cr, red / cc, green / cc, blue / cc, 0.2);
+       cairo_set_source_rgba (cr, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.2 * bg_rgba.alpha);
        cairo_set_line_width (cr, 0.5);
        cairo_stroke (cr);
        cairo_restore (cr);
@@ -570,7 +570,7 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
 
                        layout = gtk_widget_create_pango_layout (GTK_WIDGET (GNOME_CANVAS_ITEM 
(main_item)->canvas), end_regsizeime);
                        cairo_set_font_size (cr, 13);
-                       if ((red / cc > 0.7) || (green / cc > 0.7) || (blue / cc > 0.7))
+                       if ((bg_rgba.red > 0.7) || (bg_rgba.green > 0.7) || (bg_rgba.blue > 0.7))
                                cairo_set_source_rgb (cr, 0, 0, 0);
                        else
                                cairo_set_source_rgb (cr, 1, 1, 1);
@@ -596,9 +596,9 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
                pat = cairo_pattern_create_linear (
                        item_x + E_DAY_VIEW_BAR_WIDTH, item_y + 1,
                        item_x + E_DAY_VIEW_BAR_WIDTH, item_y + item_h - 1);
-               cairo_pattern_add_color_stop_rgba (pat, 1, red / cc, green / cc, blue / cc, 0.7);
-               cairo_pattern_add_color_stop_rgba (pat, 0.5, red / cc, green / cc, blue / cc, 0.7);
-               cairo_pattern_add_color_stop_rgba (pat, 0, red / cc, green / cc, blue / cc, 0.2);
+               cairo_pattern_add_color_stop_rgba (pat, 1, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.7 * 
bg_rgba.alpha);
+               cairo_pattern_add_color_stop_rgba (pat, 0.5, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.7 * 
bg_rgba.alpha);
+               cairo_pattern_add_color_stop_rgba (pat, 0, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.2 * 
bg_rgba.alpha);
 
                cairo_rectangle (
                        cr, item_x + 1, bar_y1,
@@ -807,7 +807,7 @@ day_view_main_item_draw_day_event (EDayViewMainItem *main_item,
                if (icon_x_inc == 0)
                        icon_x += 14;
 
-               if ((red / cc > 0.7) || (green / cc > 0.7) || (blue / cc > 0.7))
+               if ((bg_rgba.red > 0.7) || (bg_rgba.green > 0.7) || (bg_rgba.blue > 0.7))
                        cairo_set_source_rgb (cr, 0, 0, 0);
                else
                        cairo_set_source_rgb (cr, 1, 1, 1);
@@ -868,7 +868,7 @@ day_view_main_item_draw_events_in_vbars (EDayViewMainItem *main_item,
        ECalendarView *cal_view;
        gint time_divisions;
        gint grid_x, event_num, bar_y, bar_h;
-       GdkColor bg_color;
+       GdkRGBA bg_rgba;
 
        day_view = e_day_view_main_item_get_day_view (main_item);
 
@@ -908,8 +908,8 @@ day_view_main_item_draw_events_in_vbars (EDayViewMainItem *main_item,
 
                gdk_cairo_set_source_color (cr, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]);
 
-               if (gdk_color_parse (e_cal_model_get_color_for_component (e_calendar_view_get_model 
(E_CALENDAR_VIEW (day_view)), event->comp_data), &bg_color)) {
-                       gdk_cairo_set_source_color (cr, &bg_color);
+               if (e_cal_model_get_rgba_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW 
(day_view)), event->comp_data, &bg_rgba)) {
+                       gdk_cairo_set_source_rgba (cr, &bg_rgba);
                }
 
                cairo_rectangle (cr, grid_x, bar_y, E_DAY_VIEW_BAR_WIDTH - 2, bar_h);
diff --git a/calendar/gui/e-day-view-top-item.c b/calendar/gui/e-day-view-top-item.c
index e97121d..74fedd6 100644
--- a/calendar/gui/e-day-view-top-item.c
+++ b/calendar/gui/e-day-view-top-item.c
@@ -98,10 +98,9 @@ day_view_top_item_draw_triangle (EDayViewTopItem *top_item,
 
        cairo_save (cr);
        /* Fill it in. */
-       if (gdk_rgba_parse (&bg_color,
-               e_cal_model_get_color_for_component (
+       if (e_cal_model_get_rgba_for_component (
                e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)),
-               event->comp_data))) {
+               event->comp_data, &bg_color)) {
                gdk_cairo_set_source_rgba (cr, &bg_color);
        } else {
                gdk_cairo_set_source_color (
@@ -151,9 +150,8 @@ day_view_top_item_draw_long_event (EDayViewTopItem *top_item,
        gboolean draw_start_triangle, draw_end_triangle;
        GSList *categories_list, *elem;
        PangoLayout *layout;
-       GdkRGBA bg_color, rgba;
+       GdkRGBA bg_rgba, rgba;
        cairo_pattern_t *pat;
-       gdouble red, green, blue;
        gdouble x0, y0, rect_height, rect_width, radius;
 
        day_view = e_day_view_top_item_get_day_view (top_item);
@@ -184,17 +182,11 @@ day_view_top_item_draw_long_event (EDayViewTopItem *top_item,
        e_cal_component_set_icalcomponent (
                comp, icalcomponent_new_clone (event->comp_data->icalcomp));
 
-       if (gdk_rgba_parse (&bg_color,
-               e_cal_model_get_color_for_component (
-               e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)),
-               event->comp_data))) {
-               red = bg_color.red;
-               green = bg_color.green;
-               blue = bg_color.blue;
-       } else {
-               red = day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND].red / 65535.0;
-               green = day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND].green / 65535.0;
-               blue = day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND].blue / 65535.0;
+       if (!e_cal_model_get_rgba_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)), 
event->comp_data, &bg_rgba)) {
+               bg_rgba.red = day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND].red / 65535.0;
+               bg_rgba.green = day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND].green / 65535.0;
+               bg_rgba.blue = day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND].blue / 65535.0;
+               bg_rgba.alpha = 1.0;
        }
 
        /* Fill the background with white to play with transparency */
@@ -225,7 +217,7 @@ day_view_top_item_draw_long_event (EDayViewTopItem *top_item,
 
        draw_curved_rectangle (cr, x0, y0, rect_width, rect_height, radius);
 
-       cairo_set_source_rgb (cr, red, green, blue);
+       gdk_cairo_set_source_rgba (cr, &bg_rgba);
        cairo_set_line_width (cr, 1.5);
        cairo_stroke (cr);
        cairo_restore (cr);
@@ -246,13 +238,13 @@ day_view_top_item_draw_long_event (EDayViewTopItem *top_item,
        pat = cairo_pattern_create_linear (
                item_x - x + 5.5, item_y + 2.5 - y,
                item_x - x + 5, item_y - y + item_h + 7.5);
-       cairo_pattern_add_color_stop_rgba (pat, 1, red, green, blue, 0.8);
-       cairo_pattern_add_color_stop_rgba (pat, 0, red, green, blue, 0.4);
+       cairo_pattern_add_color_stop_rgba (pat, 1, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.8 * 
bg_rgba.alpha);
+       cairo_pattern_add_color_stop_rgba (pat, 0, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.4 * 
bg_rgba.alpha);
        cairo_set_source (cr, pat);
        cairo_fill_preserve (cr);
        cairo_pattern_destroy (pat);
 
-       cairo_set_source_rgba (cr, red, green, blue, 0);
+       gdk_cairo_set_source_rgba (cr, &bg_rgba);
        cairo_set_line_width (cr, 0.5);
        cairo_stroke (cr);
        cairo_restore (cr);
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index dcf7d2a..0d36119 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -665,21 +665,20 @@ e_day_view_get_text_color (EDayView *day_view,
                            EDayViewEvent *event)
 {
        GdkColor color;
-       guint16 red, green, blue;
-       gdouble cc = 65535.0;
+       GdkRGBA rgba;
 
-       red = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].red;
-       green = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].green;
-       blue = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].blue;
+       if (is_comp_data_valid (event) &&
+           e_cal_model_get_rgba_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)), 
event->comp_data, &rgba)) {
+       } else {
+               gdouble cc = 65535.0;
 
-       if (is_comp_data_valid (event) && gdk_color_parse (e_cal_model_get_color_for_component 
(e_calendar_view_get_model (E_CALENDAR_VIEW (day_view)), event->comp_data),
-            &color)) {
-               red = color.red;
-               green = color.green;
-               blue = color.blue;
+               rgba.red = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].red / cc;
+               rgba.green = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].green / cc;
+               rgba.blue = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].blue / cc;
+               rgba.alpha = 1.0;
        }
 
-       if ((red / cc > 0.7) || (green / cc > 0.7) || (blue / cc > 0.7)) {
+       if ((rgba.red > 0.7) || (rgba.green > 0.7) || (rgba.blue > 0.7)) {
                color.red = 0.0;
                color.green = 0.0;
                color.blue = 0.0;
diff --git a/calendar/gui/e-week-view-event-item.c b/calendar/gui/e-week-view-event-item.c
index 618d150..dadd940 100644
--- a/calendar/gui/e-week-view-event-item.c
+++ b/calendar/gui/e-week-view-event-item.c
@@ -292,7 +292,7 @@ week_view_event_item_button_release (EWeekViewEventItem *event_item,
 
 static void
 week_view_draw_time (EWeekView *week_view,
-                    GdkColor bg_color,
+                    GdkRGBA bg_rgba,
                      cairo_t *cr,
                      gint time_x,
                      gint time_y,
@@ -308,11 +308,10 @@ week_view_draw_time (EWeekView *week_view,
        PangoFontDescription *small_font_desc;
        PangoContext *pango_context;
        GdkColor color;
-       gdouble cc = 65535.0;
 
        color.pixel = 0;
 
-       if ((bg_color.red / cc > 0.7) || (bg_color.green / cc > 0.7) || (bg_color.blue / cc > 0.7)) {
+       if ((bg_rgba.red > 0.7) || (bg_rgba.green > 0.7) || (bg_rgba.blue > 0.7)) {
                color.red = 0.0;
                color.green = 0.0;
                color.blue = 0.0;
@@ -549,20 +548,18 @@ week_view_event_item_draw_icons (EWeekViewEventItem *event_item,
 static void
 week_view_event_item_draw_triangle (EWeekViewEventItem *event_item,
                                     cairo_t *cr,
-                                    GdkColor bg_color,
+                                    GdkRGBA bg_rgba,
                                     gint x,
                                     gint y,
                                     gint w,
                                     gint h,
                                     cairo_region_t *draw_region)
 {
-       ECalModel *model;
        EWeekView *week_view;
        EWeekViewEvent *event;
        GnomeCanvas *canvas;
        GtkWidget *parent;
        GdkPoint points[3];
-       const gchar *color_spec;
        gint c1, c2;
 
        if (!can_draw_in_region (draw_region, x, y, w, h))
@@ -588,22 +585,7 @@ week_view_event_item_draw_triangle (EWeekViewEventItem *event_item,
        points[2].x = x;
        points[2].y = y + h - 1;
 
-       model = e_calendar_view_get_model (E_CALENDAR_VIEW (week_view));
-
-       color_spec =
-               e_cal_model_get_color_for_component (model, event->comp_data);
-
-       if (gdk_color_parse (color_spec, &bg_color)) {
-               gdk_cairo_set_source_color (cr, &bg_color);
-       } else {
-               EWeekViewColors wvc;
-               GdkColor *color;
-
-               wvc = E_WEEK_VIEW_COLOR_EVENT_BACKGROUND;
-               color = &week_view->colors[wvc];
-
-               gdk_cairo_set_source_color (cr, color);
-       }
+       gdk_cairo_set_source_rgba (cr, &bg_rgba);
 
        cairo_save (cr);
        cairo_set_line_width (cr, 0.7);
@@ -744,14 +726,11 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
        gint start_hour, start_minute, end_hour, end_minute;
        gboolean draw_start, draw_end;
        gboolean draw_start_triangle = FALSE, draw_end_triangle = FALSE;
-       GdkColor bg_color;
+       GdkRGBA bg_rgba;
        cairo_pattern_t *pat;
-       guint16 red, green, blue;
        gdouble radius, cx0, cy0, rect_height, rect_width;
-       gdouble cc = 65535.0;
        cairo_region_t *draw_region;
        GdkRectangle rect;
-       const gchar *color_spec;
 
        event_item = E_WEEK_VIEW_EVENT_ITEM (canvas_item);
        parent = gtk_widget_get_parent (GTK_WIDGET (canvas_item->canvas));
@@ -828,18 +807,15 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
 
        model = e_calendar_view_get_model (E_CALENDAR_VIEW (week_view));
 
-       color_spec =
-               e_cal_model_get_color_for_component (model, event->comp_data);
+       if (!e_cal_model_get_rgba_for_component (model, event->comp_data, &bg_rgba)) {
+               gdouble cc = 65535.0;
 
-       bg_color = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND];
-       if (!gdk_color_parse (color_spec, &bg_color)) {
-               bg_color = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND];
+               bg_rgba.red = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].red / cc;
+               bg_rgba.green = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].green / cc;
+               bg_rgba.blue = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].blue / cc;
+               bg_rgba.alpha = 1.0;
        }
 
-       red = bg_color.red;
-       green = bg_color.green;
-       blue = bg_color.blue;
-
        if (one_day_event) {
                time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD + 1;
                rect_x = x1 + E_WEEK_VIEW_EVENT_L_PAD;
@@ -857,7 +833,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
                        cairo_save (cr);
                        draw_curved_rectangle (cr, cx0, cy0, rect_width, rect_height, radius);
                        cairo_set_line_width (cr, 2.0);
-                       cairo_set_source_rgb (cr, red / cc, green / cc, blue / cc);
+                       gdk_cairo_set_source_rgba (cr, &bg_rgba);
                        cairo_stroke (cr);
                        cairo_restore (cr);
                }
@@ -878,14 +854,12 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
 
                        pat = cairo_pattern_create_linear (
                                rect_x + 2, y1 + 1, rect_x + 2, y2 - 7.25);
-                       cairo_pattern_add_color_stop_rgba (
-                               pat, 1, red / cc, green / cc, blue / cc, 0.8);
-                       cairo_pattern_add_color_stop_rgba (
-                               pat, 0, red / cc, green / cc, blue / cc, 0.4);
+                       cairo_pattern_add_color_stop_rgba (pat, 1, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 
0.8 * bg_rgba.alpha);
+                       cairo_pattern_add_color_stop_rgba (pat, 0, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 
0.4 * bg_rgba.alpha);
                        cairo_set_source (cr, pat);
                        cairo_fill_preserve (cr);
                        cairo_pattern_destroy (pat);
-                       cairo_set_source_rgba (cr, red / cc, green / cc, blue / cc, 0.2);
+                       cairo_set_source_rgba (cr, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.2 * 
bg_rgba.alpha);
                        cairo_set_line_width (cr, 0.5);
                        cairo_stroke (cr);
                        cairo_restore (cr);
@@ -918,7 +892,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
 
                if (draw_start) {
                        week_view_draw_time (
-                               week_view, bg_color, cr, time_x,
+                               week_view, bg_rgba, cr, time_x,
                                time_y, start_hour, start_minute);
                        time_x += time_width;
                }
@@ -926,7 +900,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
                if (draw_end) {
                        time_x += E_WEEK_VIEW_EVENT_TIME_SPACING;
                        week_view_draw_time (
-                               week_view, bg_color, cr, time_x,
+                               week_view, bg_rgba, cr, time_x,
                                time_y, end_hour, end_minute);
                        time_x += time_width;
                }
@@ -974,7 +948,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
                        cairo_save (cr);
                        draw_curved_rectangle (cr, cx0, cy0, rect_width, rect_height, radius);
                        cairo_set_line_width (cr, 2.0);
-                       cairo_set_source_rgb (cr, red / cc, green / cc, blue / cc);
+                       gdk_cairo_set_source_rgba (cr, &bg_rgba);
                        cairo_stroke (cr);
                        cairo_restore (cr);
                }
@@ -993,16 +967,13 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
                        draw_curved_rectangle (
                                cr, cx0, cy0, rect_width, rect_height, radius);
 
-                       pat = cairo_pattern_create_linear (
-                               rect_x + 2, y1 + 1, rect_x + 2, y2 - 7.25);
-                       cairo_pattern_add_color_stop_rgba (
-                               pat, 1, red / cc, green / cc, blue / cc, 0.8);
-                       cairo_pattern_add_color_stop_rgba (
-                               pat, 0, red / cc, green / cc, blue / cc, 0.4);
+                       pat = cairo_pattern_create_linear (rect_x + 2, y1 + 1, rect_x + 2, y2 - 7.25);
+                       cairo_pattern_add_color_stop_rgba (pat, 1, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 
0.8 * bg_rgba.alpha);
+                       cairo_pattern_add_color_stop_rgba (pat, 0, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 
0.4 * bg_rgba.alpha);
                        cairo_set_source (cr, pat);
                        cairo_fill_preserve (cr);
                        cairo_pattern_destroy (pat);
-                       cairo_set_source_rgba (cr, red / cc, green / cc, blue / cc, 0.2);
+                       cairo_set_source_rgba (cr, bg_rgba.red, bg_rgba.green, bg_rgba.blue, 0.2 * 
bg_rgba.alpha);
                        cairo_set_line_width (cr, 0.5);
                        cairo_stroke (cr);
                        cairo_restore (cr);
@@ -1010,7 +981,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
 
                if (draw_start_triangle) {
                        week_view_event_item_draw_triangle (
-                               event_item, cr, bg_color,
+                               event_item, cr, bg_rgba,
                                x1 + E_WEEK_VIEW_EVENT_L_PAD + 2,
                                y1, -3, y2 - y1 + 1, draw_region);
                } else if (can_draw_in_region (draw_region, rect_x, y1, 1, y2 - y1)) {
@@ -1031,7 +1002,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
 
                if (draw_end_triangle) {
                        week_view_event_item_draw_triangle (
-                               event_item, cr, bg_color,
+                               event_item, cr, bg_rgba,
                                x2 - E_WEEK_VIEW_EVENT_R_PAD - 2,
                                y1, 3, y2 - y1 + 1, draw_region);
                } else if (can_draw_in_region (draw_region, rect_x2, y2, 1, 1)) {
@@ -1081,7 +1052,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
                        cairo_clip (cr);
 
                        week_view_draw_time (
-                               week_view, bg_color, cr, time_x,
+                               week_view, bg_rgba, cr, time_x,
                                time_y, start_hour, start_minute);
 
                        cairo_restore (cr);
@@ -1109,7 +1080,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item,
                         * the minimum calculated above. */
                        if (time_x >= min_end_time_x) {
                                week_view_draw_time (
-                                       week_view, bg_color, cr, time_x,
+                                       week_view, bg_rgba, cr, time_x,
                                        time_y, end_hour, end_minute);
                                max_icon_x -= time_width
                                        + E_WEEK_VIEW_EVENT_TIME_X_PAD;
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index 4fa8985..bc93c59 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -936,23 +936,23 @@ e_week_view_get_text_color (EWeekView *week_view,
                             EWeekViewEvent *event)
 {
        GdkColor color;
-       guint16 red, green, blue;
-       gdouble cc = 65535.0;
+       GdkRGBA bg_rgba;
 
-       red = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].red;
-       green = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].green;
-       blue = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].blue;
+       if (is_comp_data_valid (event) &&
+           e_cal_model_get_rgba_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)), 
event->comp_data, &bg_rgba)) {
+       } else {
+               gdouble cc = 65535.0;
+
+               bg_rgba.red = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].red / cc;
+               bg_rgba.green = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].green / cc;
+               bg_rgba.blue = week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].blue / cc;
+               bg_rgba.alpha = 1.0;
 
-       if (is_comp_data_valid (event) && gdk_color_parse (e_cal_model_get_color_for_component 
(e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)), event->comp_data),
-            &color)) {
-               red = color.red;
-               green = color.green;
-               blue = color.blue;
        }
 
        color.pixel = 0;
 
-       if ((red / cc > 0.7) || (green / cc > 0.7) || (blue / cc > 0.7)) {
+       if ((bg_rgba.red > 0.7) || (bg_rgba.green > 0.7) || (bg_rgba.blue > 0.7)) {
                color.red = 0.0;
                color.green = 0.0;
                color.blue = 0.0;
diff --git a/calendar/gui/print.c b/calendar/gui/print.c
index 7cc5f63..fa4034c 100644
--- a/calendar/gui/print.c
+++ b/calendar/gui/print.c
@@ -343,9 +343,7 @@ print_border_with_triangles (GtkPrintContext *pc,
                              gdouble y1,
                              gdouble y2,
                              gdouble line_width,
-                             gdouble red,
-                             gdouble green,
-                             gdouble blue,
+                             GdkRGBA bg_rgba,
                              gdouble left_triangle_width,
                              gdouble right_triangle_width)
 {
@@ -354,7 +352,7 @@ print_border_with_triangles (GtkPrintContext *pc,
        cairo_save (cr);
 
        /* Fill in the interior of the rectangle, if desired. */
-       if (red >= -EPSILON && green >= -EPSILON && blue >= -EPSILON) {
+       if (bg_rgba.red >= -EPSILON && bg_rgba.green >= -EPSILON && bg_rgba.blue >= -EPSILON) {
 
                cairo_move_to (cr, x1, y1);
 
@@ -371,7 +369,7 @@ print_border_with_triangles (GtkPrintContext *pc,
 
                cairo_line_to (cr, x2, y1);
                cairo_close_path (cr);
-               cairo_set_source_rgb (cr, red, green, blue);
+               gdk_cairo_set_source_rgba (cr, &bg_rgba);
                cairo_fill (cr);
                cairo_restore (cr);
                cairo_save (cr);
@@ -416,13 +414,11 @@ print_border_rgb (GtkPrintContext *pc,
                   gdouble y1,
                   gdouble y2,
                   gdouble line_width,
-                  gdouble red,
-                  gdouble green,
-                  gdouble blue)
+                  GdkRGBA bg_rgba)
 {
        print_border_with_triangles (
                pc, x1, x2, y1, y2, line_width,
-               red, green, blue, -1.0, -1.0);
+               bg_rgba, -1.0, -1.0);
 }
 
 static void
@@ -434,9 +430,14 @@ print_border (GtkPrintContext *pc,
               gdouble line_width,
               gdouble fillcolor)
 {
-       print_border_rgb (
-               pc, x1, x2, y1, y2, line_width,
-               fillcolor, fillcolor, fillcolor);
+       GdkRGBA bg_rgba;
+
+       bg_rgba.red = fillcolor;
+       bg_rgba.green = fillcolor;
+       bg_rgba.blue = fillcolor;
+       bg_rgba.alpha = 1.0;
+
+       print_border_rgb (pc, x1, x2, y1, y2, line_width, bg_rgba);
 }
 
 static void
@@ -445,16 +446,14 @@ print_rectangle (GtkPrintContext *context,
                  gdouble y,
                  gdouble width,
                  gdouble height,
-                 gdouble red,
-                 gdouble green,
-                 gdouble blue)
+                 GdkRGBA bg_rgba)
 {
        cairo_t *cr = gtk_print_context_get_cairo_context (context);
 
        cairo_save (cr);
 
        cairo_rectangle (cr, x, y, width, height);
-       cairo_set_source_rgb (cr, red, green, blue);
+       gdk_cairo_set_source_rgba (cr, &bg_rgba);
        cairo_fill (cr);
 
        cairo_restore (cr);
@@ -1375,7 +1374,7 @@ print_day_long_event (GtkPrintContext *context,
        gchar *text;
        gchar buffer[32];
        struct tm date_tm;
-       gdouble red, green, blue;
+       GdkRGBA bg_rgba;
 
        if (!is_comp_data_valid (event))
                return;
@@ -1395,11 +1394,16 @@ print_day_long_event (GtkPrintContext *context,
        x2 = right - 10;
        y1 = top + event->start_row_or_col * row_height + 1;
        y2 = y1 + row_height - 1;
-       red = green = blue = 0.95;
-       e_cal_model_get_rgb_color_for_component (
-               model, event->comp_data, &red, &green, &blue);
+
+       if (!e_cal_model_get_rgba_for_component (model, event->comp_data, &bg_rgba)) {
+               bg_rgba.red = 0.95;
+               bg_rgba.green = 0.95;
+               bg_rgba.blue = 0.95;
+               bg_rgba.alpha = 1.0;
+       }
+
        print_border_with_triangles (
-               context, x1, x2, y1, y2, 0.5, red, green, blue,
+               context, x1, x2, y1, y2, 0.5, bg_rgba,
                left_triangle_width,
                right_triangle_width);
 
@@ -1465,7 +1469,7 @@ print_day_event (GtkPrintContext *context,
        gchar *text, start_buffer[32], end_buffer[32];
        gboolean display_times = FALSE;
        struct tm date_tm;
-       gdouble red, green, blue;
+       GdkRGBA bg_rgba;
 
        if (!is_comp_data_valid (event))
                return;
@@ -1500,10 +1504,14 @@ print_day_event (GtkPrintContext *context,
                x1, y1, x2, y2, row_height, start_row, top, pdi->rows);
 #endif
 
-       red = green = blue = 0.95;
-       e_cal_model_get_rgb_color_for_component (
-               model, event->comp_data, &red, &green, &blue);
-       print_border_rgb (context, x1, x2, y1, y2, 1.0, red, green, blue);
+       if (!e_cal_model_get_rgba_for_component (model, event->comp_data, &bg_rgba)) {
+               bg_rgba.red = 0.95;
+               bg_rgba.green = 0.95;
+               bg_rgba.blue = 0.95;
+               bg_rgba.alpha = 1.0;
+       }
+
+       print_border_rgb (context, x1, x2, y1, y2, 1.0, bg_rgba);
 
        text = get_summary_with_location (event->comp_data->icalcomp);
 
@@ -1763,9 +1771,7 @@ print_week_long_event (GtkPrintContext *context,
                        EWeekViewEvent *event,
                        EWeekViewEventSpan *span,
                        gchar *text,
-                       gdouble red,
-                       gdouble green,
-                       gdouble blue)
+                       GdkRGBA bg_rgba)
 {
        gdouble left_triangle_width = -1.0, right_triangle_width = -1.0;
        struct tm date_tm;
@@ -1782,7 +1788,7 @@ print_week_long_event (GtkPrintContext *context,
                right_triangle_width = 4;
 
        print_border_with_triangles (
-               context, x1 + 6, x2 - 6, y1, y1 + row_height, 0.0, red, green, blue,
+               context, x1 + 6, x2 - 6, y1, y1 + row_height, 0.0, bg_rgba,
                left_triangle_width, right_triangle_width);
 
        x1 += 6;
@@ -1844,9 +1850,7 @@ print_week_day_event (GtkPrintContext *context,
                       EWeekViewEvent *event,
                       EWeekViewEventSpan *span,
                       gchar *text,
-                      gdouble red,
-                      gdouble green,
-                      gdouble blue)
+                      GdkRGBA bg_rgba)
 {
        struct tm date_tm;
        gchar buffer[32];
@@ -1861,7 +1865,7 @@ print_week_day_event (GtkPrintContext *context,
 
        e_time_format_time (&date_tm, psi->use_24_hour_format, FALSE,
                            buffer, sizeof (buffer));
-       print_rectangle (context, x1 + 1, y1, x2 - x1 - 2, row_height, red, green, blue);
+       print_rectangle (context, x1 + 1, y1, x2 - x1 - 2, row_height, bg_rgba);
        x1 += print_text_line (
                context, font, buffer, PANGO_ALIGN_LEFT,
                x1 + 2, x2 - 3, y1, y1 + row_height, TRUE) + 4;
@@ -1900,7 +1904,7 @@ print_week_event (GtkPrintContext *context,
        gchar *text;
        gint num_days, start_x, start_y, start_h, end_x, end_y, end_h;
        gdouble x1, x2, y1;
-       gdouble red, green, blue;
+       GdkRGBA bg_rgba;
        GdkPixbuf *pixbuf = NULL;
 
        if (!is_comp_data_valid (event))
@@ -1949,22 +1953,24 @@ print_week_event (GtkPrintContext *context,
                                 + psi->header_row_height
                                 + span->row * (psi->row_height + 2);
 
-                       red = .9;
-                       green = .9;
-                       blue = .9;
-                       e_cal_model_get_rgb_color_for_component (
-                               model, event->comp_data, &red, &green, &blue);
+                       if (!e_cal_model_get_rgba_for_component (model, event->comp_data, &bg_rgba)) {
+                               bg_rgba.red = 0.9;
+                               bg_rgba.green = 0.9;
+                               bg_rgba.blue = 0.9;
+                               bg_rgba.alpha = 1.0;
+                       }
+
                        if (print_is_one_day_week_event (event, span,
                                                         psi->day_starts)) {
                                print_week_day_event (
                                        context, font, psi,
                                        x1, x2, y1, psi->row_height,
-                                       event, span, text, red, green, blue);
+                                       event, span, text, bg_rgba);
                        } else {
                                print_week_long_event (
                                        context, font, psi,
                                        x1, x2, y1, psi->row_height,
-                                       event, span, text, red, green, blue);
+                                       event, span, text, bg_rgba);
                        }
                } else {
                        cairo_t *cr = gtk_print_context_get_cairo_context (context);
diff --git a/e-util/e-cell-text.c b/e-util/e-cell-text.c
index 2e49858..3e39fad 100644
--- a/e-util/e-cell-text.c
+++ b/e-util/e-cell-text.c
@@ -773,7 +773,7 @@ ect_draw (ECellView *ecell_view,
                }
 
                if (!color_overwritten && ect->bg_color_column != -1) {
-                       GdkColor bg_color;
+                       GdkRGBA bg_rgba;
                        gchar *color_spec;
 
                        /* if the background color is overwritten and the text color is not, then
@@ -783,27 +783,20 @@ ect_draw (ECellView *ecell_view,
                                ecell_view->e_table_model,
                                ect->bg_color_column, row);
 
-                       if (color_spec && gdk_color_parse (color_spec, &bg_color)) {
-                               guint16 red, green, blue;
-                               gdouble cc = 65535.0;
-                               GdkRGBA rgba;
+                       if (color_spec && gdk_rgba_parse (&bg_rgba, color_spec)) {
+                               bg_rgba.alpha = 1.0;
 
-                               red = bg_color.red;
-                               green = bg_color.green;
-                               blue = bg_color.blue;
-                               rgba.alpha = 1.0;
-
-                               if ((red / cc > 0.7) || (green / cc > 0.7) || (blue / cc > 0.7)) {
-                                       rgba.red = 0.0;
-                                       rgba.green = 0.0;
-                                       rgba.blue = 0.0;
+                               if ((bg_rgba.red > 0.7) || (bg_rgba.green > 0.7) || (bg_rgba.blue > 0.7)) {
+                                       bg_rgba.red = 0.0;
+                                       bg_rgba.green = 0.0;
+                                       bg_rgba.blue = 0.0;
                                } else {
-                                       rgba.red = 1.0;
-                                       rgba.green = 1.0;
-                                       rgba.blue = 1.0;
+                                       bg_rgba.red = 1.0;
+                                       bg_rgba.green = 1.0;
+                                       bg_rgba.blue = 1.0;
                                }
 
-                               gdk_cairo_set_source_rgba (cr, &rgba);
+                               gdk_cairo_set_source_rgba (cr, &bg_rgba);
                        }
 
                        if (color_spec)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]