From 5d4006c44c16fae3d9b8a9e2349f4b26e5d74411 Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Thu, 4 May 2006 15:14:24 +0000 Subject: Committing updated patch for cairo. svn path=/trunk/; revision=31954 --- calendar/gui/e-week-view-event-item.c | 621 +++++++++++++++++++++++++++++++++- 1 file changed, 604 insertions(+), 17 deletions(-) (limited to 'calendar/gui/e-week-view-event-item.c') diff --git a/calendar/gui/e-week-view-event-item.c b/calendar/gui/e-week-view-event-item.c index 3250c72595..4c7813b30e 100644 --- a/calendar/gui/e-week-view-event-item.c +++ b/calendar/gui/e-week-view-event-item.c @@ -207,7 +207,582 @@ e_week_view_event_item_update (GnomeCanvasItem *item, /* * DRAWING ROUTINES - functions to paint the canvas item. */ +#ifndef ENABLE_CAIRO +static void +e_week_view_event_item_draw (GnomeCanvasItem *canvas_item, + GdkDrawable *drawable, + int x, + int y, + int width, + int height) +{ + EWeekViewEventItem *wveitem; + EWeekView *week_view; + EWeekViewEvent *event; + EWeekViewEventSpan *span; + GdkGC *gc; + gint x1, y1, x2, y2, time_x, time_y; + gint icon_x, icon_y, time_width, min_end_time_x, max_icon_x; + gint rect_x, rect_w, rect_x2; + gboolean one_day_event, editing_span = FALSE; + gint start_hour, start_minute, end_hour, end_minute; + gboolean draw_start, draw_end; + gboolean draw_start_triangle = FALSE, draw_end_triangle = FALSE; + GdkRectangle clip_rect; + GdkColor bg_color; + +#if 0 + g_print ("In e_week_view_event_item_draw %i,%i %ix%i\n", + x, y, width, height); +#endif + + wveitem = E_WEEK_VIEW_EVENT_ITEM (canvas_item); + week_view = E_WEEK_VIEW (GTK_WIDGET (canvas_item->canvas)->parent); + g_return_if_fail (E_IS_WEEK_VIEW (week_view)); + + if (wveitem->event_num == -1 || wveitem->span_num == -1) + return; + + g_return_if_fail(wveitem->event_num < week_view->events->len); + + event = &g_array_index (week_view->events, EWeekViewEvent, + wveitem->event_num); + + g_return_if_fail(event->spans_index + wveitem->span_num < week_view->spans->len); + + span = &g_array_index (week_view->spans, EWeekViewEventSpan, + event->spans_index + wveitem->span_num); + + gc = week_view->main_gc; + + x1 = canvas_item->x1 - x; + y1 = canvas_item->y1 - y; + x2 = canvas_item->x2 - x; + y2 = canvas_item->y2 - y; + + if (x1 == x2 || y1 == y2) + return; + + icon_x = 0; + icon_y = y1 + E_WEEK_VIEW_EVENT_BORDER_HEIGHT + E_WEEK_VIEW_ICON_Y_PAD; + + /* Get the start & end times in 24-hour format. */ + start_hour = event->start_minute / 60; + start_minute = event->start_minute % 60; + + /* Modulo 24 because a midnight end time will be '24' */ + end_hour = (event->end_minute / 60) % 24; + end_minute = event->end_minute % 60; + + time_y = y1 + E_WEEK_VIEW_EVENT_BORDER_HEIGHT + + E_WEEK_VIEW_EVENT_TEXT_Y_PAD; + + time_width = e_week_view_get_time_string_width (week_view); + + one_day_event = e_week_view_is_one_day_event (week_view, + wveitem->event_num); + if (one_day_event) { + time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD + 1; + rect_x = x1 + E_WEEK_VIEW_EVENT_L_PAD; + rect_w = x2 - x1 - E_WEEK_VIEW_EVENT_L_PAD - E_WEEK_VIEW_EVENT_R_PAD + 1; + + if (gdk_color_parse (e_cal_model_get_color_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)), + event->comp_data), + &bg_color)) { + GdkColormap *colormap; + + colormap = gtk_widget_get_colormap (GTK_WIDGET (week_view)); + if (gdk_colormap_alloc_color (colormap, &bg_color, TRUE, TRUE)) + gdk_gc_set_foreground (gc, &bg_color); + else + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); + } else + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); + gdk_draw_rectangle (drawable, gc, TRUE, rect_x, y1 + 1, rect_w, y2 - y1 - 1); + + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER]); + gdk_draw_line (drawable, gc, rect_x, y1 + 1, rect_x + rect_w, y1 + 1); + gdk_draw_line (drawable, gc, rect_x, y2, rect_x + rect_w, y2); + gdk_draw_line (drawable, gc, rect_x, y1 + 1, rect_x, y1 + (y2 - (y1 + 1))); + gdk_draw_line (drawable, gc, rect_x + rect_w, y1 + 1, rect_x + rect_w, y1 + (y2 - (y1 + 1))); + + /* Draw the start and end times, as required. */ + switch (week_view->time_format) { + case E_WEEK_VIEW_TIME_BOTH_SMALL_MIN: + case E_WEEK_VIEW_TIME_BOTH: + draw_start = TRUE; + draw_end = TRUE; + break; + + case E_WEEK_VIEW_TIME_START_SMALL_MIN: + case E_WEEK_VIEW_TIME_START: + draw_start = TRUE; + draw_end = FALSE; + break; + + case E_WEEK_VIEW_TIME_NONE: + draw_start = FALSE; + draw_end = FALSE; + break; + default: + g_assert_not_reached(); + draw_start = FALSE; + draw_end = FALSE; + break; + } + + if (draw_start) { + e_week_view_draw_time (week_view, drawable, + time_x, time_y, + start_hour, start_minute); + time_x += time_width; + } + + if (draw_end) { + time_x += E_WEEK_VIEW_EVENT_TIME_SPACING; + e_week_view_draw_time (week_view, drawable, + time_x, time_y, + end_hour, end_minute); + time_x += time_width; + } + + icon_x = time_x; + if (draw_start) + icon_x += E_WEEK_VIEW_EVENT_TIME_X_PAD; + + /* Draw the icons. */ + e_week_view_event_item_draw_icons (wveitem, drawable, + icon_x, icon_y, + x2, FALSE); + + } else { + rect_x = x1 + E_WEEK_VIEW_EVENT_L_PAD; + rect_w = x2 - x1 - E_WEEK_VIEW_EVENT_L_PAD + - E_WEEK_VIEW_EVENT_R_PAD + 1; + + /* Draw the triangles at the start & end, if needed. + They also use the first few pixels at the edge of the + event so we update rect_x & rect_w so we don't draw over + them. */ + if (event->start < week_view->day_starts[span->start_day]) { + draw_start_triangle = TRUE; + rect_x += 2; + rect_w -= 2; + } + + if (event->end > week_view->day_starts[span->start_day + + span->num_days]) { + draw_end_triangle = TRUE; + rect_w -= 2; + } + + if (gdk_color_parse (e_cal_model_get_color_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)), + event->comp_data), + &bg_color)) { + GdkColormap *colormap; + + colormap = gtk_widget_get_colormap (GTK_WIDGET (week_view)); + if (gdk_colormap_alloc_color (colormap, &bg_color, TRUE, TRUE)) + gdk_gc_set_foreground (gc, &bg_color); + else + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); + } else + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); + gdk_draw_rectangle (drawable, gc, TRUE, rect_x, y1 + 1, rect_w, y2 - y1 - 1); + + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER]); + rect_x2 = rect_x + rect_w - 1; + gdk_draw_line (drawable, gc, rect_x, y1, rect_x2, y1); + gdk_draw_line (drawable, gc, rect_x, y2, rect_x2, y2); + + if (draw_start_triangle) { + e_week_view_event_item_draw_triangle (wveitem, drawable, x1 + E_WEEK_VIEW_EVENT_L_PAD + 2, y1, -3, y2 - y1 + 1); + } else { + gdk_draw_line (drawable, gc, rect_x, y1, rect_x, y2); + } + + if (draw_end_triangle) { + e_week_view_event_item_draw_triangle (wveitem, drawable, x2 - E_WEEK_VIEW_EVENT_R_PAD - 2, y1, 3, y2 - y1 + 1); + } else { + gdk_draw_line (drawable, gc, rect_x2, y1, rect_x2, y2); + } + + if (span->text_item && E_TEXT (span->text_item)->editing) + editing_span = TRUE; + + /* Draw the start & end times, if they are not on day + boundaries. The start time would always be shown if it was + needed, though it may be clipped as the window shrinks. + The end time is only displayed if there is enough room. + We calculate the minimum position for the end time, which + depends on whether the start time is displayed. If the end + time doesn't fit, then we don't draw it. */ + min_end_time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD + + E_WEEK_VIEW_EVENT_BORDER_WIDTH + + E_WEEK_VIEW_EVENT_EDGE_X_PAD; + if (!editing_span + && event->start > week_view->day_starts[span->start_day]) { + time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD + + E_WEEK_VIEW_EVENT_BORDER_WIDTH + + E_WEEK_VIEW_EVENT_EDGE_X_PAD; + + clip_rect.x = x1; + clip_rect.y = y1; + clip_rect.width = x2 - x1 - E_WEEK_VIEW_EVENT_R_PAD + - E_WEEK_VIEW_EVENT_BORDER_WIDTH + 1; + clip_rect.height = y2 - y1 + 1; + gdk_gc_set_clip_rectangle (gc, &clip_rect); + + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_TEXT]); + + e_week_view_draw_time (week_view, drawable, + time_x, time_y, + start_hour, start_minute); + + gdk_gc_set_clip_rectangle (gc, NULL); + + /* We don't want the end time to be drawn over the + start time, so we increase the minimum position. */ + min_end_time_x += time_width + + E_WEEK_VIEW_EVENT_TIME_X_PAD; + } + + max_icon_x = x2 + 1 - E_WEEK_VIEW_EVENT_R_PAD + - E_WEEK_VIEW_EVENT_BORDER_WIDTH + - E_WEEK_VIEW_EVENT_EDGE_X_PAD; + + if (!editing_span + && event->end < week_view->day_starts[span->start_day + + span->num_days]) { + /* Calculate where the end time should be displayed. */ + time_x = x2 + 1 - E_WEEK_VIEW_EVENT_R_PAD + - E_WEEK_VIEW_EVENT_BORDER_WIDTH + - E_WEEK_VIEW_EVENT_EDGE_X_PAD + - time_width; + + /* Draw the end time, if the position is greater than + the minimum calculated above. */ + if (time_x >= min_end_time_x) { + e_week_view_draw_time (week_view, drawable, + time_x, time_y, + end_hour, end_minute); + max_icon_x -= time_width + + E_WEEK_VIEW_EVENT_TIME_X_PAD; + } + } + + /* Draw the icons. */ + if (span->text_item + && (week_view->editing_event_num != wveitem->event_num + || week_view->editing_span_num != wveitem->span_num)) { + icon_x = span->text_item->x1 - E_WEEK_VIEW_ICON_R_PAD - x; + e_week_view_event_item_draw_icons (wveitem, drawable, + icon_x, icon_y, + max_icon_x, TRUE); + } + } +} + + +static void +e_week_view_draw_time (EWeekView *week_view, + GdkDrawable *drawable, + gint time_x, + gint time_y, + gint hour, + gint minute) +{ + GtkStyle *style; + GdkGC *gc; + gint hour_to_display, suffix_width; + gint time_y_normal_font, time_y_small_font; + gchar buffer[128], *suffix; + PangoLayout *layout; + PangoFontDescription *small_font_desc; + + style = gtk_widget_get_style (GTK_WIDGET (week_view)); + small_font_desc = week_view->small_font_desc; + gc = week_view->main_gc; + + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_TEXT]); + + layout = gtk_widget_create_pango_layout (GTK_WIDGET (week_view), NULL); + + time_y_normal_font = time_y_small_font = time_y; + if (small_font_desc) + time_y_small_font = time_y; + + e_week_view_convert_time_to_display (week_view, hour, &hour_to_display, + &suffix, &suffix_width); + + if (week_view->use_small_font && week_view->small_font_desc) { + g_snprintf (buffer, sizeof (buffer), "%2i:%02i", + hour_to_display, minute); + + /* Draw the hour. */ + if (hour_to_display < 10) { + pango_layout_set_text (layout, buffer + 1, 1); + gdk_draw_layout (drawable, gc, + time_x + week_view->digit_width, + time_y_normal_font, + layout); + } else { + pango_layout_set_text (layout, buffer, 2); + gdk_draw_layout (drawable, gc, + time_x, + time_y_normal_font, + layout); + } + + time_x += week_view->digit_width * 2; + + /* Draw the start minute, in the small font. */ + pango_layout_set_font_description (layout, week_view->small_font_desc); + pango_layout_set_text (layout, buffer + 3, 2); + gdk_draw_layout (drawable, gc, + time_x, + time_y_small_font, + layout); + + pango_layout_set_font_description (layout, style->font_desc); + + time_x += week_view->small_digit_width * 2; + + /* Draw the 'am'/'pm' suffix, if 12-hour format. */ + if (!e_calendar_view_get_use_24_hour_format (E_CALENDAR_VIEW (week_view))) { + pango_layout_set_text (layout, suffix, -1); + gdk_draw_layout (drawable, gc, + time_x, + time_y_normal_font, + layout); + } + } else { + /* Draw the start time in one go. */ + g_snprintf (buffer, sizeof (buffer), "%2i:%02i%s", + hour_to_display, minute, suffix); + if (hour_to_display < 10) { + pango_layout_set_text (layout, buffer + 1, -1); + gdk_draw_layout (drawable, gc, + time_x + week_view->digit_width, + time_y_normal_font, + layout); + } else { + pango_layout_set_text (layout, buffer, -1); + gdk_draw_layout (drawable, gc, + time_x, + time_y_normal_font, + layout); + } + + } + + g_object_unref (layout); +} + + +static void +e_week_view_event_item_draw_icons (EWeekViewEventItem *wveitem, + GdkDrawable *drawable, + gint icon_x, + gint icon_y, + gint x2, + gboolean right_align) +{ + EWeekView *week_view; + EWeekViewEvent *event; + ECalComponent *comp; + GdkGC *gc; + gint num_icons = 0, icon_x_inc; + gboolean draw_reminder_icon = FALSE, draw_recurrence_icon = FALSE; + gboolean draw_timezone_icon = FALSE, draw_attach_icon = FALSE; + GSList *categories_list, *elem; + + week_view = E_WEEK_VIEW (GTK_WIDGET (GNOME_CANVAS_ITEM (wveitem)->canvas)->parent); + + event = &g_array_index (week_view->events, EWeekViewEvent, + wveitem->event_num); + comp = e_cal_component_new (); + e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp)); + + gc = week_view->main_gc; + + if (e_cal_component_has_alarms (comp)) { + draw_reminder_icon = TRUE; + num_icons++; + } + + if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) { + draw_recurrence_icon = TRUE; + num_icons++; + } + + if (e_cal_component_has_attachments (comp)) { + draw_attach_icon = TRUE; + num_icons++; + } + + if (event->different_timezone) { + draw_timezone_icon = TRUE; + num_icons++; + } + + e_cal_component_get_categories_list (comp, &categories_list); + for (elem = categories_list; elem; elem = elem->next) { + char *category; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask = NULL; + + category = (char *) elem->data; + if (e_categories_config_get_icon_for (category, &pixmap, &mask)) + num_icons++; + } + + icon_x_inc = E_WEEK_VIEW_ICON_WIDTH + E_WEEK_VIEW_ICON_X_PAD; + + if (right_align) + icon_x -= icon_x_inc * num_icons; + + if (draw_reminder_icon && icon_x + E_WEEK_VIEW_ICON_WIDTH <= x2) { + gdk_gc_set_clip_mask (gc, NULL); + gdk_draw_pixbuf (drawable, gc, + week_view->reminder_icon, + 0, 0, icon_x, icon_y, + E_WEEK_VIEW_ICON_WIDTH, + E_WEEK_VIEW_ICON_HEIGHT, + GDK_RGB_DITHER_NORMAL, + 0, 0); + icon_x += icon_x_inc; + } + + if (draw_attach_icon && icon_x + E_WEEK_VIEW_ICON_WIDTH <= x2) { + gdk_gc_set_clip_mask (gc, NULL); + gdk_draw_pixbuf (drawable, gc, + week_view->attach_icon, + 0, 0, icon_x, icon_y, + E_WEEK_VIEW_ICON_WIDTH, + E_WEEK_VIEW_ICON_HEIGHT, + GDK_RGB_DITHER_NORMAL, + 0, 0); + icon_x += icon_x_inc; + } + + if (draw_recurrence_icon && icon_x + E_WEEK_VIEW_ICON_WIDTH <= x2) { + gdk_gc_set_clip_mask (gc, NULL); + gdk_draw_pixbuf (drawable, gc, + week_view->recurrence_icon, + 0, 0, icon_x, icon_y, + E_WEEK_VIEW_ICON_WIDTH, + E_WEEK_VIEW_ICON_HEIGHT, + GDK_RGB_DITHER_NORMAL, + 0, 0); + icon_x += icon_x_inc; + } + + if (draw_timezone_icon && icon_x + E_WEEK_VIEW_ICON_WIDTH <= x2) { + gdk_gc_set_clip_mask (gc, NULL); + gdk_draw_pixbuf (drawable, gc, + week_view->timezone_icon, + 0, 0, icon_x, icon_y, + E_WEEK_VIEW_ICON_WIDTH, + E_WEEK_VIEW_ICON_HEIGHT, + GDK_RGB_DITHER_NORMAL, + 0, 0); + icon_x += icon_x_inc; + } + + /* draw categories icons */ + for (elem = categories_list; elem; elem = elem->next) { + char *category; + GdkPixmap *pixmap = NULL; + GdkBitmap *mask = NULL; + + category = (char *) elem->data; + if (!e_categories_config_get_icon_for (category, &pixmap, &mask)) + continue; + + if (icon_x + E_WEEK_VIEW_ICON_WIDTH <= x2) { + gdk_gc_set_clip_origin (gc, icon_x, icon_y); + if (mask != NULL) + gdk_gc_set_clip_mask (gc, mask); + gdk_draw_pixmap (drawable, gc, + pixmap, + 0, 0, icon_x, icon_y, + E_WEEK_VIEW_ICON_WIDTH, + E_WEEK_VIEW_ICON_HEIGHT); + icon_x += icon_x_inc; + } + gdk_pixmap_unref (pixmap); + if (mask != NULL) + gdk_bitmap_unref (mask); + } + + e_cal_component_free_categories_list (categories_list); + g_object_unref(comp); + gdk_gc_set_clip_mask (gc, NULL); +} + + +/* This draws a little triangle to indicate that an event extends past + the days visible on screen. */ +static void +e_week_view_event_item_draw_triangle (EWeekViewEventItem *wveitem, + GdkDrawable *drawable, + gint x, + gint y, + gint w, + gint h) +{ + EWeekView *week_view; + EWeekViewEvent *event; + GdkGC *gc; + GdkColor bg_color; + GdkPoint points[3]; + gint c1, c2; + + week_view = E_WEEK_VIEW (GTK_WIDGET (GNOME_CANVAS_ITEM (wveitem)->canvas)->parent); + + event = &g_array_index (week_view->events, EWeekViewEvent, + wveitem->event_num); + + gc = week_view->main_gc; + + points[0].x = x; + points[0].y = y; + points[1].x = x + w; + points[1].y = y + (h / 2); + points[2].x = x; + points[2].y = y + h - 1; + + if (gdk_color_parse (e_cal_model_get_color_for_component (e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)), + event->comp_data), + &bg_color)) { + GdkColormap *colormap; + + colormap = gtk_widget_get_colormap (GTK_WIDGET (week_view)); + if (gdk_colormap_alloc_color (colormap, &bg_color, TRUE, TRUE)) + gdk_gc_set_foreground (gc, &bg_color); + else + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); + } else + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); + + gdk_draw_polygon (drawable, gc, TRUE, points, 3); + + gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER]); + + /* If the height is odd we can use the same central point for both + lines. If it is even we use different end-points. */ + c1 = c2 = y + (h / 2); + if (h % 2 == 0) + c1--; + + gdk_draw_line (drawable, gc, x, y, x + w, c1); + gdk_draw_line (drawable, gc, x, y + h - 1, x + w, c2); +} +#endif + +#ifdef ENABLE_CAIRO static void e_week_view_event_item_draw (GnomeCanvasItem *canvas_item, GdkDrawable *drawable, @@ -234,6 +809,7 @@ e_week_view_event_item_draw (GnomeCanvasItem *canvas_item, cairo_pattern_t *pat; guint16 red, green, blue; gdouble radius, cx0, cy0, rect_height, rect_width; + gboolean gradient; gdouble cc = 65535.0; #if 0 @@ -252,6 +828,10 @@ e_week_view_event_item_draw (GnomeCanvasItem *canvas_item, g_return_if_fail(wveitem->event_num < week_view->events->len); + gradient = gconf_client_get_bool (gconf_client_get_default (), + "/apps/evolution/calendar/display/events_gradient", + NULL); + event = &g_array_index (week_view->events, EWeekViewEvent, wveitem->event_num); @@ -344,14 +924,18 @@ e_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); - cairo_set_source (cr, pat); - cairo_fill_preserve (cr); - cairo_pattern_destroy (pat); - + if (gradient) { + 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_set_source (cr, pat); + cairo_fill_preserve (cr); + cairo_pattern_destroy (pat); + } else { + cairo_set_source_rgba (cr, red/cc, green/cc, blue/cc, 0.8); + cairo_fill_preserve (cr); + } cairo_set_source_rgba (cr, red/cc, green/cc, blue/cc, 0.2); cairo_set_line_width (cr, 0.5); cairo_stroke (cr); @@ -478,14 +1062,18 @@ e_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, + if (gradient){ + 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_set_source (cr, pat); - cairo_fill_preserve (cr); - cairo_pattern_destroy (pat); - + 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_set_source (cr, pat); + cairo_fill_preserve (cr); + cairo_pattern_destroy (pat); + } else { + cairo_set_source_rgba (cr, red/cc, green/cc, blue/cc, 0.8); + cairo_fill_preserve (cr); + } cairo_set_source_rgba (cr, red/cc, green/cc, blue/cc, 0.2); cairo_set_line_width (cr, 0.5); cairo_stroke (cr); @@ -592,7 +1180,6 @@ e_week_view_event_item_draw (GnomeCanvasItem *canvas_item, cairo_destroy (cr); } - static void e_week_view_draw_time (EWeekView *week_view, GdkDrawable *drawable, @@ -898,7 +1485,7 @@ e_week_view_event_item_draw_triangle (EWeekViewEventItem *wveitem, cairo_destroy (cr); } - +#endif /* This is supposed to return the nearest item the the point and the distance. Since we are the only item we just return ourself and 0 for the distance. -- cgit