Mercurial > audlegacy
changeset 2185:c108a98794b1 trunk
[svn] - add pixbuf_effects.c, containing various routines to alter images used by the skinengine
author | nenolod |
---|---|
date | Wed, 20 Dec 2006 06:59:23 -0800 |
parents | 7d40f0a290b9 |
children | 7be793a34b48 |
files | ChangeLog audacious/Makefile audacious/pixbuf_effects.c audacious/util.h |
diffstat | 4 files changed, 100 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Dec 20 06:45:56 2006 -0800 +++ b/ChangeLog Wed Dec 20 06:59:23 2006 -0800 @@ -1,3 +1,13 @@ +2006-12-20 14:45:56 +0000 William Pitcock <nenolod@nenolod.net> + revision [3373] + - break out string-related functions from util.c + + trunk/audacious/Makefile | 3 + trunk/audacious/strings.c | 384 ++++++++++++++++++++++++++++++++++++++++++++++ + trunk/audacious/util.c | 317 ------------------------------------- + 3 files changed, 386 insertions(+), 318 deletions(-) + + 2006-12-20 13:45:04 +0000 William Pitcock <nenolod@nenolod.net> revision [3371] - fix list menu, reported by Joker
--- a/audacious/Makefile Wed Dec 20 06:45:56 2006 -0800 +++ b/audacious/Makefile Wed Dec 20 06:59:23 2006 -0800 @@ -76,7 +76,8 @@ iir_cfs.c \ iir_fpu.c \ signals.c \ - strings.c + strings.c \ + pixbuf_effects.c OBJECTS = ${SOURCES:.c=.o}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/audacious/pixbuf_effects.c Wed Dec 20 06:59:23 2006 -0800 @@ -0,0 +1,87 @@ +/* + * Audacious + * Copyright (c) 2006-2007 Audacious development team. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; under version 2 of the License. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <glib.h> + +#include "platform/smartinclude.h" +#include "util.h" + +#include <gdk-pixbuf/gdk-pixbuf.h> + +static GdkPixbuf * +create_new_pixbuf (GdkPixbuf *src) +{ + g_return_val_if_fail (gdk_pixbuf_get_colorspace (src) == GDK_COLORSPACE_RGB, NULL); + g_return_val_if_fail ((!gdk_pixbuf_get_has_alpha (src) + && gdk_pixbuf_get_n_channels (src) == 3) + || (gdk_pixbuf_get_has_alpha (src) + && gdk_pixbuf_get_n_channels (src) == 4), NULL); + + return gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src), + gdk_pixbuf_get_has_alpha (src), + gdk_pixbuf_get_bits_per_sample (src), + gdk_pixbuf_get_width (src), + gdk_pixbuf_get_height (src)); +} + +GdkPixbuf * +audacious_create_colorized_pixbuf (GdkPixbuf *src, + int red_value, + int green_value, + int blue_value) +{ + int i, j; + int width, height, has_alpha, src_row_stride, dst_row_stride; + guchar *target_pixels; + guchar *original_pixels; + guchar *pixsrc; + guchar *pixdest; + GdkPixbuf *dest; + + g_return_val_if_fail (gdk_pixbuf_get_colorspace (src) == GDK_COLORSPACE_RGB, NULL); + g_return_val_if_fail ((!gdk_pixbuf_get_has_alpha (src) + && gdk_pixbuf_get_n_channels (src) == 3) + || (gdk_pixbuf_get_has_alpha (src) + && gdk_pixbuf_get_n_channels (src) == 4), NULL); + g_return_val_if_fail (gdk_pixbuf_get_bits_per_sample (src) == 8, NULL); + + dest = create_new_pixbuf (src); + + has_alpha = gdk_pixbuf_get_has_alpha (src); + width = gdk_pixbuf_get_width (src); + height = gdk_pixbuf_get_height (src); + src_row_stride = gdk_pixbuf_get_rowstride (src); + dst_row_stride = gdk_pixbuf_get_rowstride (dest); + target_pixels = gdk_pixbuf_get_pixels (dest); + original_pixels = gdk_pixbuf_get_pixels (src); + + for (i = 0; i < height; i++) { + pixdest = target_pixels + i*dst_row_stride; + pixsrc = original_pixels + i*src_row_stride; + for (j = 0; j < width; j++) { + *pixdest++ = (*pixsrc++ * red_value) >> 8; + *pixdest++ = (*pixsrc++ * green_value) >> 8; + *pixdest++ = (*pixsrc++ * blue_value) >> 8; + if (has_alpha) { + *pixdest++ = *pixsrc++; + } + } + } + return dest; +} +