Mercurial > audlegacy
diff src/audacious/skin.c @ 4206:36338afdd736
skin_get_eq_spline_colors was rewritten without using pixmaps
author | Cristi Magherusan <majeru@atheme.org> |
---|---|
date | Mon, 21 Jan 2008 02:42:06 +0200 |
parents | bc51ab3fecd5 |
children | 41655c090c53 |
line wrap: on
line diff
--- a/src/audacious/skin.c Sun Jan 20 17:48:41 2008 +0200 +++ b/src/audacious/skin.c Mon Jan 21 02:42:06 2008 +0200 @@ -1830,16 +1830,14 @@ { gint i; GdkPixbuf *pixbuf; - GdkImage *img; SkinPixmap *eqmainpm; - GdkPixmap *pixmap; - GdkGC *gc; - + guchar* pixels,*p; + guint rowstride, n_channels; g_return_if_fail(skin != NULL); eqmainpm = &skin->pixmaps[SKIN_EQMAIN]; if (eqmainpm->pixbuf && - eqmainpm->current_width >= 116 && eqmainpm->current_height >= 313) + eqmainpm->current_width >= 116 && eqmainpm->current_height >= 313) pixbuf = eqmainpm->pixbuf; else return; @@ -1847,24 +1845,16 @@ if (!GDK_IS_PIXBUF(pixbuf)) return; - pixmap = gdk_pixmap_new(NULL, eqmainpm->current_width, eqmainpm->current_height, - gdk_rgb_get_visual()->depth); - gc = gdk_gc_new(pixmap); - gdk_draw_pixbuf(pixmap, gc, pixbuf, 0, 0, 0, 0, eqmainpm->current_width, eqmainpm->current_height, - GDK_RGB_DITHER_MAX, 0, 0); - - if (!(img = gdk_drawable_get_image(pixmap, 115, 294, 1, 19))) { - g_object_unref(gc); - g_object_unref(pixmap); - return; + pixels = gdk_pixbuf_get_pixels (pixbuf); + rowstride = gdk_pixbuf_get_rowstride (pixbuf); + n_channels = gdk_pixbuf_get_n_channels (pixbuf); + for (i = 0; i < 19; i++) + { + p = pixels + rowstride * (i + 294) + 115 * n_channels; + colors[i] = (p[0] << 16) | (p[1] << 8) | p[2]; + if(n_channels == 4) /* should we really treat the Alpha channel? */ + colors[i]= (colors[i] << 8) | p[3]; } - - for (i = 0; i < 19; i++) - colors[i] = gdk_image_get_pixel(img, 0, i); - - g_object_unref(img); - g_object_unref(gc); - g_object_unref(pixmap); }