Add some explanatory comments to bits of the code Fix the ratio

2004-02-24  Rodney Dawes  <dobey@ximian.com>

	* gnome-wp-item.c (gnome_wp_item_get_thumbnail): Add some explanatory
	comments to bits of the code
	Fix the ratio calculation to handle images of all sizes (#134541)
	Don't force tiling of square images
	Don't do _save_thumbnail () for the custom thumbnails
	If pixbuf is NULL, copy away bgpixbuf and return that instead
	* gnome-wp-utils.c (gnome_wp_tile_pixbuf):
	(gnome_wp_center_pixbuf): Return copied pixbufs

	Fixes #134541
This commit is contained in:
Rodney Dawes 2004-02-24 19:32:05 +00:00 committed by Rodney Dawes
parent cdfef1c131
commit 48c884fe25
3 changed files with 63 additions and 37 deletions

View file

@ -1,3 +1,16 @@
2004-02-24 Rodney Dawes <dobey@ximian.com>
* gnome-wp-item.c (gnome_wp_item_get_thumbnail): Add some explanatory
comments to bits of the code
Fix the ratio calculation to handle images of all sizes (#134541)
Don't force tiling of square images
Don't do _save_thumbnail () for the custom thumbnails
If pixbuf is NULL, copy away bgpixbuf and return that instead
* gnome-wp-utils.c (gnome_wp_tile_pixbuf):
(gnome_wp_center_pixbuf): Return copied pixbufs
Fixes #134541
2004-02-17 Rodney Dawes <dobey@ximian.com>
* gnome-background-properties.glade: Use untranslated strings for

View file

@ -53,11 +53,23 @@ GdkPixbuf * gnome_wp_item_get_thumbnail (GnomeWPItem * item,
GdkPixbuf * pixbuf, * bgpixbuf;
GdkPixbuf * scaled = NULL;
gint w, h, ratio;
gint bw, bh;
/*
Get the size of the screen and calculate our aspect ratio divisor
We do this, so that images are thumbnailed as they would look on
the screen in reality
*/
w = gdk_screen_get_width (gdk_screen_get_default ());
h = gdk_screen_get_height (gdk_screen_get_default ());
ratio = h / 96;
ratio = h / 48;
bw = w / ratio;
bh = h / ratio;
/*
Create the pixbuf for the background colors, which will show up for
oddly sized images, smaller images that are centered, or alpha images
*/
if (!strcmp (item->shade_type, "solid")) {
bgpixbuf = gnome_wp_pixbuf_new_solid (item->pcolor, w / ratio, h / ratio);
} else if (!strcmp (item->shade_type, "vertical-gradient")) {
@ -70,6 +82,12 @@ GdkPixbuf * gnome_wp_item_get_thumbnail (GnomeWPItem * item,
w / ratio, h / ratio);
}
/*
Load up the thumbnail image using the thumbnail spec
If the image doesn't exist, we create it
If we are creating the thumbnail for "No Wallpaper", then we just copy
the background colors pixbuf we created above, here
*/
if (item->fileinfo->thumburi != NULL &&
g_file_test (item->fileinfo->thumburi, G_FILE_TEST_EXISTS)) {
pixbuf = gdk_pixbuf_new_from_file (item->fileinfo->thumburi, NULL);
@ -87,49 +105,44 @@ GdkPixbuf * gnome_wp_item_get_thumbnail (GnomeWPItem * item,
if (pixbuf != NULL) {
w = gdk_pixbuf_get_width (pixbuf);
h = gdk_pixbuf_get_height (pixbuf);
ratio = h / 48;
if (ratio == 0)
/*
Handle images large and small. We default to 1, since images smaller
than 64x48 don't need to be scaled down, and the tiled thumbnails
will look correct for really small pattern images
*/
if (h >= 48)
ratio = h / 48;
else if (w >= 64)
ratio = w / 64;
else
ratio = 1;
if (ratio == 1)
ratio = 2;
scaled = gnome_thumbnail_scale_down_pixbuf (pixbuf, w / ratio, h / ratio);
scaled = gnome_thumbnail_scale_down_pixbuf (pixbuf,
w / ratio, h / ratio);
if (!strcmp (item->options, "wallpaper")) {
w = gdk_pixbuf_get_width (scaled);
h = gdk_pixbuf_get_height (scaled);
if (w == h) {
item->options = g_strdup ("wallpaper");
scaled = gnome_wp_pixbuf_tile (scaled, bgpixbuf);
gnome_thumbnail_factory_save_thumbnail (thumbs, scaled,
item->filename,
item->fileinfo->mtime);
} else if (!strcmp (item->options, "centered")) {
w = gdk_pixbuf_get_width (scaled);
h = gdk_pixbuf_get_height (scaled);
ratio = h / 48;
if (ratio == 1)
ratio = 2;
scaled = gnome_thumbnail_scale_down_pixbuf (scaled,
w / ratio, h / ratio);
}
/*
This is for alpha centered images like gnome-logo-transparent.jpg
It's an ugly hack, that can potentially be removed when round() or
something like it decides to work
We scale it down again so that it looks proper, instead of the off-
center look that seems to appear without this hack
*/
if (gdk_pixbuf_get_has_alpha (pixbuf) && (w > bw || h > bh))
scaled = gnome_thumbnail_scale_down_pixbuf (scaled, w / 2, h / 2);
if (!strcmp (item->options, "centered")) {
scaled = gnome_wp_pixbuf_center (scaled, bgpixbuf);
w = gdk_pixbuf_get_width (scaled);
h = gdk_pixbuf_get_height (scaled);
ratio = h / 48;
if (ratio == 1)
ratio = 2;
scaled = gnome_thumbnail_scale_down_pixbuf (scaled,
w / ratio, h / ratio);
}
}
} else {
scaled = gdk_pixbuf_copy (bgpixbuf);
}
g_object_unref (pixbuf);
g_object_unref (bgpixbuf);

View file

@ -112,7 +112,7 @@ GdkPixbuf * gnome_wp_pixbuf_tile (GdkPixbuf * src_pixbuf,
guint alpha = 255;
if (dest_pixbuf == NULL) {
return src_pixbuf;
return gdk_pixbuf_copy (src_pixbuf);
}
swidth = gdk_pixbuf_get_width (src_pixbuf);
@ -130,7 +130,7 @@ GdkPixbuf * gnome_wp_pixbuf_tile (GdkPixbuf * src_pixbuf,
}
}
return dest_pixbuf;
return gdk_pixbuf_copy (dest_pixbuf);
}
GdkPixbuf * gnome_wp_pixbuf_center (GdkPixbuf * src_pixbuf,
@ -141,7 +141,7 @@ GdkPixbuf * gnome_wp_pixbuf_center (GdkPixbuf * src_pixbuf,
guint alpha = 255;
if (dest_pixbuf == NULL) {
return src_pixbuf;
return gdk_pixbuf_copy (src_pixbuf);
}
swidth = gdk_pixbuf_get_width (src_pixbuf);
@ -156,6 +156,6 @@ GdkPixbuf * gnome_wp_pixbuf_center (GdkPixbuf * src_pixbuf,
gdk_pixbuf_composite (src_pixbuf, dest_pixbuf, cx, cy,
swidth, sheight,
cx, cy, 1.0, 1.0, GDK_INTERP_BILINEAR, alpha);
return dest_pixbuf;
return gdk_pixbuf_copy (dest_pixbuf);
}