This is an automated email from the git hooks/post-receive script. eric pushed a commit to branch master in repository xfce/xfdesktop.
commit 5cb865ace179c43af9e0cf0559b4aced308b4ab3 Author: Eric Koegel <eric.koe...@gmail.com> Date: Wed Apr 19 08:54:34 2017 +0300 iconview: switch to drawing the icon labels with CSS When drawing the icon taxt we dynamically add the GTK_STYLE_CLASS_LABEL and set the label state based on whatever the icon state is (selected, active, or normal). --- src/Makefile.am | 4 +- src/gtkcairoblur.c | 287 ---------------------------------------------- src/gtkcairoblurprivate.h | 47 -------- src/xfdesktop-icon-view.c | 269 ++++--------------------------------------- 4 files changed, 26 insertions(+), 581 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 5e03975..53310aa 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -45,9 +45,7 @@ desktop_icon_sources = \ xfdesktop-window-icon.c \ xfdesktop-window-icon.h \ xfdesktop-window-icon-manager.c \ - xfdesktop-window-icon-manager.h \ - gtkcairoblur.c \ - gtkcairoblurprivate.h + xfdesktop-window-icon-manager.h desktop_file_icon_sources = \ xfdesktop-clipboard-manager.c \ diff --git a/src/gtkcairoblur.c b/src/gtkcairoblur.c deleted file mode 100644 index 2ad5eb8..0000000 --- a/src/gtkcairoblur.c +++ /dev/null @@ -1,287 +0,0 @@ -/* GTK - The GIMP Toolkit - * - * Copyright (C) 2014 Red Hat - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - * - * Written by: - * Jasper St. Pierre <jstpie...@mecheye.net> - * Owen Taylor <otay...@redhat.com> - */ - -/* - * All code in this file is based on Gtk+-3 code. - * Files: gtk/gtkcairoblur.c and gtk/gtkcssshadowvalue.c - */ - -#include "gtkcairoblurprivate.h" - -#include <math.h> -#include <string.h> - -/* This applies a single box blur pass to a horizontal range of pixels; - * since the box blur has the same weight for all pixels, we can - * implement an efficient sliding window algorithm where we add - * in pixels coming into the window from the right and remove - * them when they leave the windw to the left. - * - * d is the filter width; for even d shift indicates how the blurred - * result is aligned with the original - does ' x ' go to ' yy' (shift=1) - * or 'yy ' (shift=-1) - */ -static void -blur_xspan (guchar *row, - guchar *tmp_buffer, - int row_width, - int d, - int shift) -{ - int offset; - int sum = 0; - int i; - - if (d % 2 == 1) - offset = d / 2; - else - offset = (d - shift) / 2; - - /* All the conditionals in here look slow, but the branches will - * be well predicted and there are enough different possibilities - * that trying to write this as a series of unconditional loops - * is hard and not an obvious win. The main slow down here seems - * to be the integer division per pixel; one possible optimization - * would be to accumulate into two 16-bit integer buffers and - * only divide down after all three passes. (SSE parallel implementation - * of the divide step is possible.) - */ - for (i = -d + offset; i < row_width + offset; i++) - { - if (i >= 0 && i < row_width) - sum += row[i]; - - if (i >= offset) - { - if (i >= d) - sum -= row[i - d]; - - tmp_buffer[i - offset] = (sum + d / 2) / d; - } - } - - memcpy (row, tmp_buffer, row_width); -} - -static void -blur_rows (guchar *dst_buffer, - guchar *tmp_buffer, - int buffer_width, - int buffer_height, - int d) -{ - int i; - - for (i = 0; i < buffer_height; i++) - { - guchar *row = dst_buffer + i * buffer_width; - - /* We want to produce a symmetric blur that spreads a pixel - * equally far to the left and right. If d is odd that happens - * naturally, but for d even, we approximate by using a blur - * on either side and then a centered blur of size d + 1. - * (technique also from the SVG specification) - */ - if (d % 2 == 1) - { - blur_xspan (row, tmp_buffer, buffer_width, d, 0); - blur_xspan (row, tmp_buffer, buffer_width, d, 0); - blur_xspan (row, tmp_buffer, buffer_width, d, 0); - } - else - { - blur_xspan (row, tmp_buffer, buffer_width, d, 1); - blur_xspan (row, tmp_buffer, buffer_width, d, -1); - blur_xspan (row, tmp_buffer, buffer_width, d + 1, 0); - } - } -} - -/* Swaps width and height. - */ -static void -flip_buffer (guchar *dst_buffer, - guchar *src_buffer, - int width, - int height) -{ - /* Working in blocks increases cache efficiency, compared to reading - * or writing an entire column at once - */ -#define BLOCK_SIZE 16 - - int i0, j0; - - for (i0 = 0; i0 < width; i0 += BLOCK_SIZE) - for (j0 = 0; j0 < height; j0 += BLOCK_SIZE) - { - int max_j = MIN(j0 + BLOCK_SIZE, height); - int max_i = MIN(i0 + BLOCK_SIZE, width); - int i, j; - - for (i = i0; i < max_i; i++) - for (j = j0; j < max_j; j++) - dst_buffer[i * height + j] = src_buffer[j * width + i]; - } -#undef BLOCK_SIZE -} - -static void -_boxblur (guchar *buffer, - int width, - int height, - int radius) -{ - guchar *flipped_buffer; - - flipped_buffer = g_malloc (width * height); - - /* Step 1: swap rows and columns */ - flip_buffer (flipped_buffer, buffer, width, height); - - /* Step 2: blur rows (really columns) */ - blur_rows (flipped_buffer, buffer, height, width, radius); - - /* Step 3: swap rows and columns */ - flip_buffer (buffer, flipped_buffer, height, width); - - /* Step 4: blur rows */ - blur_rows (buffer, flipped_buffer, width, height, radius); - - g_free (flipped_buffer); -} - -static const cairo_user_data_key_t original_cr_key; - -cairo_t * -gtk_css_shadow_value_start_drawing (cairo_t *cr, gdouble radius) -{ - cairo_rectangle_int_t clip_rect; - cairo_surface_t *surface; - cairo_t *blur_cr; - gdouble clip_radius; - - gdk_cairo_get_clip_rectangle (cr, &clip_rect); - - clip_radius = _gtk_cairo_blur_compute_pixels (radius); - - /* Create a larger surface to center the blur. */ - surface = cairo_image_surface_create (CAIRO_FORMAT_A8, - clip_rect.width + 2 * clip_radius, - clip_rect.height + 2 * clip_radius); - cairo_surface_set_device_offset (surface, clip_radius - clip_rect.x, clip_radius - clip_rect.y); - blur_cr = cairo_create (surface); - cairo_set_user_data (blur_cr, &original_cr_key, cairo_reference (cr), (cairo_destroy_func_t) cairo_destroy); - - if (cairo_has_current_point (cr)) - { - double x, y; - - cairo_get_current_point (cr, &x, &y); - cairo_move_to (blur_cr, x, y); - } - - return blur_cr; -} - -cairo_t * -gtk_css_shadow_value_finish_drawing (cairo_t *cr, gdouble radius, GdkColor *color) -{ - cairo_t *original_cr; - cairo_surface_t *surface; - - original_cr = cairo_get_user_data (cr, &original_cr_key); - - /* Blur the surface. */ - surface = cairo_get_target (cr); - - _gtk_cairo_blur_surface (surface, radius); - - gdk_cairo_set_source_color(original_cr, color); - cairo_mask_surface (original_cr, surface, 0, 0); - - cairo_destroy (cr); - cairo_surface_destroy (surface); - - return original_cr; -} - -/* - * _gtk_cairo_blur_surface: - * @surface: a cairo image surface. - * @radius: the blur radius. - * - * Blurs the cairo image surface at the given radius. - */ -void -_gtk_cairo_blur_surface (cairo_surface_t* surface, - double radius_d) -{ - cairo_format_t format; - int radius = radius_d; - - g_return_if_fail (surface != NULL); - g_return_if_fail (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE); - - format = cairo_image_surface_get_format (surface); - g_return_if_fail (format == CAIRO_FORMAT_A8); - - if (radius == 0) - return; - - /* Before we mess with the surface, execute any pending drawing. */ - cairo_surface_flush (surface); - - _boxblur (cairo_image_surface_get_data (surface), - cairo_image_surface_get_stride (surface), - cairo_image_surface_get_height (surface), - radius); - - /* Inform cairo we altered the surface contents. */ - cairo_surface_mark_dirty (surface); -} - -/* - * _gtk_cairo_blur_compute_pixels: - * @radius: the radius to compute the pixels for - * - * Computes the number of pixels necessary to extend an image in one - * direction to hold the image with shadow. - * - * This is just the number of pixels added by the blur radius, shadow - * offset and spread are not included. - * - * Much of this, the 3 * sqrt(2 * pi) / 4, is the known value for - * approximating a Gaussian using box blurs. This yields quite a good - * approximation for a Gaussian. Then we multiply this by 1.5 since our - * code wants the radius of the entire triple-box-blur kernel instead of - * the diameter of an individual box blur. For more details, see: - * http://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement - * https://bugzilla.mozilla.org/show_bug.cgi?id=590039#c19 - */ -#define GAUSSIAN_SCALE_FACTOR ((3.0 * sqrt(2 * G_PI) / 4) * 1.5) - -int -_gtk_cairo_blur_compute_pixels (double radius) -{ - return floor (radius * GAUSSIAN_SCALE_FACTOR + 0.5); -} diff --git a/src/gtkcairoblurprivate.h b/src/gtkcairoblurprivate.h deleted file mode 100644 index 7bfb770..0000000 --- a/src/gtkcairoblurprivate.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2012 Canonical Ltd - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, - * MA 02110-1301, USA. - * - * Authored by Andrea Cimitan <andrea.cimi...@canonical.com> - * Original code from Mirco Mueller <mirco.muel...@canonical.com> - * - */ - -#ifndef _GTK_CAIRO_BLUR_H -#define _GTK_CAIRO_BLUR_H - -#include <gdk/gdk.h> -#include <glib.h> -#include <cairo.h> - -G_BEGIN_DECLS - -cairo_t *gtk_css_shadow_value_start_drawing (cairo_t *cr, - gdouble radius); - -cairo_t *gtk_css_shadow_value_finish_drawing (cairo_t *cr, - gdouble radius, - GdkColor *color); - -void _gtk_cairo_blur_surface (cairo_surface_t *surface, - double radius); - -int _gtk_cairo_blur_compute_pixels (double radius); - -G_END_DECLS - -#endif /* _GTK_CAIRO_BLUR_H */ diff --git a/src/xfdesktop-icon-view.c b/src/xfdesktop-icon-view.c index b30b055..387046d 100644 --- a/src/xfdesktop-icon-view.c +++ b/src/xfdesktop-icon-view.c @@ -48,7 +48,6 @@ #include "xfce-desktop.h" #include "xfdesktop-volume-icon.h" #include "xfdesktop-common.h" -#include "gtkcairoblurprivate.h" #include <libwnck/libwnck.h> #include <libxfce4ui/libxfce4ui.h> @@ -180,14 +179,6 @@ struct _XfdesktopIconViewPrivate guchar label_alpha; guchar selected_label_alpha; - gchar shadow_x_offset; - gchar shadow_y_offset; - GdkColor *shadow_color; - gchar selected_shadow_x_offset; - gchar selected_shadow_y_offset; - GdkColor *selected_shadow_color; - gchar shadow_blur_radius; - gint cell_padding; gint cell_spacing; gdouble label_radius; @@ -532,55 +523,6 @@ xfdesktop_icon_view_class_init(XfdesktopIconViewClass *klass) G_PARAM_READABLE)); gtk_widget_class_install_style_property(widget_class, - g_param_spec_char("shadow-x-offset", - "Shadow X offset", - "Shadow X offset for label text", - G_MININT8, G_MAXINT8, 0, - G_PARAM_READABLE)); - - gtk_widget_class_install_style_property(widget_class, - g_param_spec_char("shadow-y-offset", - "Shadow Y offset", - "Shadow Y offset for label text", - G_MININT8, G_MAXINT8, 0, - G_PARAM_READABLE)); - - gtk_widget_class_install_style_property(widget_class, - g_param_spec_char("selected-shadow-x-offset", - "Selected shadow X offset", - "Shadow X offset for selected label text", - G_MININT8, G_MAXINT8, 0, - G_PARAM_READABLE)); - - gtk_widget_class_install_style_property(widget_class, - g_param_spec_char("selected-shadow-y-offset", - "Selected shadow Y offset", - "Shadow Y offset for selected label text", - G_MININT8, G_MAXINT8, 0, - G_PARAM_READABLE)); - - gtk_widget_class_install_style_property(widget_class, - g_param_spec_char("shadow-blur-radius", - "shadow blur radius", - "Blur radius for label text", - G_MININT8, G_MAXINT8, 0, - G_PARAM_READABLE)); - - gtk_widget_class_install_style_property(widget_class, - g_param_spec_boxed("shadow-color", - "Shadow color", - "Color for label text shadows", - GDK_TYPE_COLOR, - G_PARAM_READABLE)); - - gtk_widget_class_install_style_property(widget_class, - g_param_spec_boxed("selected-shadow-color", - "Selected shadow color", - "Color for selected label text shadows", - GDK_TYPE_COLOR, - G_PARAM_READABLE)); - - gtk_widget_class_install_style_property(widget_class, g_param_spec_int("cell-spacing", "Cell spacing", "Spacing between desktop icon cells", @@ -1927,63 +1869,14 @@ xfdesktop_icon_view_style_updated(GtkWidget *widget) gtk_widget_style_get(GTK_WIDGET(icon_view), "label-alpha", &icon_view->priv->label_alpha, - "shadow-x-offset", &icon_view->priv->shadow_x_offset, - "shadow-y-offset", &icon_view->priv->shadow_y_offset, - "shadow-blur-radius", &icon_view->priv->shadow_blur_radius, - "shadow-color", &icon_view->priv->shadow_color, NULL); - icon_view->priv->shadow_extents = - (icon_view->priv->shadow_blur_radius > 1) ? - _gtk_cairo_blur_compute_pixels(icon_view->priv->shadow_blur_radius) : 0; - - /* default the shadow color to the inverse of the text color */ - if (!icon_view->priv->shadow_color) { - icon_view->priv->shadow_color = gdk_color_copy(>k_widget_get_style(widget)->fg[GTK_STATE_NORMAL]); - icon_view->priv->shadow_color->red ^= 0xffff; - icon_view->priv->shadow_color->green ^= 0xffff; - icon_view->priv->shadow_color->blue ^= 0xffff; - } - XF_DEBUG("label alpha is %d\n", (gint)(icon_view->priv->label_alpha)); - XF_DEBUG("shadow x offset is %d\n", (gint)(icon_view->priv->shadow_x_offset)); - XF_DEBUG("shadow y offset is %d\n", (gint)(icon_view->priv->shadow_y_offset)); -#if defined(DEBUG) && (DEBUG > 0) - { - gchar *color = gdk_color_to_string(icon_view->priv->shadow_color); - XF_DEBUG("shadow color is %s\n", color); - g_free(color); - } -#endif gtk_widget_style_get(GTK_WIDGET(icon_view), "selected-label-alpha", &icon_view->priv->selected_label_alpha, - "selected-shadow-x-offset", &icon_view->priv->selected_shadow_x_offset, - "selected-shadow-y-offset", &icon_view->priv->selected_shadow_y_offset, - "selected-shadow-color", &icon_view->priv->selected_shadow_color, NULL); - /* default the shadow color to the inverse of the text color */ - if (!icon_view->priv->selected_shadow_color) { - icon_view->priv->selected_shadow_color = gdk_color_copy(>k_widget_get_style(widget)->fg[GTK_STATE_SELECTED]); - icon_view->priv->selected_shadow_color->red ^= 0xffff; - icon_view->priv->selected_shadow_color->green ^= 0xffff; - icon_view->priv->selected_shadow_color->blue ^= 0xffff; - } - - XF_DEBUG("selected label alpha is %d\n", - (gint)(icon_view->priv->selected_label_alpha)); - XF_DEBUG("selected shadow x offset is %d\n", - (gint)(icon_view->priv->selected_shadow_x_offset)); - XF_DEBUG("selected shadow y offset is %d\n", - (gint)(icon_view->priv->selected_shadow_y_offset)); -#if defined(DEBUG) && (DEBUG > 0) - { - gchar *color = gdk_color_to_string(icon_view->priv->selected_shadow_color); - XF_DEBUG("shadow color is %s\n", color); - g_free(color); - } -#endif gtk_widget_style_get(widget, "cell-spacing", &icon_view->priv->cell_spacing, @@ -2007,15 +1900,6 @@ xfdesktop_icon_view_style_updated(GtkWidget *widget) } icon_view->priv->selection_box_alpha = DEFAULT_RUBBERBAND_ALPHA; - /* this is super lame */ - dummy = gtk_icon_view_new(); - gtk_widget_ensure_style(dummy); - gtk_widget_style_get(dummy, - "selection-box-color", &icon_view->priv->selection_box_color, - "selection-box-alpha", &icon_view->priv->selection_box_alpha, - NULL); - gtk_widget_destroy(dummy); - GTK_WIDGET_CLASS(xfdesktop_icon_view_parent_class)->style_updated(widget); /* do this after we're sure we have a style set */ @@ -2170,16 +2054,6 @@ xfdesktop_icon_view_unrealize(GtkWidget *widget) gdk_color_free(icon_view->priv->selection_box_color); icon_view->priv->selection_box_color = NULL; } - - if(icon_view->priv->shadow_color) { - gdk_color_free(icon_view->priv->shadow_color); - icon_view->priv->shadow_color = NULL; - } - - if(icon_view->priv->selected_shadow_color) { - gdk_color_free(icon_view->priv->selected_shadow_color); - icon_view->priv->selected_shadow_color = NULL; - } gtk_widget_set_window(widget, NULL); gtk_widget_set_realized(widget, FALSE); @@ -2881,67 +2755,6 @@ xfdesktop_icon_view_invalidate_icon_pixbuf(XfdesktopIconView *icon_view, } } -static void -xfdesktop_paint_rounded_box(XfdesktopIconView *icon_view, - GtkStateType state, - GdkRectangle *box_area, - GdkRectangle *expose_area, - cairo_t *cr) -{ - GdkRectangle intersection; - - if(gdk_rectangle_intersect(box_area, expose_area, &intersection)) { - cr = cairo_reference(cr); - GtkStyle *style = gtk_widget_get_style(GTK_WIDGET(icon_view)); - double alpha; - - if(state == GTK_STATE_NORMAL) - alpha = icon_view->priv->label_alpha / 255.; - else - alpha = icon_view->priv->selected_label_alpha / 255.; - - cairo_set_source_rgba(cr, style->base[state].red / 65535., - style->base[state].green / 65535., - style->base[state].blue / 65535., - alpha); - - /* restrict painting to expose area */ - gdk_cairo_rectangle(cr, expose_area); - cairo_clip(cr); - - if(LABEL_RADIUS < 0.1) - gdk_cairo_rectangle(cr, box_area); - else { - cairo_move_to(cr, box_area->x, box_area->y + LABEL_RADIUS); - cairo_arc(cr, box_area->x + LABEL_RADIUS, - box_area->y + LABEL_RADIUS, LABEL_RADIUS, - M_PI, 3.0*M_PI/2.0); - cairo_line_to(cr, box_area->x + box_area->width - LABEL_RADIUS, - box_area->y); - cairo_arc(cr, box_area->x + box_area->width - LABEL_RADIUS, - box_area->y + LABEL_RADIUS, LABEL_RADIUS, - 3.0+M_PI/2.0, 0.0); - cairo_line_to(cr, box_area->x + box_area->width, - box_area->y + box_area->height - LABEL_RADIUS); - cairo_arc(cr, box_area->x + box_area->width - LABEL_RADIUS, - box_area->y + box_area->height - LABEL_RADIUS, - LABEL_RADIUS, - 0.0, M_PI/2.0); - cairo_line_to(cr, box_area->x + LABEL_RADIUS, - box_area->y + box_area->height); - cairo_arc(cr, box_area->x + LABEL_RADIUS, - box_area->y + box_area->height - LABEL_RADIUS, - LABEL_RADIUS, - M_PI/2.0, M_PI); - cairo_close_path(cr); - } - - cairo_fill(cr); - - cairo_destroy(cr); - } -} - static gboolean xfdesktop_icon_view_calculate_icon_pixbuf_area(XfdesktopIconView *icon_view, XfdesktopIcon *icon, @@ -3012,10 +2825,10 @@ xfdesktop_icon_view_calculate_icon_text_area(XfdesktopIconView *icon_view, xfdesktop_icon_view_setup_pango_layout(icon_view, icon, playout); pango_layout_get_pixel_extents(playout, NULL, &prect); - text_area->x = prect.x - SHADOW_X_OFFSET; - text_area->y = prect.y - SHADOW_Y_OFFSET; - text_area->width = prect.width + 2 * SHADOW_X_OFFSET; - text_area->height = prect.height + 2 * SHADOW_Y_OFFSET; + text_area->x = prect.x; + text_area->y = prect.y; + text_area->width = prect.width + 2; + text_area->height = prect.height + 2; return TRUE; } @@ -3102,34 +2915,27 @@ xfdesktop_icon_view_draw_image(cairo_t *cr, GdkPixbuf *pix, GdkRectangle *rect) } static void -xfdesktop_icon_view_draw_text(cairo_t *cr, PangoLayout *playout, GdkRectangle *text_area, - GdkRectangle *box_area, gint x_offset, gint y_offset, - gint blur_radius, GdkColor *color) +xfdesktop_icon_view_draw_text(GtkWidget *icon_view, cairo_t *cr, + PangoLayout *playout, GdkRectangle *text_area, + GdkRectangle *box_area, GtkStateFlags state) { + GtkStyleContext *context; + cairo_save(cr); - /* Clip the cairo area to blur the minimum surface */ + /* Clip the cairo area */ gdk_cairo_rectangle(cr, box_area); cairo_clip(cr); - cairo_move_to(cr, - text_area->x + x_offset, - text_area->y + y_offset); + context = gtk_widget_get_style_context(icon_view); + gtk_style_context_save(context); + gtk_style_context_add_class(context, GTK_STYLE_CLASS_LABEL); + gtk_style_context_set_state (context, state); - if (blur_radius > 1) { - cr = gtk_css_shadow_value_start_drawing (cr, blur_radius); - pango_cairo_show_layout (cr, playout); - cairo_set_line_width(cr, 1); - cairo_set_line_join(cr, CAIRO_LINE_JOIN_BEVEL); - pango_cairo_layout_path(cr, playout); - cairo_stroke(cr); - cr = gtk_css_shadow_value_finish_drawing (cr, blur_radius, color); - } - else { - gdk_cairo_set_source_color(cr, color); - pango_cairo_show_layout(cr, playout); - } + gtk_render_background(context, cr, box_area->x, box_area->y, box_area->width, box_area->height); + gtk_render_layout(context, cr, text_area->x, text_area->y, playout); + gtk_style_context_restore(context); cairo_restore(cr); } @@ -3143,9 +2949,7 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view, PangoLayout *playout; GdkRectangle pixbuf_extents, text_extents, box_extents, total_extents; GdkRectangle intersection; - gint state; - gchar x_offset = 0, y_offset = 0; - GdkColor *sh_text_col = NULL; + GtkStateFlags state; #ifdef G_ENABLE_DEBUG gint16 row, col; #endif @@ -3175,17 +2979,17 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view, if(xfdesktop_icon_view_is_icon_selected(icon_view, icon)) { if(gtk_widget_has_focus(widget)) - state = GTK_STATE_SELECTED; + state = GTK_STATE_FLAG_SELECTED; else - state = GTK_STATE_ACTIVE; + state = GTK_STATE_FLAG_ACTIVE; } else - state = GTK_STATE_NORMAL; + state = GTK_STATE_FLAG_NORMAL; if(gdk_rectangle_intersect(area, &pixbuf_extents, &intersection)) { GdkPixbuf *pix = xfdesktop_icon_peek_pixbuf(icon, ICON_WIDTH, ICON_SIZE); GdkPixbuf *pix_free = NULL; - if(state != GTK_STATE_NORMAL) { + if(state != GTK_STATE_FLAG_NORMAL) { pix_free = exo_gdk_pixbuf_colorize(pix, >k_widget_get_style(widget)->base[state]); pix = pix_free; } @@ -3217,36 +3021,13 @@ xfdesktop_icon_view_paint_icon(XfdesktopIconView *icon_view, if(gdk_rectangle_intersect(area, &box_extents, &intersection) && icon_view->priv->font_size > 0) { - xfdesktop_paint_rounded_box(icon_view, state, &box_extents, area, cr); - - if (state == GTK_STATE_NORMAL) { - x_offset = icon_view->priv->shadow_x_offset; - y_offset = icon_view->priv->shadow_y_offset; - sh_text_col = icon_view->priv->shadow_color; - } else { - x_offset = icon_view->priv->selected_shadow_x_offset; - y_offset = icon_view->priv->selected_shadow_y_offset; - sh_text_col = icon_view->priv->selected_shadow_color; - } - - /* draw text shadow for the label text if an offset was defined */ - if(x_offset || y_offset || (icon_view->priv->shadow_blur_radius > 1)) { - /* Draw the shadow */ - xfdesktop_icon_view_draw_text(cr, playout, - &text_extents, - &box_extents, - x_offset, - y_offset, - icon_view->priv->shadow_blur_radius, - sh_text_col); - } - DBG("painting text at %dx%d+%d+%d", text_extents.width, text_extents.height, text_extents.x, text_extents.y); - gtk_render_layout(gtk_widget_get_style_context(widget), cr, - text_extents.x, text_extents.y, playout); + xfdesktop_icon_view_draw_text(GTK_WIDGET(icon_view), cr, playout, + &text_extents, &box_extents, + state); } -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits