Bug #236996 - Calendar display for weekends in month view

This commit is contained in:
Milan Crha
2009-07-03 14:15:16 +02:00
parent d1f3e3514e
commit 044adbe76a
3 changed files with 49 additions and 2 deletions

View File

@ -30,6 +30,7 @@
#include <glib/gi18n.h>
#include "e-week-view-main-item.h"
#include "ea-calendar.h"
#include "calendar-config.h"
static void e_week_view_main_item_set_property (GObject *object,
guint property_id,
@ -189,6 +190,23 @@ e_week_view_main_item_draw (GnomeCanvasItem *canvas_item,
}
}
static gint
gdate_to_cal_weekdays (GDateWeekday wd)
{
switch (wd) {
case G_DATE_MONDAY: return CAL_MONDAY;
case G_DATE_TUESDAY: return CAL_TUESDAY;
case G_DATE_WEDNESDAY: return CAL_WEDNESDAY;
case G_DATE_THURSDAY: return CAL_THURSDAY;
case G_DATE_FRIDAY: return CAL_FRIDAY;
case G_DATE_SATURDAY: return CAL_SATURDAY;
case G_DATE_SUNDAY: return CAL_SUNDAY;
default: break;
}
return 0;
}
static void
e_week_view_main_item_draw_day (EWeekViewMainItem *wvmitem,
gint day,
@ -205,7 +223,7 @@ e_week_view_main_item_draw_day (EWeekViewMainItem *wvmitem,
gint right_edge, bottom_edge, date_width, date_x, line_y;
gboolean show_day_name, show_month_name, selected;
gchar buffer[128], *format_string;
gint month, day_of_month, max_width;
gint day_of_week, month, day_of_month, max_width;
GdkColor *bg_color;
PangoFontDescription *font_desc;
PangoContext *pango_context;
@ -213,6 +231,7 @@ e_week_view_main_item_draw_day (EWeekViewMainItem *wvmitem,
PangoLayout *layout;
gboolean today = FALSE;
cairo_t *cr;
CalWeekdays working_days;
#if 0
g_print ("Drawing Day:%i at %i,%i\n", day, x, y);
@ -230,6 +249,7 @@ e_week_view_main_item_draw_day (EWeekViewMainItem *wvmitem,
g_return_if_fail (gc != NULL);
day_of_week = gdate_to_cal_weekdays (g_date_get_weekday (date));
month = g_date_get_month (date);
day_of_month = g_date_get_day (date);
line_y = y + E_WEEK_VIEW_DATE_T_PAD +
@ -237,12 +257,16 @@ e_week_view_main_item_draw_day (EWeekViewMainItem *wvmitem,
PANGO_PIXELS (pango_font_metrics_get_descent (font_metrics)) +
E_WEEK_VIEW_DATE_LINE_T_PAD;
working_days = calendar_config_get_working_days ();
/* Draw the background of the day. In the month view odd months are
one color and even months another, so you can easily see when each
month starts (defaults are white for odd - January, March, ... and
light gray for even). In the week view the background is always the
same color, the color used for the odd months in the month view. */
if (week_view->multi_week_view && (month % 2 == 0))
if ((working_days & day_of_week) == 0)
bg_color = &week_view->colors[E_WEEK_VIEW_COLOR_MONTH_NONWORKING_DAY];
else if (week_view->multi_week_view && (month % 2 == 0))
bg_color = &week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS];
else
bg_color = &week_view->colors[E_WEEK_VIEW_COLOR_ODD_MONTHS];

View File

@ -740,6 +740,27 @@ e_week_view_realize (GtkWidget *widget)
week_view->meeting_icon = e_icon_factory_get_icon ("stock_people", GTK_ICON_SIZE_MENU);
}
static GdkColor
color_inc (GdkColor c, gint amount)
{
#define dec(x) \
if (x + amount >= 0 \
&& x + amount <= 0xFFFF) \
x += amount; \
else if (amount <= 0) \
x = 0; \
else \
x = 0xFFFF;
dec (c.red);
dec (c.green);
dec (c.blue);
#undef dec
return c;
}
static void
e_week_view_set_colors(EWeekView *week_view, GtkWidget *widget)
{
@ -754,6 +775,7 @@ e_week_view_set_colors(EWeekView *week_view, GtkWidget *widget)
week_view->colors[E_WEEK_VIEW_COLOR_DATES] = widget->style->text[GTK_STATE_NORMAL];
week_view->colors[E_WEEK_VIEW_COLOR_DATES_SELECTED] = widget->style->text[GTK_STATE_SELECTED];
week_view->colors[E_WEEK_VIEW_COLOR_TODAY] = widget->style->base[GTK_STATE_SELECTED];
week_view->colors[E_WEEK_VIEW_COLOR_MONTH_NONWORKING_DAY] = color_inc (week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS], -0x0A0A);
}
static void

View File

@ -105,6 +105,7 @@ typedef enum
E_WEEK_VIEW_COLOR_DATES,
E_WEEK_VIEW_COLOR_DATES_SELECTED,
E_WEEK_VIEW_COLOR_TODAY,
E_WEEK_VIEW_COLOR_MONTH_NONWORKING_DAY,
E_WEEK_VIEW_COLOR_LAST
} EWeekViewColors;