diff options
Diffstat (limited to 'calendar')
-rw-r--r-- | calendar/gui/e-cal-component-preview.c | 2 | ||||
-rw-r--r-- | calendar/gui/e-cal-list-view.c | 11 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.c | 9 | ||||
-rw-r--r-- | calendar/gui/e-day-view-time-item.c | 37 | ||||
-rw-r--r-- | calendar/gui/e-day-view-top-item.c | 43 | ||||
-rw-r--r-- | calendar/gui/e-day-view.c | 115 | ||||
-rw-r--r-- | calendar/gui/e-meeting-time-sel.c | 16 | ||||
-rw-r--r-- | calendar/gui/e-meeting-time-sel.h | 2 | ||||
-rw-r--r-- | calendar/gui/e-memo-table.c | 19 | ||||
-rw-r--r-- | calendar/gui/e-task-table.c | 21 | ||||
-rw-r--r-- | calendar/gui/e-week-view-event-item.c | 38 | ||||
-rw-r--r-- | calendar/gui/e-week-view-main-item.c | 4 | ||||
-rw-r--r-- | calendar/gui/e-week-view-titles-item.c | 15 | ||||
-rw-r--r-- | calendar/gui/e-week-view.c | 196 | ||||
-rw-r--r-- | calendar/gui/e-week-view.h | 2 | ||||
-rw-r--r-- | calendar/gui/e-weekday-chooser.c | 51 |
16 files changed, 303 insertions, 278 deletions
diff --git a/calendar/gui/e-cal-component-preview.c b/calendar/gui/e-cal-component-preview.c index fa1aca0253..8b67324f55 100644 --- a/calendar/gui/e-cal-component-preview.c +++ b/calendar/gui/e-cal-component-preview.c @@ -440,7 +440,7 @@ e_cal_component_preview_init (ECalComponentPreview *preview) preview->priv = E_CAL_COMPONENT_PREVIEW_GET_PRIVATE (preview); g_signal_connect ( - preview, "style-set", + preview, "style-updated", G_CALLBACK (load_comp), NULL); } diff --git a/calendar/gui/e-cal-list-view.c b/calendar/gui/e-cal-list-view.c index 7a0983b422..95eec04f39 100644 --- a/calendar/gui/e-cal-list-view.c +++ b/calendar/gui/e-cal-list-view.c @@ -167,8 +167,6 @@ setup_e_table (ECalListView *cal_list_view) ETableSpecification *specification; GList *strings; ECell *cell, *popup_cell; - GnomeCanvas *canvas; - GtkStyle *style; GtkWidget *container; GtkWidget *widget; gchar *etspecfile; @@ -302,15 +300,6 @@ setup_e_table (ECalListView *cal_list_view) g_object_unref (specification); g_free (etspecfile); - /* Make sure text is readable on top of our color coding */ - - canvas = GNOME_CANVAS (cal_list_view->table->table_canvas); - style = gtk_widget_get_style (GTK_WIDGET (canvas)); - - style->fg[GTK_STATE_SELECTED] = style->text[GTK_STATE_NORMAL]; - style->fg[GTK_STATE_ACTIVE] = style->text[GTK_STATE_NORMAL]; - gtk_widget_set_style (GTK_WIDGET (canvas), style); - /* Connect signals */ g_signal_connect ( cal_list_view->table, "double_click", diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c index 1fac6e7855..686327ac2f 100644 --- a/calendar/gui/e-calendar-view.c +++ b/calendar/gui/e-calendar-view.c @@ -2029,11 +2029,11 @@ e_calendar_view_get_tooltips (const ECalendarViewEventData *data) icalcomponent *clone_comp; time_t t_start, t_end; ECalendarViewEvent *pevent; - GtkStyle *style = gtk_widget_get_default_style (); GtkWidget *widget; GdkWindow *window; GdkDisplay *display; GdkDeviceManager *device_manager; + GdkRGBA bg_rgba, fg_rgba; GQueue *grabbed_keyboards; ECalComponent *newcomp = e_cal_component_new (); icaltimezone *zone, *default_zone; @@ -2047,6 +2047,9 @@ e_calendar_view_get_tooltips (const ECalendarViewEventData *data) g_return_val_if_fail (data != NULL, FALSE); g_return_val_if_fail (E_IS_CALENDAR_VIEW (data->cal_view), FALSE); + e_utils_get_theme_color (GTK_WIDGET (data->cal_view), "theme_selected_bg_color", E_UTILS_DEFAULT_THEME_SELECTED_BG_COLOR, &bg_rgba); + e_utils_get_theme_color (GTK_WIDGET (data->cal_view), "theme_selected_fg_color", E_UTILS_DEFAULT_THEME_SELECTED_FG_COLOR, &fg_rgba); + model = e_calendar_view_get_model (data->cal_view); /* Delete any stray tooltip if left */ @@ -2092,8 +2095,8 @@ e_calendar_view_get_tooltips (const ECalendarViewEventData *data) gtk_box_pack_start ((GtkBox *) hbox, label, FALSE, FALSE, 0); ebox = gtk_event_box_new (); gtk_container_add ((GtkContainer *) ebox, hbox); - gtk_widget_modify_bg (ebox, GTK_STATE_NORMAL, &(style->bg[GTK_STATE_SELECTED])); - gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &(style->text[GTK_STATE_SELECTED])); + gtk_widget_override_background_color (ebox, GTK_STATE_FLAG_NORMAL, &bg_rgba); + gtk_widget_override_color (label, GTK_STATE_FLAG_NORMAL, &fg_rgba); gtk_box_pack_start ((GtkBox *) box, ebox, FALSE, FALSE, 0); g_free (tmp); diff --git a/calendar/gui/e-day-view-time-item.c b/calendar/gui/e-day-view-time-item.c index b30951bb5b..259e073909 100644 --- a/calendar/gui/e-day-view-time-item.c +++ b/calendar/gui/e-day-view-time-item.c @@ -272,7 +272,6 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item, EDayViewTimeItem *time_item; ECalendarView *cal_view; ECalModel *model; - GtkStyle *style; const gchar *suffix; gchar buffer[64], *midnight_day = NULL, *midnight_month = NULL; gint time_divisions; @@ -284,32 +283,30 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item, gint max_suffix_width, max_minute_or_suffix_width; PangoLayout *layout; PangoContext *context; - PangoFontDescription *small_font_desc; PangoFontMetrics *large_font_metrics, *small_font_metrics; - GdkColor fg, dark; + GtkWidget *widget; + GdkRGBA fg, dark; GdkColor mb_color; time_item = E_DAY_VIEW_TIME_ITEM (canvas_item); day_view = e_day_view_time_item_get_day_view (time_item); g_return_if_fail (day_view != NULL); + widget = GTK_WIDGET (day_view); cal_view = E_CALENDAR_VIEW (day_view); model = e_calendar_view_get_model (cal_view); time_divisions = e_calendar_view_get_time_divisions (cal_view); - style = gtk_widget_get_style (GTK_WIDGET (day_view)); - small_font_desc = style->font_desc; - context = gtk_widget_get_pango_context (GTK_WIDGET (day_view)); + small_font_metrics = pango_context_get_metrics ( + context, NULL, + pango_context_get_language (context)); large_font_metrics = pango_context_get_metrics ( context, day_view->large_font_desc, pango_context_get_language (context)); - small_font_metrics = pango_context_get_metrics ( - context, small_font_desc, - pango_context_get_language (context)); - fg = style->fg[GTK_STATE_NORMAL]; - dark = style->dark[GTK_STATE_NORMAL]; + e_utils_get_theme_color (widget, "theme_fg_color,theme_text_color", E_UTILS_DEFAULT_THEME_FG_COLOR, &fg); + e_utils_get_theme_color (widget, "theme_base_color", E_UTILS_DEFAULT_THEME_BASE_COLOR, &dark); /* The start and end of the long horizontal line between hours. */ long_line_x1 = @@ -496,7 +493,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item, * between hours and display as one long string, * e.g. "14:00" or "2 pm". */ cairo_save (cr); - gdk_cairo_set_source_color (cr, &dark); + gdk_cairo_set_source_rgba (cr, &dark); cairo_save (cr); cairo_set_line_width (cr, 0.7); cairo_move_to (cr, long_line_x1, row_y); @@ -520,7 +517,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item, if (show_midnight_date) gdk_cairo_set_source_color (cr, &mb_color); else - gdk_cairo_set_source_color (cr, &fg); + gdk_cairo_set_source_rgba (cr, &fg); layout = pango_cairo_create_layout (cr); pango_layout_set_text (layout, buffer, -1); pango_layout_get_pixel_size (layout, &minute_width, NULL); @@ -541,7 +538,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item, * large font. */ cairo_save (cr); - gdk_cairo_set_source_color (cr, &dark); + gdk_cairo_set_source_rgba (cr, &dark); if (show_midnight_date) g_snprintf (buffer, sizeof (buffer), "%s", midnight_day); else @@ -559,7 +556,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item, if (show_midnight_date) gdk_cairo_set_source_color (cr, &mb_color); else - gdk_cairo_set_source_color (cr, &fg); + gdk_cairo_set_source_rgba (cr, &fg); layout = pango_cairo_create_layout (cr); pango_layout_set_text (layout, buffer, -1); pango_layout_set_font_description ( @@ -578,7 +575,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item, /* Within the hour - draw a short line before * the time. */ cairo_save (cr); - gdk_cairo_set_source_color (cr, &dark); + gdk_cairo_set_source_rgba (cr, &dark); cairo_set_line_width (cr, 0.7); cairo_move_to (cr, short_line_x1, row_y); cairo_line_to (cr, long_line_x2, row_y); @@ -607,7 +604,7 @@ edvti_draw_zone (GnomeCanvasItem *canvas_item, if (show_midnight_date) gdk_cairo_set_source_color (cr, &mb_color); else - gdk_cairo_set_source_color (cr, &fg); + gdk_cairo_set_source_rgba (cr, &fg); layout = pango_cairo_create_layout (cr); pango_layout_set_text (layout, buffer, -1); pango_layout_set_font_description ( @@ -1061,12 +1058,11 @@ e_day_view_time_item_set_day_view (EDayViewTimeItem *time_item, /* Returns the minimum width needed for the column, by adding up all the * maximum widths of the strings. The string widths are all calculated in - * the style_set handlers of EDayView and EDayViewTimeCanvas. */ + * the style_updated handlers of EDayView and EDayViewTimeCanvas. */ gint e_day_view_time_item_get_column_width (EDayViewTimeItem *time_item) { EDayView *day_view; - GtkStyle *style; gint digit, large_digit_width, max_large_digit_width = 0; gint max_suffix_width, max_minute_or_suffix_width; gint column_width_default, column_width_60_min_rows; @@ -1074,9 +1070,6 @@ e_day_view_time_item_get_column_width (EDayViewTimeItem *time_item) day_view = e_day_view_time_item_get_day_view (time_item); g_return_val_if_fail (day_view != NULL, 0); - style = gtk_widget_get_style (GTK_WIDGET (day_view)); - g_return_val_if_fail (style != NULL, 0); - /* Find the maximum width a digit can have. FIXME: We could use pango's * approximation function, but I worry it won't be precise enough. Also * it needs a language tag that I don't know where to get. */ diff --git a/calendar/gui/e-day-view-top-item.c b/calendar/gui/e-day-view-top-item.c index 300170ba07..6ef99f4afb 100644 --- a/calendar/gui/e-day-view-top-item.c +++ b/calendar/gui/e-day-view-top-item.c @@ -68,7 +68,7 @@ day_view_top_item_draw_triangle (EDayViewTopItem *top_item, { EDayView *day_view; EDayViewEvent *event; - GdkColor bg_color; + GdkRGBA bg_color; GdkPoint points[3]; gint c1, c2; @@ -98,11 +98,11 @@ day_view_top_item_draw_triangle (EDayViewTopItem *top_item, cairo_save (cr); /* Fill it in. */ - if (gdk_color_parse ( + 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), &bg_color)) { - gdk_cairo_set_source_color (cr, &bg_color); + event->comp_data))) { + gdk_cairo_set_source_rgba (cr, &bg_color); } else { gdk_cairo_set_source_color ( cr, &day_view->colors @@ -139,7 +139,6 @@ day_view_top_item_draw_long_event (EDayViewTopItem *top_item, { EDayView *day_view; EDayViewEvent *event; - GtkStyle *style; gint start_day, end_day; gint item_x, item_y, item_w, item_h; gint text_x, icon_x, icon_y, icon_x_inc; @@ -152,7 +151,7 @@ day_view_top_item_draw_long_event (EDayViewTopItem *top_item, gboolean draw_start_triangle, draw_end_triangle; GSList *categories_list, *elem; PangoLayout *layout; - GdkColor bg_color; + GdkRGBA bg_color, rgba; cairo_pattern_t *pat; guint16 red, green, blue; gdouble cc = 65535.0; @@ -182,15 +181,14 @@ day_view_top_item_draw_long_event (EDayViewTopItem *top_item, if (!is_comp_data_valid (event)) return; - style = gtk_widget_get_style (GTK_WIDGET (day_view)); comp = e_cal_component_new (); e_cal_component_set_icalcomponent ( comp, icalcomponent_new_clone (event->comp_data->icalcomp)); - if (gdk_color_parse ( + 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), &bg_color)) { + event->comp_data))) { red = bg_color.red; green = bg_color.green; blue = bg_color.blue; @@ -308,7 +306,8 @@ day_view_top_item_draw_long_event (EDayViewTopItem *top_item, time_width = e_day_view_get_time_string_width (day_view); - gdk_cairo_set_source_color (cr, &style->fg[GTK_STATE_NORMAL]); + e_utils_get_theme_color (GTK_WIDGET (day_view), "theme_fg_color", E_UTILS_DEFAULT_THEME_FG_COLOR, &rgba); + gdk_cairo_set_source_rgba (cr, &rgba); if (event->start > day_view->day_starts[start_day]) { offset = day_view->first_hour_shown * 60 @@ -574,14 +573,13 @@ day_view_top_item_draw (GnomeCanvasItem *canvas_item, { EDayViewTopItem *top_item; EDayView *day_view; - GtkStyle *style; gchar buffer[128]; GtkAllocation allocation; GdkRectangle clip_rect; gint canvas_width, canvas_height, left_edge, day, date_width, date_x; gint item_height, event_num; PangoLayout *layout; - GdkColor bg, light, dark; + GdkRGBA bg, fg, light, dark; gboolean show_dates; top_item = E_DAY_VIEW_TOP_ITEM (canvas_item); @@ -589,7 +587,6 @@ day_view_top_item_draw (GnomeCanvasItem *canvas_item, g_return_if_fail (day_view != NULL); show_dates = top_item->priv->show_dates; - style = gtk_widget_get_style (GTK_WIDGET (day_view)); gtk_widget_get_allocation ( GTK_WIDGET (canvas_item->canvas), &allocation); canvas_width = allocation.width; @@ -600,14 +597,15 @@ day_view_top_item_draw (GnomeCanvasItem *canvas_item, left_edge = 0; item_height = day_view->top_row_height - E_DAY_VIEW_TOP_CANVAS_Y_GAP; - bg = style->bg[GTK_STATE_NORMAL]; - light = style->light[GTK_STATE_NORMAL]; - dark = style->dark[GTK_STATE_NORMAL]; + e_utils_get_theme_color (GTK_WIDGET (day_view), "theme_bg_color", E_UTILS_DEFAULT_THEME_BG_COLOR, &bg); + e_utils_get_theme_color (GTK_WIDGET (day_view), "theme_fg_color", E_UTILS_DEFAULT_THEME_FG_COLOR, &fg); + e_utils_shade_color (&bg, &light, E_UTILS_LIGHTNESS_MULT); + e_utils_shade_color (&bg, &dark, E_UTILS_DARKNESS_MULT); if (show_dates) { /* Draw the shadow around the dates. */ cairo_save (cr); - gdk_cairo_set_source_color (cr, &light); + gdk_cairo_set_source_rgba (cr, &light); cairo_move_to (cr, left_edge - x, 1 - y); cairo_line_to (cr, canvas_width - 2 - x, 1 - y); cairo_move_to (cr, left_edge - x, 2 - y); @@ -616,7 +614,7 @@ day_view_top_item_draw (GnomeCanvasItem *canvas_item, cairo_restore (cr); cairo_save (cr); - gdk_cairo_set_source_color (cr, &dark); + gdk_cairo_set_source_rgba (cr, &dark); cairo_move_to (cr, left_edge - x, item_height - 1 - y); cairo_line_to (cr, canvas_width - 1 - x, item_height - 1 - y); cairo_move_to (cr, canvas_width - 1 - x, 1 - y); @@ -626,7 +624,7 @@ day_view_top_item_draw (GnomeCanvasItem *canvas_item, /* Draw the background for the dates. */ cairo_save (cr); - gdk_cairo_set_source_color (cr, &bg); + gdk_cairo_set_source_rgba (cr, &bg); cairo_rectangle ( cr, left_edge + 2 - x, 2 - y, canvas_width - left_edge - 3, @@ -709,8 +707,7 @@ day_view_top_item_draw (GnomeCanvasItem *canvas_item, date_x = day_view->day_offsets[day] + (clip_rect.width - date_width) / 2; - gdk_cairo_set_source_color ( - cr, &style->fg[GTK_STATE_NORMAL]); + gdk_cairo_set_source_rgba (cr, &fg); cairo_move_to (cr, date_x - x, 3 - y); pango_cairo_show_layout (cr, layout); @@ -720,7 +717,7 @@ day_view_top_item_draw (GnomeCanvasItem *canvas_item, /* Draw the lines down the left and right of the date cols. */ if (day != 0) { cairo_save (cr); - gdk_cairo_set_source_color (cr, &light); + gdk_cairo_set_source_rgba (cr, &light); cairo_move_to ( cr, day_view->day_offsets[day] - x, 4 - y); @@ -728,7 +725,7 @@ day_view_top_item_draw (GnomeCanvasItem *canvas_item, cr, day_view->day_offsets[day] - x, item_height - 4 - y); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &dark); + gdk_cairo_set_source_rgba (cr, &dark); cairo_move_to ( cr, day_view->day_offsets[day] - 1 - x, 4 - y); diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index eb73b8a86e..8f09d27a5b 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -42,6 +42,7 @@ #include "dialogs/recur-comp.h" #include "dialogs/goto-dialog.h" #include "dialogs/save-comp.h" +#include "e-util/e-util.h" #include "calendar-config.h" #include "comp-util.h" @@ -169,7 +170,7 @@ static GtkTargetEntry target_table[] = { { (gchar *) "application/x-e-calendar-event", 0, 0 } }; -static void e_day_view_set_colors (EDayView *day_view, GtkWidget *widget); +static void e_day_view_set_colors (EDayView *day_view); static gboolean e_day_view_update_scroll_regions (EDayView *day_view); static gboolean e_day_view_get_next_tab_event (EDayView *day_view, GtkDirectionType direction, @@ -575,11 +576,9 @@ e_day_view_recalc_main_canvas_size (EDayView *day_view) static GdkColor e_day_view_get_text_color (EDayView *day_view, - EDayViewEvent *event, - GtkWidget *widget) + EDayViewEvent *event) { - GtkStyle *style; - GdkColor bg_color; + GdkColor color; guint16 red, green, blue; gdouble cc = 65535.0; @@ -588,18 +587,23 @@ e_day_view_get_text_color (EDayView *day_view, blue = day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].blue; 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), - &bg_color)) { - red = bg_color.red; - green = bg_color.green; - blue = bg_color.blue; + &color)) { + red = color.red; + green = color.green; + blue = color.blue; } - style = gtk_widget_get_style (widget); + if ((red / cc > 0.7) || (green / cc > 0.7) || (blue / cc > 0.7)) { + color.red = 0.0; + color.green = 0.0; + color.blue = 0.0; + } else { + color.red = 65535.0f; + color.green = 65535.0f; + color.blue = 65535.0f; + } - if ((red / cc > 0.7) || (green / cc > 0.7) || (blue / cc > 0.7)) - return style->black; - else - return style->white; + return color; } /* Returns the selected time range. */ @@ -1259,7 +1263,7 @@ day_view_realize (GtkWidget *widget) /* Allocate the colors. */ - e_day_view_set_colors (day_view, widget); + e_day_view_set_colors (day_view); /* Create the pixmaps. */ day_view->reminder_icon = e_icon_factory_get_icon ("stock_bell", GTK_ICON_SIZE_MENU); @@ -1320,8 +1324,7 @@ day_view_size_allocate (GtkWidget *widget, } static void -day_view_style_set (GtkWidget *widget, - GtkStyle *previous_style) +day_view_style_updated (GtkWidget *widget) { EDayView *day_view; gint hour; @@ -1341,17 +1344,17 @@ day_view_style_set (GtkWidget *widget, EDayViewEvent *event; GdkColor color; - if (GTK_WIDGET_CLASS (e_day_view_parent_class)->style_set) - (*GTK_WIDGET_CLASS (e_day_view_parent_class)->style_set)(widget, previous_style); + if (GTK_WIDGET_CLASS (e_day_view_parent_class)->style_updated) + (*GTK_WIDGET_CLASS (e_day_view_parent_class)->style_updated) (widget); day_view = E_DAY_VIEW (widget); - e_day_view_set_colors (day_view, widget); + e_day_view_set_colors (day_view); for (week_day = 0; week_day < E_DAY_VIEW_MAX_DAYS; week_day++) { for (event_num = 0; event_num < day_view->events[week_day]->len; event_num++) { event = &g_array_index (day_view->events[week_day], EDayViewEvent, event_num); if (event->canvas_item) { - color = e_day_view_get_text_color (day_view, event, widget); + color = e_day_view_get_text_color (day_view, event); gnome_canvas_item_set ( event->canvas_item, "fill_color_gdk", &color, @@ -1362,7 +1365,7 @@ day_view_style_set (GtkWidget *widget, for (event_num = 0; event_num < day_view->long_events->len; event_num++) { event = &g_array_index (day_view->long_events, EDayViewEvent, event_num); if (event->canvas_item) { - color = e_day_view_get_text_color (day_view, event, widget); + color = e_day_view_get_text_color (day_view, event); gnome_canvas_item_set ( event->canvas_item, "fill_color_gdk", &color, @@ -1371,8 +1374,8 @@ day_view_style_set (GtkWidget *widget, } /* Set up Pango prerequisites */ - font_desc = gtk_widget_get_style (widget)->font_desc; pango_context = gtk_widget_get_pango_context (widget); + font_desc = pango_context_get_font_description (pango_context); font_metrics = pango_context_get_metrics ( pango_context, font_desc, pango_context_get_language (pango_context)); @@ -1841,7 +1844,7 @@ e_day_view_class_init (EDayViewClass *class) widget_class->realize = day_view_realize; widget_class->unrealize = day_view_unrealize; widget_class->size_allocate = day_view_size_allocate; - widget_class->style_set = day_view_style_set; + widget_class->style_updated = day_view_style_updated; widget_class->focus = day_view_focus; widget_class->key_press_event = day_view_key_press; widget_class->focus_in_event = day_view_focus_in; @@ -2649,28 +2652,40 @@ e_day_view_new (ECalModel *model) } static void -e_day_view_set_colors (EDayView *day_view, - GtkWidget *widget) -{ - GtkStyle *style; - - style = gtk_widget_get_style (widget); +e_day_view_set_colors (EDayView *day_view) +{ + GtkWidget *widget = GTK_WIDGET (day_view); + GdkRGBA base_bg, bg_bg, selected_bg, unfocused_selected_bg, dark_bg, light_bg; + + e_utils_get_theme_color (widget, "theme_base_color", E_UTILS_DEFAULT_THEME_BASE_COLOR, &base_bg); + e_utils_get_theme_color (widget, "theme_bg_color", E_UTILS_DEFAULT_THEME_BG_COLOR, &bg_bg); + e_utils_get_theme_color (widget, "theme_selected_bg_color", E_UTILS_DEFAULT_THEME_SELECTED_BG_COLOR, &selected_bg); + e_utils_get_theme_color (widget, "theme_unfocused_selected_bg_color,theme_selected_bg_color", E_UTILS_DEFAULT_THEME_UNFOCUSED_SELECTED_BG_COLOR, &unfocused_selected_bg); + + e_utils_shade_color (&bg_bg, &dark_bg, E_UTILS_DARKNESS_MULT); + e_utils_shade_color (&bg_bg, &light_bg, E_UTILS_LIGHTNESS_MULT); + + e_rgba_to_color (&base_bg, &day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING]); + e_rgba_to_color (&bg_bg, &day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING]); + e_rgba_to_color (&selected_bg, &day_view->colors[E_DAY_VIEW_COLOR_BG_SELECTED]); + e_rgba_to_color (&unfocused_selected_bg, &day_view->colors[E_DAY_VIEW_COLOR_BG_SELECTED_UNFOCUSSED]); + e_rgba_to_color (&dark_bg, &day_view->colors[E_DAY_VIEW_COLOR_BG_GRID]); + e_rgba_to_color (&dark_bg, &day_view->colors[E_DAY_VIEW_COLOR_BG_TOP_CANVAS]); + e_rgba_to_color (&selected_bg, &day_view->colors[E_DAY_VIEW_COLOR_BG_TOP_CANVAS_SELECTED]); + e_rgba_to_color (&light_bg, &day_view->colors[E_DAY_VIEW_COLOR_BG_TOP_CANVAS_GRID]); + e_rgba_to_color (&selected_bg, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]); + e_rgba_to_color (&base_bg, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND]); + e_rgba_to_color (&dark_bg, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER]); + e_rgba_to_color (&base_bg, &day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND]); + e_rgba_to_color (&dark_bg, &day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BORDER]); - day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING] = style->base[GTK_STATE_NORMAL]; - day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING] = style->bg[GTK_STATE_ACTIVE]; - day_view->colors[E_DAY_VIEW_COLOR_BG_SELECTED] = style->base[GTK_STATE_SELECTED]; - day_view->colors[E_DAY_VIEW_COLOR_BG_SELECTED_UNFOCUSSED] = style->bg[GTK_STATE_SELECTED]; - day_view->colors[E_DAY_VIEW_COLOR_BG_GRID] = style->dark[GTK_STATE_NORMAL]; day_view->colors[E_DAY_VIEW_COLOR_BG_MULTIDAY_TODAY] = get_today_background (day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING]); - day_view->colors[E_DAY_VIEW_COLOR_BG_TOP_CANVAS] = style->dark[GTK_STATE_NORMAL]; - day_view->colors[E_DAY_VIEW_COLOR_BG_TOP_CANVAS_SELECTED] = style->bg[GTK_STATE_SELECTED]; - day_view->colors[E_DAY_VIEW_COLOR_BG_TOP_CANVAS_GRID] = style->light[GTK_STATE_NORMAL]; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR] = style->base[GTK_STATE_SELECTED]; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND] = style->base[GTK_STATE_NORMAL]; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER] = style->dark[GTK_STATE_NORMAL]; - day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND] = style->bg[GTK_STATE_ACTIVE]; - day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BORDER] = style->dark[GTK_STATE_NORMAL]; - day_view->colors[E_DAY_VIEW_COLOR_MARCUS_BAINS_LINE] = style->dark[GTK_STATE_PRELIGHT]; + + bg_bg.red = 0.5; + bg_bg.green = 1.0; + bg_bg.blue = 1.0; + + e_rgba_to_color (&bg_bg, &day_view->colors[E_DAY_VIEW_COLOR_MARCUS_BAINS_LINE]); } static void @@ -2734,8 +2749,6 @@ e_day_view_recalc_cell_sizes (EDayView *day_view) gint pango_width; gint days_shown; - g_return_if_fail (gtk_widget_get_style (GTK_WIDGET (day_view)) != NULL); - days_shown = e_day_view_get_days_shown (day_view); gtk_widget_get_allocation (day_view->main_canvas, &allocation); @@ -5657,12 +5670,9 @@ e_day_view_reshape_long_event (EDayView *day_view, } if (!event->canvas_item) { - GtkWidget *widget; GdkColor color; - widget = (GtkWidget *) day_view; - - color = e_day_view_get_text_color (day_view, event, widget); + color = e_day_view_get_text_color (day_view, event); event->canvas_item = gnome_canvas_item_new ( @@ -5845,12 +5855,9 @@ e_day_view_reshape_day_event (EDayView *day_view, } if (!event->canvas_item) { - GtkWidget *widget; GdkColor color; - widget = (GtkWidget *) day_view; - - color = e_day_view_get_text_color (day_view, event, widget); + color = e_day_view_get_text_color (day_view, event); event->canvas_item = gnome_canvas_item_new ( GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->main_canvas)->root), diff --git a/calendar/gui/e-meeting-time-sel.c b/calendar/gui/e-meeting-time-sel.c index 3caf71795d..bdc404765d 100644 --- a/calendar/gui/e-meeting-time-sel.c +++ b/calendar/gui/e-meeting-time-sel.c @@ -105,8 +105,7 @@ static void e_meeting_time_selector_autopick_menu_detacher (GtkWidget *widget, GtkMenu *menu); static void e_meeting_time_selector_realize (GtkWidget *widget); static void e_meeting_time_selector_unrealize (GtkWidget *widget); -static void e_meeting_time_selector_style_set (GtkWidget *widget, - GtkStyle *previous_style); +static void e_meeting_time_selector_style_updated (GtkWidget *widget); static gint e_meeting_time_selector_draw (GtkWidget *widget, cairo_t *cr); static void e_meeting_time_selector_draw_shadow (EMeetingTimeSelector *mts, cairo_t *cr); static void e_meeting_time_selector_hadjustment_changed (GtkAdjustment *adjustment, @@ -291,7 +290,7 @@ e_meeting_time_selector_class_init (EMeetingTimeSelectorClass *class) widget_class = GTK_WIDGET_CLASS (class); widget_class->realize = e_meeting_time_selector_realize; widget_class->unrealize = e_meeting_time_selector_unrealize; - widget_class->style_set = e_meeting_time_selector_style_set; + widget_class->style_updated = e_meeting_time_selector_style_updated; widget_class->draw = e_meeting_time_selector_draw; g_object_class_install_property ( @@ -1072,17 +1071,15 @@ style_change_idle_func (EMeetingTimeSelector *mts) GtkWidget *widget; gint hour, max_hour_width; /*int maxheight; */ - PangoFontDescription *font_desc; PangoContext *pango_context; PangoFontMetrics *font_metrics; PangoLayout *layout; /* Set up Pango prerequisites */ widget = GTK_WIDGET (mts); - font_desc = gtk_widget_get_style (widget)->font_desc; pango_context = gtk_widget_get_pango_context (widget); font_metrics = pango_context_get_metrics ( - pango_context, font_desc, + pango_context, NULL, pango_context_get_language (pango_context)); layout = pango_layout_new (pango_context); @@ -1140,13 +1137,12 @@ style_change_idle_func (EMeetingTimeSelector *mts) } static void -e_meeting_time_selector_style_set (GtkWidget *widget, - GtkStyle *previous_style) +e_meeting_time_selector_style_updated (GtkWidget *widget) { EMeetingTimeSelector *mts = E_MEETING_TIME_SELECTOR (widget); - if (GTK_WIDGET_CLASS (e_meeting_time_selector_parent_class)->style_set) - (*GTK_WIDGET_CLASS (e_meeting_time_selector_parent_class)->style_set)(widget, previous_style); + if (GTK_WIDGET_CLASS (e_meeting_time_selector_parent_class)->style_updated) + (*GTK_WIDGET_CLASS (e_meeting_time_selector_parent_class)->style_updated) (widget); if (!mts->style_change_idle_id) mts->style_change_idle_id = g_idle_add ( diff --git a/calendar/gui/e-meeting-time-sel.h b/calendar/gui/e-meeting-time-sel.h index ca726bc00c..20c5f0ca9f 100644 --- a/calendar/gui/e-meeting-time-sel.h +++ b/calendar/gui/e-meeting-time-sel.h @@ -69,7 +69,7 @@ G_BEGIN_DECLS /* This is used to specify the format used when displaying the dates. * The abbreviated format is like 'Sun 12/9/99'. * The short format is like '12/9/99'. - * The actual format used is determined in e_meeting_time_selector_style_set (), + * The actual format used is determined in e_meeting_time_selector_style_updated (), * once we know the font being used. */ typedef enum diff --git a/calendar/gui/e-memo-table.c b/calendar/gui/e-memo-table.c index 092ea379f2..146a63bf43 100644 --- a/calendar/gui/e-memo-table.c +++ b/calendar/gui/e-memo-table.c @@ -455,7 +455,7 @@ memo_table_query_tooltip (GtkWidget *widget, ECalModelComponent *comp_data; gint row = -1, col = -1; GtkWidget *box, *l, *w; - GtkStyle *style = gtk_widget_get_default_style (); + GdkRGBA sel_bg, sel_fg, norm_bg, norm_text; gchar *tmp; const gchar *str; GString *tmp2; @@ -499,6 +499,11 @@ memo_table_query_tooltip (GtkWidget *widget, return FALSE; } + e_utils_get_theme_color (widget, "theme_selected_bg_color", E_UTILS_DEFAULT_THEME_SELECTED_BG_COLOR, &sel_bg); + e_utils_get_theme_color (widget, "theme_selected_fg_color", E_UTILS_DEFAULT_THEME_SELECTED_FG_COLOR, &sel_fg); + e_utils_get_theme_color (widget, "theme_bg_color", E_UTILS_DEFAULT_THEME_BG_COLOR, &norm_bg); + e_utils_get_theme_color (widget, "theme_text_color", E_UTILS_DEFAULT_THEME_TEXT_COLOR, &norm_text); + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); str = e_calendar_view_get_icalcomponent_summary ( @@ -517,8 +522,8 @@ memo_table_query_tooltip (GtkWidget *widget, gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5); w = gtk_event_box_new (); - gtk_widget_modify_bg (w, GTK_STATE_NORMAL, &(style->bg[GTK_STATE_SELECTED])); - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_SELECTED])); + gtk_widget_override_background_color (w, GTK_STATE_FLAG_NORMAL, &sel_bg); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &sel_fg); gtk_container_add (GTK_CONTAINER (w), l); gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0); g_free (tmp); @@ -528,7 +533,7 @@ memo_table_query_tooltip (GtkWidget *widget, free_text = FALSE; w = gtk_event_box_new (); - gtk_widget_modify_bg (w, GTK_STATE_NORMAL, &(style->bg[GTK_STATE_NORMAL])); + gtk_widget_override_background_color (w, GTK_STATE_FLAG_NORMAL, &norm_bg); l = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (w), l); @@ -559,7 +564,7 @@ memo_table_query_tooltip (GtkWidget *widget, gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0); g_free (tmp); - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_NORMAL])); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text); } e_cal_component_get_dtstart (new_comp, &dtstart); @@ -623,7 +628,7 @@ memo_table_query_tooltip (GtkWidget *widget, gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0); - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_NORMAL])); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text); } g_string_free (tmp2, TRUE); @@ -653,7 +658,7 @@ memo_table_query_tooltip (GtkWidget *widget, gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0); - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_NORMAL])); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text); } g_string_free (tmp2, TRUE); diff --git a/calendar/gui/e-task-table.c b/calendar/gui/e-task-table.c index 0370997c32..036d64305b 100644 --- a/calendar/gui/e-task-table.c +++ b/calendar/gui/e-task-table.c @@ -756,7 +756,7 @@ task_table_query_tooltip (GtkWidget *widget, ECalModelComponent *comp_data; gint row = -1, col = -1; GtkWidget *box, *l, *w; - GtkStyle *style = gtk_widget_get_default_style (); + GdkRGBA sel_bg, sel_fg, norm_bg, norm_text; gchar *tmp; const gchar *str; GString *tmp2; @@ -801,6 +801,11 @@ task_table_query_tooltip (GtkWidget *widget, return FALSE; } + e_utils_get_theme_color (widget, "theme_selected_bg_color", E_UTILS_DEFAULT_THEME_SELECTED_BG_COLOR, &sel_bg); + e_utils_get_theme_color (widget, "theme_selected_fg_color", E_UTILS_DEFAULT_THEME_SELECTED_FG_COLOR, &sel_fg); + e_utils_get_theme_color (widget, "theme_bg_color", E_UTILS_DEFAULT_THEME_BG_COLOR, &norm_bg); + e_utils_get_theme_color (widget, "theme_text_color", E_UTILS_DEFAULT_THEME_TEXT_COLOR, &norm_text); + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); str = e_calendar_view_get_icalcomponent_summary ( @@ -819,8 +824,8 @@ task_table_query_tooltip (GtkWidget *widget, gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5); w = gtk_event_box_new (); - gtk_widget_modify_bg (w, GTK_STATE_NORMAL, &(style->bg[GTK_STATE_SELECTED])); - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_SELECTED])); + gtk_widget_override_background_color (w, GTK_STATE_FLAG_NORMAL, &sel_bg); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &sel_fg); gtk_container_add (GTK_CONTAINER (w), l); gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0); g_free (tmp); @@ -830,7 +835,7 @@ task_table_query_tooltip (GtkWidget *widget, free_text = FALSE; w = gtk_event_box_new (); - gtk_widget_modify_bg (w, GTK_STATE_NORMAL, &(style->bg[GTK_STATE_NORMAL])); + gtk_widget_override_background_color (w, GTK_STATE_FLAG_NORMAL, &norm_bg); l = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (w), l); @@ -859,7 +864,7 @@ task_table_query_tooltip (GtkWidget *widget, gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0); g_free (tmp); - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_NORMAL])); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text); } e_cal_component_get_dtstart (new_comp, &dtstart); @@ -921,7 +926,7 @@ task_table_query_tooltip (GtkWidget *widget, gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0); - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_NORMAL])); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text); } g_string_free (tmp2, TRUE); @@ -939,7 +944,7 @@ task_table_query_tooltip (GtkWidget *widget, g_free (tmp); tmp = NULL; - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_NORMAL])); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text); } tmp2 = g_string_new (""); @@ -965,7 +970,7 @@ task_table_query_tooltip (GtkWidget *widget, gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (w), l, FALSE, FALSE, 0); - gtk_widget_modify_fg (l, GTK_STATE_NORMAL, &(style->text[GTK_STATE_NORMAL])); + gtk_widget_override_color (l, GTK_STATE_FLAG_NORMAL, &norm_text); } g_string_free (tmp2, TRUE); diff --git a/calendar/gui/e-week-view-event-item.c b/calendar/gui/e-week-view-event-item.c index 481daff2e3..59358ca6e0 100644 --- a/calendar/gui/e-week-view-event-item.c +++ b/calendar/gui/e-week-view-event-item.c @@ -295,6 +295,7 @@ week_view_event_item_button_release (EWeekViewEventItem *event_item, static void week_view_draw_time (EWeekView *week_view, + GdkColor bg_color, cairo_t *cr, gint time_x, gint time_y, @@ -302,24 +303,38 @@ week_view_draw_time (EWeekView *week_view, gint minute) { ECalModel *model; - GtkStyle *style; gint hour_to_display, suffix_width; gint time_y_normal_font, time_y_small_font; const gchar *suffix; gchar buffer[128]; PangoLayout *layout; 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)) { + color.red = 0.0; + color.green = 0.0; + color.blue = 0.0; + } else { + color.red = 65535.0f; + color.green = 65535.0f; + color.blue = 65535.0f; + } cairo_save (cr); model = e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)); - style = gtk_widget_get_style (GTK_WIDGET (week_view)); small_font_desc = week_view->small_font_desc; - gdk_cairo_set_source_color (cr, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_TEXT]); + gdk_cairo_set_source_color (cr, &color); layout = gtk_widget_create_pango_layout (GTK_WIDGET (week_view), NULL); + pango_context = gtk_widget_create_pango_context (GTK_WIDGET (week_view)); time_y_normal_font = time_y_small_font = time_y; if (small_font_desc) @@ -330,6 +345,10 @@ week_view_draw_time (EWeekView *week_view, &suffix, &suffix_width); if (week_view->use_small_font && week_view->small_font_desc) { + PangoFontDescription *font_desc; + + font_desc = pango_font_description_copy (pango_context_get_font_description (pango_context)); + g_snprintf ( buffer, sizeof (buffer), "%2i:%02i", hour_to_display, minute); @@ -362,7 +381,7 @@ week_view_draw_time (EWeekView *week_view, time_y_small_font); pango_cairo_show_layout (cr, layout); - pango_layout_set_font_description (layout, style->font_desc); + pango_layout_set_font_description (layout, font_desc); time_x += week_view->small_digit_width * 2; @@ -376,6 +395,8 @@ week_view_draw_time (EWeekView *week_view, time_y_normal_font); pango_cairo_show_layout (cr, layout); } + + pango_font_description_free (font_desc); } else { /* Draw the start time in one go. */ g_snprintf ( @@ -398,6 +419,7 @@ week_view_draw_time (EWeekView *week_view, } } + g_object_unref (pango_context); g_object_unref (layout); cairo_restore (cr); @@ -895,7 +917,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item, if (draw_start) { week_view_draw_time ( - week_view, cr, time_x, + week_view, bg_color, cr, time_x, time_y, start_hour, start_minute); time_x += time_width; } @@ -903,7 +925,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, cr, time_x, + week_view, bg_color, cr, time_x, time_y, end_hour, end_minute); time_x += time_width; } @@ -1058,7 +1080,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item, cairo_clip (cr); week_view_draw_time ( - week_view, cr, time_x, + week_view, bg_color, cr, time_x, time_y, start_hour, start_minute); cairo_restore (cr); @@ -1086,7 +1108,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, cr, time_x, + week_view, bg_color, 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-main-item.c b/calendar/gui/e-week-view-main-item.c index b766a370dc..69caa624e9 100644 --- a/calendar/gui/e-week-view-main-item.c +++ b/calendar/gui/e-week-view-main-item.c @@ -61,7 +61,6 @@ week_view_main_item_draw_day (EWeekViewMainItem *main_item, { EWeekView *week_view; ECalModel *model; - GtkStyle *style; gint right_edge, bottom_edge, date_width, date_x, line_y; gboolean show_day_name, show_month_name, selected; gchar buffer[128], *format_string; @@ -77,13 +76,12 @@ week_view_main_item_draw_day (EWeekViewMainItem *main_item, week_view = e_week_view_main_item_get_week_view (main_item); model = e_calendar_view_get_model (E_CALENDAR_VIEW (week_view)); - style = gtk_widget_get_style (GTK_WIDGET (week_view)); multi_week_view = e_week_view_get_multi_week_view (week_view); /* Set up Pango prerequisites */ - font_desc = pango_font_description_copy (style->font_desc); pango_context = gtk_widget_get_pango_context (GTK_WIDGET (week_view)); + font_desc = pango_font_description_copy (pango_context_get_font_description (pango_context)); font_metrics = pango_context_get_metrics ( pango_context, font_desc, pango_context_get_language (pango_context)); diff --git a/calendar/gui/e-week-view-titles-item.c b/calendar/gui/e-week-view-titles-item.c index a03e7a3448..23a41be879 100644 --- a/calendar/gui/e-week-view-titles-item.c +++ b/calendar/gui/e-week-view-titles-item.c @@ -126,7 +126,7 @@ week_view_titles_item_draw (GnomeCanvasItem *canvas_item, { EWeekViewTitlesItem *titles_item; EWeekView *week_view; - GtkStyle *style; + GdkRGBA bg_bg, light_bg, dark_bg; gint col_width, col, date_width, date_x; gchar buffer[128]; GtkAllocation allocation; @@ -147,18 +147,21 @@ week_view_titles_item_draw (GnomeCanvasItem *canvas_item, gtk_widget_get_allocation ( GTK_WIDGET (canvas_item->canvas), &allocation); - style = gtk_widget_get_style (GTK_WIDGET (week_view)); + e_utils_get_theme_color (GTK_WIDGET (week_view), "theme_bg_color", E_UTILS_DEFAULT_THEME_BG_COLOR, &bg_bg); + e_utils_shade_color (&bg_bg, &dark_bg, E_UTILS_DARKNESS_MULT); + e_utils_shade_color (&bg_bg, &light_bg, E_UTILS_LIGHTNESS_MULT); + layout = gtk_widget_create_pango_layout (GTK_WIDGET (week_view), NULL); /* Draw the shadow around the dates. */ - gdk_cairo_set_source_color (cr, &style->light[GTK_STATE_NORMAL]); + gdk_cairo_set_source_rgba (cr, &light_bg); cairo_move_to (cr, 1.5 - x, 1.5 - y); cairo_rel_line_to (cr, allocation.width - 1, 0); cairo_move_to (cr, 1.5 - x, 2.5 - y); cairo_rel_line_to (cr, 0, allocation.height - 1); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &style->dark[GTK_STATE_NORMAL]); + gdk_cairo_set_source_rgba (cr, &dark_bg); cairo_rectangle (cr, 0.5 - x, 0.5 - y, allocation.width - 1, allocation.height); cairo_stroke (cr); @@ -213,12 +216,12 @@ week_view_titles_item_draw (GnomeCanvasItem *canvas_item, /* Draw the lines down the left and right of the date cols. */ if (col != 0) { - gdk_cairo_set_source_color (cr, &style->light[GTK_STATE_NORMAL]); + gdk_cairo_set_source_rgba (cr, &light_bg); cairo_move_to (cr, week_view->col_offsets[col] - x + 0.5, 4.5 - y); cairo_rel_line_to (cr, 0, allocation.height - 8); cairo_stroke (cr); - gdk_cairo_set_source_color (cr, &style->dark[GTK_STATE_NORMAL]); + gdk_cairo_set_source_rgba (cr, &dark_bg); cairo_move_to (cr, week_view->col_offsets[col] - x - 0.5, 4.5 - y); cairo_rel_line_to (cr, 0, allocation.height - 8); cairo_stroke (cr); diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index 93d40cdb35..317a78cb29 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -111,7 +111,7 @@ typedef struct { ECalModelComponent *comp_data; } AddEventData; -static void e_week_view_set_colors (EWeekView *week_view, GtkWidget *widget); +static void e_week_view_set_colors (EWeekView *week_view); static void e_week_view_recalc_cell_sizes (EWeekView *week_view); static gboolean e_week_view_get_next_tab_event (EWeekView *week_view, GtkDirectionType direction, @@ -768,6 +768,7 @@ week_view_constructed (GObject *object) EWeekView *week_view; ECalModel *model; ECalendarView *calendar_view; + PangoContext *pango_context; /* Chain up to parent's constructed() method. */ G_OBJECT_CLASS (e_week_view_parent_class)->constructed (object); @@ -776,6 +777,13 @@ week_view_constructed (GObject *object) calendar_view = E_CALENDAR_VIEW (object); model = e_calendar_view_get_model (calendar_view); + pango_context = gtk_widget_get_pango_context (GTK_WIDGET (week_view)); + g_warn_if_fail (pango_context != NULL); + week_view->small_font_desc = pango_font_description_copy (pango_context_get_font_description (pango_context)); + pango_font_description_set_size ( + week_view->small_font_desc, + E_WEEK_VIEW_SMALL_FONT_PTSIZE * PANGO_SCALE); + e_week_view_recalc_display_start_day (E_WEEK_VIEW (object)); week_view->priv->notify_week_start_day_id = e_signal_connect_notify_swapped ( @@ -814,7 +822,7 @@ week_view_realize (GtkWidget *widget) week_view = E_WEEK_VIEW (widget); /* Allocate the colors. */ - e_week_view_set_colors (week_view, widget); + e_week_view_set_colors (week_view); /* Create the pixmaps. */ week_view->reminder_icon = @@ -851,12 +859,44 @@ week_view_unrealize (GtkWidget *widget) (*GTK_WIDGET_CLASS (e_week_view_parent_class)->unrealize)(widget); } +static GdkColor +e_week_view_get_text_color (EWeekView *week_view, + EWeekViewEvent *event) +{ + GdkColor color; + guint16 red, green, blue; + gdouble cc = 65535.0; + + 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) && 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)) { + color.red = 0.0; + color.green = 0.0; + color.blue = 0.0; + } else { + color.red = 65535.0f; + color.green = 65535.0f; + color.blue = 65535.0f; + } + + return color; +} + static void -week_view_style_set (GtkWidget *widget, - GtkStyle *previous_style) +week_view_style_updated (GtkWidget *widget) { EWeekView *week_view; - GtkStyle *style; gint day, day_width, max_day_width, max_abbr_day_width; gint month, month_width, max_month_width, max_abbr_month_width; gint span_num; @@ -867,30 +907,39 @@ week_view_style_set (GtkWidget *widget, PangoLayout *layout; EWeekViewEventSpan *span; - if (GTK_WIDGET_CLASS (e_week_view_parent_class)->style_set) - (*GTK_WIDGET_CLASS (e_week_view_parent_class)->style_set)(widget, previous_style); + if (GTK_WIDGET_CLASS (e_week_view_parent_class)->style_updated) + (*GTK_WIDGET_CLASS (e_week_view_parent_class)->style_updated) (widget); week_view = E_WEEK_VIEW (widget); - style = gtk_widget_get_style (widget); - e_week_view_set_colors (week_view, widget); + e_week_view_set_colors (week_view); if (week_view->spans) { - for (span_num = 0; span_num < week_view->spans->len; - span_num++) { - span = &g_array_index (week_view->spans, - EWeekViewEventSpan, span_num); - if (span->text_item) { - gnome_canvas_item_set ( - span->text_item, - "fill_color_gdk", &style->text[GTK_STATE_NORMAL], - NULL); + for (span_num = 0; span_num < week_view->spans->len; span_num++) { + span = &g_array_index (week_view->spans, EWeekViewEventSpan, span_num); + if (span->text_item && span->background_item) { + gint event_num = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (span->background_item), "event-num")); + EWeekViewEvent *event = NULL; + + if (is_array_index_in_bounds (week_view->events, event_num)) + event = &g_array_index (week_view->events, EWeekViewEvent, event_num); + + if (event) { + GdkColor text_color; + + text_color = e_week_view_get_text_color (week_view, event); + + gnome_canvas_item_set ( + span->text_item, + "fill_color_gdk", &text_color, + NULL); + } } } } /* Set up Pango prerequisites */ - font_desc = style->font_desc; pango_context = gtk_widget_get_pango_context (widget); + font_desc = pango_font_description_copy (pango_context_get_font_description (pango_context)); font_metrics = pango_context_get_metrics ( pango_context, font_desc, pango_context_get_language (pango_context)); @@ -955,7 +1004,7 @@ week_view_style_set (GtkWidget *widget, if (week_view->small_font_desc) { pango_layout_set_font_description (layout, week_view->small_font_desc); week_view->small_digit_width = get_digit_width (layout); - pango_layout_set_font_description (layout, style->font_desc); + pango_layout_set_font_description (layout, font_desc); } week_view->max_day_width = max_day_width; week_view->max_abbr_day_width = max_abbr_day_width; @@ -971,6 +1020,7 @@ week_view_style_set (GtkWidget *widget, g_object_unref (layout); pango_font_metrics_unref (font_metrics); + pango_font_description_free (font_desc); } static void @@ -1432,7 +1482,7 @@ e_week_view_class_init (EWeekViewClass *class) widget_class = GTK_WIDGET_CLASS (class); widget_class->realize = week_view_realize; widget_class->unrealize = week_view_unrealize; - widget_class->style_set = week_view_style_set; + widget_class->style_updated = week_view_style_updated; widget_class->size_allocate = week_view_size_allocate; widget_class->focus_in_event = week_view_focus_in; widget_class->focus_out_event = week_view_focus_out; @@ -1533,14 +1583,9 @@ e_week_view_init (EWeekView *week_view) week_view->last_edited_comp_string = NULL; - /* Create the small font. */ + /* Create the small font in constructed. */ week_view->use_small_font = TRUE; - - week_view->small_font_desc = - pango_font_description_copy (gtk_widget_get_style (GTK_WIDGET (week_view))->font_desc); - pango_font_description_set_size ( - week_view->small_font_desc, - E_WEEK_VIEW_SMALL_FONT_PTSIZE * PANGO_SCALE); + week_view->small_font_desc = NULL; /* String to use in 12-hour time format for times in the morning. */ week_view->am_string = _("am"); @@ -1685,57 +1730,37 @@ color_inc (GdkColor c, } static void -e_week_view_set_colors (EWeekView *week_view, - GtkWidget *widget) +e_week_view_set_colors (EWeekView *week_view) { - GtkStyle *style; - - style = gtk_widget_get_style (widget); - - week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS] = style->base[GTK_STATE_INSENSITIVE]; - week_view->colors[E_WEEK_VIEW_COLOR_ODD_MONTHS] = style->base[GTK_STATE_NORMAL]; - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND] = style->base[GTK_STATE_NORMAL]; - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER] = style->dark[GTK_STATE_NORMAL]; - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_TEXT] = style->text[GTK_STATE_NORMAL]; - week_view->colors[E_WEEK_VIEW_COLOR_GRID] = style->dark[GTK_STATE_NORMAL]; - week_view->colors[E_WEEK_VIEW_COLOR_SELECTED] = style->base[GTK_STATE_SELECTED]; - week_view->colors[E_WEEK_VIEW_COLOR_SELECTED_UNFOCUSSED] = style->bg[GTK_STATE_SELECTED]; - week_view->colors[E_WEEK_VIEW_COLOR_DATES] = style->text[GTK_STATE_NORMAL]; - week_view->colors[E_WEEK_VIEW_COLOR_DATES_SELECTED] = style->text[GTK_STATE_SELECTED]; - week_view->colors[E_WEEK_VIEW_COLOR_TODAY] = style->base[GTK_STATE_SELECTED]; + GtkWidget *widget = GTK_WIDGET (week_view); + GdkRGBA base_bg, bg_bg, text_fg, selected_bg, selected_fg, unfocused_selected_bg, dark_bg, light_bg; + + e_utils_get_theme_color (widget, "theme_base_color", E_UTILS_DEFAULT_THEME_BASE_COLOR, &base_bg); + e_utils_get_theme_color (widget, "theme_bg_color", E_UTILS_DEFAULT_THEME_BG_COLOR, &bg_bg); + e_utils_get_theme_color (widget, "theme_text_color", E_UTILS_DEFAULT_THEME_TEXT_COLOR, &text_fg); + e_utils_get_theme_color (widget, "theme_selected_bg_color", E_UTILS_DEFAULT_THEME_SELECTED_BG_COLOR, &selected_bg); + e_utils_get_theme_color (widget, "theme_selected_fg_color", E_UTILS_DEFAULT_THEME_SELECTED_FG_COLOR, &selected_fg); + e_utils_get_theme_color (widget, "theme_unfocused_selected_bg_color,theme_selected_bg_color", E_UTILS_DEFAULT_THEME_UNFOCUSED_SELECTED_BG_COLOR, &unfocused_selected_bg); + + e_utils_shade_color (&bg_bg, &dark_bg, E_UTILS_DARKNESS_MULT); + e_utils_shade_color (&bg_bg, &light_bg, E_UTILS_LIGHTNESS_MULT); + + e_rgba_to_color (&bg_bg, &week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS]); + e_rgba_to_color (&base_bg, &week_view->colors[E_WEEK_VIEW_COLOR_ODD_MONTHS]); + e_rgba_to_color (&base_bg, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); + e_rgba_to_color (&dark_bg, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER]); + e_rgba_to_color (&text_fg, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_TEXT]); + e_rgba_to_color (&dark_bg, &week_view->colors[E_WEEK_VIEW_COLOR_GRID]); + e_rgba_to_color (&selected_bg, &week_view->colors[E_WEEK_VIEW_COLOR_SELECTED]); + e_rgba_to_color (&unfocused_selected_bg, &week_view->colors[E_WEEK_VIEW_COLOR_SELECTED_UNFOCUSSED]); + e_rgba_to_color (&text_fg, &week_view->colors[E_WEEK_VIEW_COLOR_DATES]); + e_rgba_to_color (&selected_fg, &week_view->colors[E_WEEK_VIEW_COLOR_DATES_SELECTED]); + e_rgba_to_color (&selected_bg, &week_view->colors[E_WEEK_VIEW_COLOR_TODAY]); + week_view->colors[E_WEEK_VIEW_COLOR_TODAY_BACKGROUND] = get_today_background (week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); week_view->colors[E_WEEK_VIEW_COLOR_MONTH_NONWORKING_DAY] = color_inc (week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS], -0x0A0A); } -static GdkColor -e_week_view_get_text_color (EWeekView *week_view, - EWeekViewEvent *event, - GtkWidget *widget) -{ - GtkStyle *style; - GdkColor bg_color; - guint16 red, green, blue; - gdouble cc = 65535.0; - - 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) && 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)) { - red = bg_color.red; - green = bg_color.green; - blue = bg_color.blue; - } - - style = gtk_widget_get_style (widget); - - if ((red / cc > 0.7) || (green / cc > 0.7) || (blue / cc > 0.7)) - return style->black; - else - return style->white; -} - static void e_week_view_recalc_cell_sizes (EWeekView *week_view) { @@ -1743,9 +1768,7 @@ e_week_view_recalc_cell_sizes (EWeekView *week_view) gint row, col; GtkAllocation allocation; GtkWidget *widget; - GtkStyle *style; gint width, height, time_width; - PangoFontDescription *font_desc; PangoContext *pango_context; PangoFontMetrics *font_metrics; @@ -1795,18 +1818,14 @@ e_week_view_recalc_cell_sizes (EWeekView *week_view) - week_view->row_offsets[row]; } - /* If the font hasn't been set yet just return. */ widget = GTK_WIDGET (week_view); - style = gtk_widget_get_style (widget); - if (!style) - return; - font_desc = style->font_desc; - if (!font_desc) - return; pango_context = gtk_widget_get_pango_context (widget); + if (!pango_context) + return; + font_metrics = pango_context_get_metrics ( - pango_context, font_desc, + pango_context, NULL, pango_context_get_language (pango_context)); /* Calculate the number of rows of events in each cell, for the large @@ -3377,7 +3396,6 @@ e_week_view_reshape_event_span (EWeekView *week_view, gdouble text_x, text_y, text_w, text_h; gchar *text, *end_of_line; gint line_len, text_width; - PangoFontDescription *font_desc; PangoContext *pango_context; PangoFontMetrics *font_metrics; PangoLayout *layout; @@ -3421,10 +3439,9 @@ e_week_view_reshape_event_span (EWeekView *week_view, } /* Set up Pango prerequisites */ - font_desc = gtk_widget_get_style (GTK_WIDGET (week_view))->font_desc; pango_context = gtk_widget_get_pango_context (GTK_WIDGET (week_view)); font_metrics = pango_context_get_metrics ( - pango_context, font_desc, + pango_context, NULL, pango_context_get_language (pango_context)); layout = pango_layout_new (pango_context); @@ -3475,13 +3492,10 @@ e_week_view_reshape_event_span (EWeekView *week_view, /* Create the text item if necessary. */ if (!span->text_item) { const gchar *summary; - GtkWidget *widget; GdkColor color; gboolean free_text = FALSE; - widget = (GtkWidget *) week_view; - - color = e_week_view_get_text_color (week_view, event, widget); + color = e_week_view_get_text_color (week_view, event); summary = get_comp_summary (event->comp_data->client, event->comp_data->icalcomp, &free_text); span->text_item = diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h index 3c773e2f7f..ee67592b4d 100644 --- a/calendar/gui/e-week-view.h +++ b/calendar/gui/e-week-view.h @@ -227,7 +227,7 @@ struct _EWeekView { PangoFontDescription *small_font_desc; /* The widths of various pieces of text, used to determine which of - * several date formats to display, set in e_week_view_style_set (). */ + * several date formats to display, set in e_week_view_style_updated (). */ gint space_width; /* One space character ' '. */ gint colon_width; /* Size of ':' in the font. */ gint slash_width; /* Size of '/' in the font. */ diff --git a/calendar/gui/e-weekday-chooser.c b/calendar/gui/e-weekday-chooser.c index 90216821c3..3e4d1b7480 100644 --- a/calendar/gui/e-weekday-chooser.c +++ b/calendar/gui/e-weekday-chooser.c @@ -75,25 +75,21 @@ G_DEFINE_TYPE_WITH_CODE ( static void colorize_items (EWeekdayChooser *chooser) { - GdkColor *outline, *focus_outline; - GdkColor *fill, *sel_fill; - GdkColor *text_fill, *sel_text_fill; - GtkStateType state; - GtkStyle *style; + GdkColor outline, focus_outline; + GdkColor fill, sel_fill; + GdkColor text_fill, sel_text_fill; GDateWeekday weekday; + GtkWidget *widget; gint ii; - state = gtk_widget_get_state (GTK_WIDGET (chooser)); - style = gtk_widget_get_style (GTK_WIDGET (chooser)); + widget = GTK_WIDGET (chooser); - outline = &style->fg[state]; - focus_outline = &style->bg[state]; - - fill = &style->base[state]; - text_fill = &style->fg[state]; - - sel_fill = &style->bg[GTK_STATE_SELECTED]; - sel_text_fill = &style->fg[GTK_STATE_SELECTED]; + e_utils_get_theme_color_color (widget, "theme_base_color", E_UTILS_DEFAULT_THEME_BASE_COLOR, &outline); + e_utils_get_theme_color_color (widget, "theme_bg_color", E_UTILS_DEFAULT_THEME_BG_COLOR, &focus_outline); + e_utils_get_theme_color_color (widget, "theme_base_color", E_UTILS_DEFAULT_THEME_BASE_COLOR, &fill); + e_utils_get_theme_color_color (widget, "theme_fg_color", E_UTILS_DEFAULT_THEME_FG_COLOR, &text_fill); + e_utils_get_theme_color_color (widget, "theme_selected_bg_color", E_UTILS_DEFAULT_THEME_SELECTED_BG_COLOR, &sel_fill); + e_utils_get_theme_color_color (widget, "theme_selected_fg_color", E_UTILS_DEFAULT_THEME_SELECTED_FG_COLOR, &sel_text_fill); weekday = e_weekday_chooser_get_week_start_day (chooser); @@ -101,17 +97,17 @@ colorize_items (EWeekdayChooser *chooser) GdkColor *f, *t, *o; if (chooser->priv->selected_weekdays[weekday]) { - f = sel_fill; - t = sel_text_fill; + f = &sel_fill; + t = &sel_text_fill; } else { - f = fill; - t = text_fill; + f = &fill; + t = &text_fill; } if (weekday == chooser->priv->focus_day) - o = focus_outline; + o = &focus_outline; else - o = outline; + o = &outline; gnome_canvas_item_set ( chooser->priv->boxes[ii], @@ -247,14 +243,12 @@ weekday_chooser_size_allocate (GtkWidget *widget, } static void -weekday_chooser_style_set (GtkWidget *widget, - GtkStyle *previous_style) +weekday_chooser_style_updated (GtkWidget *widget) { GtkWidgetClass *widget_class; EWeekdayChooser *chooser; EWeekdayChooserPrivate *priv; gint max_width; - PangoFontDescription *font_desc; PangoContext *pango_context; PangoFontMetrics *font_metrics; PangoLayout *layout; @@ -264,10 +258,9 @@ weekday_chooser_style_set (GtkWidget *widget, priv = chooser->priv; /* Set up Pango prerequisites */ - font_desc = gtk_widget_get_style (widget)->font_desc; pango_context = gtk_widget_get_pango_context (widget); font_metrics = pango_context_get_metrics ( - pango_context, font_desc, + pango_context, NULL, pango_context_get_language (pango_context)); layout = pango_layout_new (pango_context); @@ -296,9 +289,9 @@ weekday_chooser_style_set (GtkWidget *widget, g_object_unref (layout); pango_font_metrics_unref (font_metrics); - /* Chain up to parent's style_set() method. */ + /* Chain up to parent's style_updated() method. */ widget_class = GTK_WIDGET_CLASS (e_weekday_chooser_parent_class); - widget_class->style_set (widget, previous_style); + widget_class->style_updated (widget); } static void @@ -372,7 +365,7 @@ e_weekday_chooser_class_init (EWeekdayChooserClass *class) widget_class = GTK_WIDGET_CLASS (class); widget_class->realize = weekday_chooser_realize; widget_class->size_allocate = weekday_chooser_size_allocate; - widget_class->style_set = weekday_chooser_style_set; + widget_class->style_updated = weekday_chooser_style_updated; widget_class->get_preferred_height = weekday_chooser_get_preferred_height; widget_class->get_preferred_width = weekday_chooser_get_preferred_width; widget_class->focus = weekday_chooser_focus; |