--- xfdesktop.bak/src/xfdesktop-icon-view.c 2008-09-20 15:11:12.000000000 +0200 +++ xfdesktop/src/xfdesktop-icon-view.c 2008-09-25 08:25:55.000000000 +0200 @@ -150,6 +150,9 @@ struct _XfdesktopIconViewPrivate GdkPixbuf *rounded_frame; gint label_alpha; + gint active_label_alpha; + + gchar *label_shadow_color; #if !GTK_CHECK_VERSION(2, 12, 0) guint tip_show_id; @@ -360,8 +363,22 @@ xfdesktop_icon_view_class_init(Xfdesktop g_param_spec_int("label-alpha", "Label alpha", "Alpha value for the text label's background", + 0, 0, 0, + G_PARAM_READABLE)); + + gtk_widget_class_install_style_property(widget_class, + g_param_spec_int("active-label-alpha", + "Active icons label alpha", + "Alpha value for the text label's background for active icons", 0, 255, 155, G_PARAM_READABLE)); + + gtk_widget_class_install_style_property(widget_class, + g_param_spec_string("label-shadow-color", + "Active icons label text shadow color", + "Color for the text shadows of the icon labels", + "Black", + G_PARAM_READABLE)); xfdesktop_cell_highlight_quark = g_quark_from_static_string("xfdesktop-icon-view-cell-highlight"); } @@ -1376,7 +1393,19 @@ xfdesktop_icon_view_style_set(GtkWidget gtk_widget_style_get(GTK_WIDGET(icon_view), "label-alpha", &icon_view->priv->label_alpha, NULL); - DBG("label alpha is %d", icon_view->priv->label_alpha); + + gtk_widget_style_get(GTK_WIDGET(icon_view), + "active-label-alpha", &icon_view->priv->active_label_alpha, + NULL); + + gtk_widget_style_get(GTK_WIDGET(icon_view), + "label-shadow-color", &icon_view->priv->label_shadow_color, + NULL); + + + DBG("label alpha for icons in normal state is %d", icon_view->priv->label_alpha); + DBG("label alpha for active icons is %d", icon_view->priv->active_label_alpha); + DBG("label shadow color for active icons is %s", icon_view->priv->label_shadow_color); GTK_WIDGET_CLASS(xfdesktop_icon_view_parent_class)->style_set(widget, previous_style); @@ -1941,6 +1970,7 @@ xfdesktop_paint_rounded_box(XfdesktopIco GdkRectangle *expose_area) { GdkRectangle intersection; + guint alpha; /* make sure to undo this before returning */ text_area->x -= CORNER_ROUNDNESS; @@ -1963,11 +1993,17 @@ xfdesktop_paint_rounded_box(XfdesktopIco xfdesktop_clear_rounded_corners(box_pix, icon_view->priv->rounded_frame); + + if (state == GTK_STATE_NORMAL) + alpha = icon_view->priv->label_alpha; + else + alpha = icon_view->priv->active_label_alpha; + xfdesktop_multiply_pixbuf_rgba(box_pix, EEL_RGBA_COLOR_PACK(style->base[state].red >> 8, style->base[state].green >> 8, style->base[state].blue >> 8, - icon_view->priv->label_alpha)); + alpha)); gdk_draw_pixbuf(GDK_DRAWABLE(GTK_WIDGET(icon_view)->window), NULL, box_pix, intersection.x - text_area->x, @@ -2085,6 +2121,33 @@ xfdesktop_icon_view_paint_icon(Xfdesktop memcpy(&adj_area, area, sizeof(GdkRectangle)); xfdesktop_paint_rounded_box(icon_view, state, &text_area, &adj_area); + + /* draw text shadow for the text of "normal" icons if the + * label background is totally transparent */ + if ((state == GTK_STATE_NORMAL) && (!icon_view->priv->label_alpha)) { + GdkColor shadow_color; + GdkGC tmp_gc; + + /* if the color value could be parsed, go on */ + if (gdk_color_parse(icon_view->priv->label_shadow_color, + &shadow_color)) { + + /* save the original gc */ + tmp_gc = *(widget->style)->text_gc[state]; + + /* set the new background */ + gdk_gc_set_rgb_fg_color(widget->style->text_gc[state], &shadow_color); + + /* paint the shadow */ + gtk_paint_layout(widget->style, widget->window, state, TRUE, + &adj_area, widget, "label", text_area.x + 1 , + text_area.y + 1, playout); + + /* restore the original gc */ + *(widget->style)->text_gc[state] = tmp_gc; + } + } + gtk_paint_layout(widget->style, widget->window, state, FALSE, &adj_area, widget, "label", text_area.x, text_area.y, playout);