# HG changeset patch # User Nathan Walp # Date 1105169137 0 # Node ID 748aa3c6de369aa4cfca5904544f56c6b0fedc03 # Parent 1ac8f10ce68d80cc513d4f6f075a8c1bc932bd74 [gaim-migrate @ 11773] scaling for the buddy icons in the tooltips, and whatever else decided to sneak in on this commit committer: Tailor Script diff -r 1ac8f10ce68d -r 748aa3c6de36 src/buddyicon.c --- a/src/buddyicon.c Fri Jan 07 22:44:01 2005 +0000 +++ b/src/buddyicon.c Sat Jan 08 07:25:37 2005 +0000 @@ -451,3 +451,21 @@ { g_hash_table_destroy(account_cache); } + +void gaim_buddy_icon_get_scale_size(GaimBuddyIconSpec *spec, int *width, int *height) +{ + /* this should eventually get smarter about preserving the aspect + * ratio when scaling, but gimmie a break, I just woke up */ + if(spec && spec->scale_rules & GAIM_ICON_SCALE_DISPLAY) { + if(*width < spec->min_width) + *width = spec->min_width; + else if(*width > spec->max_width) + *width = spec->max_width; + + if(*height < spec->min_height) + *height = spec->min_height; + else if(*height > spec->max_height) + *height = spec->max_height; + } +} + diff -r 1ac8f10ce68d -r 748aa3c6de36 src/buddyicon.h --- a/src/buddyicon.h Fri Jan 07 22:44:01 2005 +0000 +++ b/src/buddyicon.h Sat Jan 08 07:25:37 2005 +0000 @@ -29,6 +29,7 @@ #include "account.h" #include "blist.h" +#include "prpl.h" struct _GaimBuddyIcon { @@ -240,4 +241,16 @@ /*@}*/ +/**************************************************************************/ +/** @name Buddy Icon Helper API */ +/**************************************************************************/ +/*@{*/ + +/** + * Gets display size for a buddy icon + */ +void gaim_buddy_icon_get_scale_size(GaimBuddyIconSpec *spec, int *width, int *height); + +/*@}*/ + #endif /* _GAIM_BUDDYICON_H_ */ diff -r 1ac8f10ce68d -r 748aa3c6de36 src/gtkblist.c --- a/src/gtkblist.c Fri Jan 07 22:44:01 2005 +0000 +++ b/src/gtkblist.c Sat Jan 08 07:25:37 2005 +0000 @@ -2066,7 +2066,7 @@ static GdkPixbuf *gaim_gtk_blist_get_buddy_icon(GaimBlistNode *node, gboolean scaled, gboolean greyed) { - GdkPixbuf *buf, *ret; + GdkPixbuf *buf, *ret = NULL; GdkPixbufLoader *loader; GaimBuddyIcon *icon; const char *data; @@ -2111,13 +2111,22 @@ if (scaled) { ret = gdk_pixbuf_scale_simple(buf,30,30, GDK_INTERP_BILINEAR); g_object_unref(G_OBJECT(buf)); - } else - ret = buf; - - return ret; + } else { + GaimAccount *account = gaim_buddy_get_account(buddy); + int scale_width, scale_height; + GaimPluginProtocolInfo *prpl_info = NULL; + + if(account && account->gc) + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); + + gaim_gtk_buddy_icon_get_scale_size(buf, prpl_info ? &prpl_info->icon_spec : NULL, &scale_width, &scale_height); + + ret = gdk_pixbuf_scale_simple(buf,scale_width,scale_height, GDK_INTERP_BILINEAR); + g_object_unref(G_OBJECT(buf)); + } } - return NULL; + return ret; } static void gaim_gtk_blist_paint_tip(GtkWidget *widget, GdkEventExpose *event, GaimBlistNode *node) diff -r 1ac8f10ce68d -r 748aa3c6de36 src/gtkconv.c --- a/src/gtkconv.c Fri Jan 07 22:44:01 2005 +0000 +++ b/src/gtkconv.c Sat Jan 08 07:25:37 2005 +0000 @@ -2353,33 +2353,6 @@ } } -static void -get_icon_scale_size(GdkPixbufAnimation *icon, GaimBuddyIconSpec *spec, int *width, int *height) -{ - *width = gdk_pixbuf_animation_get_width(icon); - *height = gdk_pixbuf_animation_get_height(icon); - - /* this should eventually get smarter about preserving the aspect - * ratio when scaling, but gimmie a break, I just woke up */ - if(spec && spec->scale_rules & GAIM_ICON_SCALE_DISPLAY) { - if(*width < spec->min_width) - *width = spec->min_width; - else if(*width > spec->max_width) - *width = spec->max_width; - - if(*height < spec->min_height) - *height = spec->min_height; - else if(*height > spec->max_height) - *height = spec->max_height; - } - - /* and now for some arbitrary sanity checks */ - if(*width > 100) - *width = 100; - if(*height > 100) - *height = 100; -} - static gboolean redraw_icon(gpointer data) { @@ -2410,7 +2383,7 @@ gdk_pixbuf_animation_iter_advance(gtkconv->u.im->iter, NULL); buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); - get_icon_scale_size(gtkconv->u.im->anim, prpl_info ? &prpl_info->icon_spec : + gaim_gtk_buddy_icon_get_scale_size(buf, prpl_info ? &prpl_info->icon_spec : NULL, &scale_width, &scale_height); /* this code is ugly, and scares me */ @@ -5443,7 +5416,7 @@ start_anim(NULL, conv); } - get_icon_scale_size(gtkconv->u.im->anim, prpl_info ? &prpl_info->icon_spec : + gaim_gtk_buddy_icon_get_scale_size(buf, prpl_info ? &prpl_info->icon_spec : NULL, &scale_width, &scale_height); scale = gdk_pixbuf_scale_simple(buf, MAX(gdk_pixbuf_get_width(buf) * scale_width / diff -r 1ac8f10ce68d -r 748aa3c6de36 src/gtkimhtml.c --- a/src/gtkimhtml.c Fri Jan 07 22:44:01 2005 +0000 +++ b/src/gtkimhtml.c Sat Jan 08 07:25:37 2005 +0000 @@ -2377,6 +2377,11 @@ * font-family * font-size * text-decoration: underline + * + * TODO: + * background-color + * font-style + * font-weight */ { gchar *style, *color, *background, *family, *size; diff -r 1ac8f10ce68d -r 748aa3c6de36 src/gtkutils.c --- a/src/gtkutils.c Fri Jan 07 22:44:01 2005 +0000 +++ b/src/gtkutils.c Sat Jan 08 07:25:37 2005 +0000 @@ -1603,3 +1603,17 @@ } g_list_free(files); } + +void gaim_gtk_buddy_icon_get_scale_size(GdkPixbuf *buf, GaimBuddyIconSpec *spec, int *width, int *height) +{ + *width = gdk_pixbuf_get_width(buf); + *height = gdk_pixbuf_get_height(buf); + + gaim_buddy_icon_get_scale_size(spec, width, height); + + /* and now for some arbitrary sanity checks */ + if(*width > 100) + *width = 100; + if(*height > 100) + *height = 100; +} diff -r 1ac8f10ce68d -r 748aa3c6de36 src/gtkutils.h --- a/src/gtkutils.h Fri Jan 07 22:44:01 2005 +0000 +++ b/src/gtkutils.h Sat Jan 08 07:25:37 2005 +0000 @@ -366,5 +366,10 @@ */ void gaim_dnd_file_manage(GtkSelectionData *sd, GaimAccount *account, const char *who); +/** + * Convenience wrapper for gaim_buddy_icon_get_scale_size + */ +void gaim_gtk_buddy_icon_get_scale_size(GdkPixbuf *buf, GaimBuddyIconSpec *spec, int *width, int *height); + #endif /* _GAIM_GTKUTILS_H_ */