Update for new capplet Update Name/Comment/Exec entries
2004-01-12 Rodney Dawes <dobey@ximian.com> * Makefile.am: Update for new capplet * background.desktop.in: Update Name/Comment/Exec entries * gnome-wp-capplet.[ch]: * gnome-wp-info.[ch]: * gnome-wp-item.[ch]: * gnome-wp-utils.[ch]: * gnome-wp-xml.[ch]: Add new capplet code to CVS
This commit is contained in:
parent
2865c350b6
commit
2e428e7746
14 changed files with 2662 additions and 14 deletions
162
capplets/background/gnome-wp-utils.c
Normal file
162
capplets/background/gnome-wp-utils.c
Normal file
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
* Authors: Rodney Dawes <dobey@ximian.com>
|
||||
*
|
||||
* Copyright 2003 Novell, Inc. (www.novell.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License
|
||||
* as published by the Free Software Foundation
|
||||
*
|
||||
* 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., 59 Temple Street #330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "gnome-wp-utils.h"
|
||||
|
||||
GdkPixbuf * gnome_wp_pixbuf_new_gradient (GtkOrientation orientation,
|
||||
GdkColor * c1,
|
||||
GdkColor * c2,
|
||||
gint width, gint height) {
|
||||
GdkPixbuf * pixbuf;
|
||||
gint i, j;
|
||||
gint dr, dg, db;
|
||||
gint gs1;
|
||||
gint vc = ((orientation == GTK_ORIENTATION_HORIZONTAL) || (c1 == c2));
|
||||
guchar * b, * row, * d;
|
||||
int rowstride;
|
||||
|
||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
|
||||
d = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
dr = c2->red - c1->red;
|
||||
dg = c2->green - c1->green;
|
||||
db = c2->blue - c1->blue;
|
||||
|
||||
gs1 = (orientation == GTK_ORIENTATION_VERTICAL) ? height - 1 : width - 1;
|
||||
|
||||
row = g_new (unsigned char, rowstride);
|
||||
|
||||
if (vc) {
|
||||
b = row;
|
||||
for (j = 0; j < width; j++) {
|
||||
*b++ = (c1->red + (j * dr) / gs1) >> 8;
|
||||
*b++ = (c1->green + (j * dg) / gs1) >> 8;
|
||||
*b++ = (c1->blue + (j * db) / gs1) >> 8;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < height; i++) {
|
||||
if (!vc) {
|
||||
unsigned char cr, cg, cb;
|
||||
cr = (c1->red + (i * dr) / gs1) >> 8;
|
||||
cg = (c1->green + (i * dg) / gs1) >> 8;
|
||||
cb = (c1->blue + (i * db) / gs1) >> 8;
|
||||
b = row;
|
||||
for (j = 0; j < width; j++) {
|
||||
*b++ = cr;
|
||||
*b++ = cg;
|
||||
*b++ = cb;
|
||||
}
|
||||
}
|
||||
memcpy (d, row, width * 3);
|
||||
d += rowstride;
|
||||
}
|
||||
g_free (row);
|
||||
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
GdkPixbuf * gnome_wp_pixbuf_new_solid (GdkColor * color,
|
||||
gint width, gint height) {
|
||||
GdkPixbuf * pixbuf;
|
||||
gint j, rowstride;
|
||||
guchar * b, * d, * row;
|
||||
|
||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
|
||||
d = gdk_pixbuf_get_pixels (pixbuf);
|
||||
rowstride = gdk_pixbuf_get_rowstride (pixbuf);
|
||||
|
||||
row = g_new (unsigned char, rowstride);
|
||||
|
||||
b = row;
|
||||
for (j = 0; j < width; j++) {
|
||||
*b++ = color->red >> 8;
|
||||
*b++ = color->green >> 8;
|
||||
*b++ = color->blue >> 8;
|
||||
}
|
||||
|
||||
for (j = 0; j < height; j++) {
|
||||
memcpy (d, row, width * 3);
|
||||
d += rowstride;
|
||||
}
|
||||
|
||||
g_free (row);
|
||||
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
GdkPixbuf * gnome_wp_pixbuf_tile (GdkPixbuf * src_pixbuf,
|
||||
GdkPixbuf * dest_pixbuf) {
|
||||
gdouble cx, cy;
|
||||
gdouble colorv;
|
||||
gint dwidth, dheight;
|
||||
gint swidth, sheight;
|
||||
guint alpha = 255;
|
||||
|
||||
if (dest_pixbuf == NULL) {
|
||||
return src_pixbuf;
|
||||
}
|
||||
|
||||
swidth = gdk_pixbuf_get_width (src_pixbuf);
|
||||
sheight = gdk_pixbuf_get_height (src_pixbuf);
|
||||
|
||||
dwidth = gdk_pixbuf_get_width (dest_pixbuf);
|
||||
dheight = gdk_pixbuf_get_height (dest_pixbuf);
|
||||
|
||||
for (cy = 0; cy < dheight; cy += sheight) {
|
||||
for (cx = 0; cx < dwidth; cx += swidth) {
|
||||
gdk_pixbuf_composite (src_pixbuf, dest_pixbuf, cx, cy,
|
||||
MIN (swidth, dwidth - cx),
|
||||
MIN (sheight, dheight - cy),
|
||||
cx, cy, 1.0, 1.0, GDK_INTERP_BILINEAR, alpha);
|
||||
}
|
||||
}
|
||||
|
||||
return dest_pixbuf;
|
||||
}
|
||||
|
||||
GdkPixbuf * gnome_wp_pixbuf_center (GdkPixbuf * src_pixbuf,
|
||||
GdkPixbuf * dest_pixbuf) {
|
||||
gdouble cx, cy;
|
||||
gdouble colorv;
|
||||
gint dwidth, dheight;
|
||||
gint swidth, sheight;
|
||||
guint alpha = 255;
|
||||
|
||||
if (dest_pixbuf == NULL) {
|
||||
return src_pixbuf;
|
||||
}
|
||||
|
||||
swidth = gdk_pixbuf_get_width (src_pixbuf);
|
||||
sheight = gdk_pixbuf_get_height (src_pixbuf);
|
||||
|
||||
dwidth = gdk_pixbuf_get_width (dest_pixbuf);
|
||||
dheight = gdk_pixbuf_get_height (dest_pixbuf);
|
||||
|
||||
cx = (dwidth - swidth) / 2;
|
||||
cy = (dheight - sheight) / 2;
|
||||
|
||||
gdk_pixbuf_composite (src_pixbuf, dest_pixbuf, cx, cy,
|
||||
swidth, sheight,
|
||||
cx, cy, 1.0, 1.0, GDK_INTERP_BILINEAR, alpha);
|
||||
return dest_pixbuf;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue