# HG changeset patch # User Mark Doliner # Date 1205699869 0 # Node ID b5af505a7b024ab6b79ef3d20f5de794cbfcfe21 # Parent 3225c99785b8125bf85e5878c397be5bc44dae8c# Parent ed786719b10a06372ac42538a05171d28ef0c784 merge of '0caa39824f21f7f7dd7abf1462fbc769730120de' and '6777479a003186b7b7e2e499eea0522c541b7a37' diff -r 3225c99785b8 -r b5af505a7b02 ChangeLog --- a/ChangeLog Sun Mar 16 20:36:52 2008 +0000 +++ b/ChangeLog Sun Mar 16 20:37:49 2008 +0000 @@ -24,6 +24,8 @@ * Fix for displaying channel & buddy names in conversation window when they have '&' in them * Some memory leak fixes, especially in the Text Replacement plugin + * Rectangular but non-square buddy icons have rounded corners in the buddy + list Finch: * Fix compiling with Glib older than 2.6 diff -r 3225c99785b8 -r b5af505a7b02 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Sun Mar 16 20:36:52 2008 +0000 +++ b/pidgin/gtkblist.c Sun Mar 16 20:37:49 2008 +0000 @@ -2498,6 +2498,7 @@ purple_buddy_icon_get_scale_size(&prpl_info->icon_spec, &scale_width, &scale_height); if (scaled || scale_height > 200 || scale_width > 200) { + GdkPixbuf *tmpbuf; float scale_size = scaled ? 32.0 : 200.0; if(scale_height > scale_width) { scale_width = scale_size * (double)scale_width / (double)scale_height; @@ -2506,12 +2507,17 @@ scale_height = scale_size * (double)scale_height / (double)scale_width; scale_width = scale_size; } - + /* scale & round before making square, so rectangular (but non-square) + * images get rounded corners too */ + tmpbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, scale_width, scale_height); + gdk_pixbuf_fill(tmpbuf, 0x00000000); + gdk_pixbuf_scale(buf, tmpbuf, 0, 0, scale_width, scale_height, 0, 0, (double)scale_width/(double)orig_width, (double)scale_height/(double)orig_height, GDK_INTERP_BILINEAR); + if (pidgin_gdk_pixbuf_is_opaque(tmpbuf)) + pidgin_gdk_pixbuf_make_round(tmpbuf); ret = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, scale_size, scale_size); gdk_pixbuf_fill(ret, 0x00000000); - gdk_pixbuf_scale(buf, ret, (scale_size-scale_width)/2, (scale_size-scale_height)/2, scale_width, scale_height, (scale_size-scale_width)/2, (scale_size-scale_height)/2, (double)scale_width/(double)orig_width, (double)scale_height/(double)orig_height, GDK_INTERP_BILINEAR); - if (pidgin_gdk_pixbuf_is_opaque(ret)) - pidgin_gdk_pixbuf_make_round(ret); + gdk_pixbuf_copy_area(tmpbuf, 0, 0, scale_width, scale_height, ret, (scale_size-scale_width)/2, (scale_size-scale_height)/2); + g_object_unref(G_OBJECT(tmpbuf)); } else { ret = gdk_pixbuf_scale_simple(buf,scale_width,scale_height, GDK_INTERP_BILINEAR); }