# HG changeset patch # User Sean Egan # Date 1172482898 0 # Node ID 20225df32b7e97e4ffa714cda711e449beebfe24 # Parent dad514810a45440bd51e9bc5e017749a57db824d Change some old, busted status icon stuff to use the new hotness diff -r dad514810a45 -r 20225df32b7e pidgin/gtkblist.c --- a/pidgin/gtkblist.c Mon Feb 26 07:50:01 2007 +0000 +++ b/pidgin/gtkblist.c Mon Feb 26 09:41:38 2007 +0000 @@ -3919,7 +3919,7 @@ /* Create the icon */ if ((status_type = gaim_account_get_status_type_with_primitive(account, GAIM_STATUS_OFFLINE))) { - pixbuf = pidgin_create_prpl_icon_with_status(account, status_type, 0.5); + pixbuf = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL); if (pixbuf != NULL) { image = gtk_image_new_from_pixbuf(pixbuf); g_object_unref(pixbuf); @@ -6347,7 +6347,6 @@ GtkWidget *image = NULL; GaimConnection *gc = NULL; GaimAccount *account = NULL; - GaimStatus *status = NULL; GdkPixbuf *pixbuf = NULL; account = accounts->data; @@ -6359,8 +6358,7 @@ menuitem = gtk_image_menu_item_new_with_label(buf); accel_path_buf = g_strconcat(N_("/Accounts/"), buf, NULL); g_free(buf); - status = gaim_account_get_active_status(account); - pixbuf = pidgin_create_prpl_icon_with_status(account, gaim_status_get_type(status), 0.5); + pixbuf = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL); if (pixbuf != NULL) { if (!gaim_account_is_connected(account)) diff -r dad514810a45 -r 20225df32b7e pidgin/gtkdocklet.c --- a/pidgin/gtkdocklet.c Mon Feb 26 07:50:01 2007 +0000 +++ b/pidgin/gtkdocklet.c Mon Feb 26 09:41:38 2007 +0000 @@ -423,7 +423,7 @@ if (sf) g_signal_connect(G_OBJECT(menuitem), "activate", sf, data); - pixbuf = pidgin_create_gaim_icon_with_status(primitive, 0.5); + pixbuf = pidgin_create_status_icon(primitive, menu, PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL); image = gtk_image_new_from_pixbuf(pixbuf); g_object_unref(pixbuf); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); diff -r dad514810a45 -r 20225df32b7e pidgin/gtksavedstatuses.c --- a/pidgin/gtksavedstatuses.c Mon Feb 26 07:50:01 2007 +0000 +++ b/pidgin/gtksavedstatuses.c Mon Feb 26 09:41:38 2007 +0000 @@ -1538,7 +1538,7 @@ continue; id = gaim_status_type_get_id(status_type); - pixbuf = pidgin_create_prpl_icon_with_status(account, status_type, PIDGIN_PRPL_ICON_MEDIUM); + pixbuf = pidgin_create_status_icon(gaim_status_type_get_primitive(status_type), combo, PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL); name = gaim_status_type_get_name(status_type); gtk_list_store_append(dialog->model, &iter); @@ -1633,12 +1633,12 @@ gaim_savedstatus_get_title(saved_status_b)); } -static gboolean pidgin_status_menu_add_primitive(GtkListStore *model, GaimStatusPrimitive primitive, +static gboolean pidgin_status_menu_add_primitive(GtkListStore *model, GtkWidget *w, GaimStatusPrimitive primitive, GaimSavedStatus *current_status) { GtkTreeIter iter; gboolean currently_selected = FALSE; - GdkPixbuf *pixbuf = pidgin_create_gaim_icon_with_status(primitive, 0.5); + GdkPixbuf *pixbuf = pidgin_create_status_icon(primitive, w, PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, @@ -1672,19 +1672,19 @@ combobox = gtk_combo_box_new(); - if (pidgin_status_menu_add_primitive(model, GAIM_STATUS_AVAILABLE, current_status)) + if (pidgin_status_menu_add_primitive(model, combobox, GAIM_STATUS_AVAILABLE, current_status)) index = i; i++; - if (pidgin_status_menu_add_primitive(model, GAIM_STATUS_AWAY, current_status)) + if (pidgin_status_menu_add_primitive(model, combobox, GAIM_STATUS_AWAY, current_status)) index = i; i++; - if (pidgin_status_menu_add_primitive(model, GAIM_STATUS_INVISIBLE, current_status)) + if (pidgin_status_menu_add_primitive(model, combobox, GAIM_STATUS_INVISIBLE, current_status)) index = i; i++; - if (pidgin_status_menu_add_primitive(model, GAIM_STATUS_OFFLINE, current_status)) + if (pidgin_status_menu_add_primitive(model, combobox, GAIM_STATUS_OFFLINE, current_status)) index = i; i++; @@ -1696,8 +1696,8 @@ if (!gaim_savedstatus_is_transient(status)) { /* Get an appropriate status icon */ - pixbuf = pidgin_create_gaim_icon_with_status( - gaim_savedstatus_get_type(status), 0.5); + pixbuf = pidgin_create_status_icon(gaim_savedstatus_get_type(status), + combobox, PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL); /* Overlay a disk in the bottom left corner */ emblem = gtk_widget_render_icon(GTK_WIDGET(combobox), diff -r dad514810a45 -r 20225df32b7e pidgin/gtkutils.c --- a/pidgin/gtkutils.c Mon Feb 26 07:50:01 2007 +0000 +++ b/pidgin/gtkutils.c Mon Feb 26 09:41:38 2007 +0000 @@ -1552,6 +1552,31 @@ *height = 100; } +GdkPixbuf * pidgin_create_status_icon(GaimStatusPrimitive prim, GtkWidget *w, const char *size) +{ + GtkIconSize icon_size = gtk_icon_size_from_name(size); + GdkPixbuf *pixbuf = NULL; + + if (prim == GAIM_STATUS_UNAVAILABLE) + pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_BUSY, + icon_size, "GtkWidget"); + else if (prim == GAIM_STATUS_AWAY) + pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_AWAY, + icon_size, "GtkWidget"); + else if (prim == GAIM_STATUS_EXTENDED_AWAY) + pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_XA, + icon_size, "GtkWidget"); + else if (prim == GAIM_STATUS_OFFLINE) + pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_OFFLINE, + icon_size, "GtkWidget"); + else + pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_AVAILABLE, + icon_size, "GtkWidget"); + return pixbuf; + +} + + GdkPixbuf * pidgin_create_prpl_icon(GaimAccount *account, PidginPrplIconSize size) { @@ -1592,94 +1617,6 @@ return pixbuf; } -static GdkPixbuf * -overlay_status_onto_icon(GdkPixbuf *pixbuf, GaimStatusPrimitive primitive) -{ - const char *type_name; - char basename[256]; - char *filename; - GdkPixbuf *emblem; - - type_name = gaim_primitive_get_id_from_type(primitive); - - g_snprintf(basename, sizeof(basename), "%s.png", type_name); - filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", - "default", basename, NULL); - emblem = gdk_pixbuf_new_from_file(filename, NULL); - g_free(filename); - - if (emblem != NULL) { - int width, height, emblem_width, emblem_height; - int new_emblem_width, new_emblem_height; - - width = gdk_pixbuf_get_width(pixbuf); - height = gdk_pixbuf_get_height(pixbuf); - emblem_width = gdk_pixbuf_get_width(emblem); - emblem_height = gdk_pixbuf_get_height(emblem); - - /* - * Figure out how big to make the emblem. Normally the emblem - * will have half the width of the pixbuf. But we don't make - * an emblem any smaller than 10 pixels because it becomes - * unrecognizable, unless the width of the pixbuf is less than - * 10 pixels, in which case we make the emblem width the same - * as the pixbuf width. - */ - new_emblem_width = MAX(width / 2, MIN(width, 10)); - new_emblem_height = MAX(height / 2, MIN(height, 10)); - - /* Overlay emblem onto the bottom right corner of pixbuf */ - gdk_pixbuf_composite(emblem, pixbuf, - width - new_emblem_width, height - new_emblem_height, - new_emblem_width, new_emblem_height, - width - new_emblem_width, height - new_emblem_height, - (double)new_emblem_width / (double)emblem_width, - (double)new_emblem_height / (double)emblem_height, - GDK_INTERP_BILINEAR, - 255); - g_object_unref(emblem); - } - - return pixbuf; -} - -GdkPixbuf * -pidgin_create_prpl_icon_with_status(GaimAccount *account, GaimStatusType *status_type, double scale_factor) -{ - GdkPixbuf *pixbuf; - - pixbuf = pidgin_create_prpl_icon(account, scale_factor); - if (pixbuf == NULL) - return NULL; - - /* - * TODO: Let the prpl pick the emblem on a per status basis, - * and only use the primitive as a fallback? - */ - - return overlay_status_onto_icon(pixbuf, - gaim_status_type_get_primitive(status_type)); -} - -GdkPixbuf * -pidgin_create_gaim_icon_with_status(GaimStatusPrimitive primitive, double scale_factor) -{ - gchar *filename; - GdkPixbuf *orig, *pixbuf; - - filename = g_build_filename(DATADIR, "pixmaps", "gaim.png", NULL); - orig = gdk_pixbuf_new_from_file(filename, NULL); - g_free(filename); - if (orig == NULL) - return NULL; - - pixbuf = gdk_pixbuf_scale_simple(orig, 32*scale_factor, - 32*scale_factor, GDK_INTERP_BILINEAR); - g_object_unref(G_OBJECT(orig)); - - return overlay_status_onto_icon(pixbuf, primitive); -} - static void menu_action_cb(GtkMenuItem *item, gpointer object) { diff -r dad514810a45 -r 20225df32b7e pidgin/gtkutils.h --- a/pidgin/gtkutils.h Mon Feb 26 07:50:01 2007 +0000 +++ b/pidgin/gtkutils.h Mon Feb 26 09:41:38 2007 +0000 @@ -388,45 +388,14 @@ GdkPixbuf *pidgin_create_prpl_icon(GaimAccount *account, PidginPrplIconSize size); /** - * Create a protocol icon with the status emblem overlayed in - * the lower right corner. + * Creates a status icon for a given primitve * - * @param account The account. - * @param status_type The status type of the emblem to overlay. - * @param scale_factor The amount to scale to the original image. - * The default size is 32x32 pixels. A scale - * factor of 1 means no scaling will be done. - * A scale factor of 0.5 means the length - * and width will be 16 pixels each. - * - * @return A newly-created pixbuf with a reference count of 1, - * or NULL if any of several error conditions occurred: - * the file could not be opened, there was no loader - * for the file's format, there was not enough memory - * to allocate the image buffer, or the image file - * contained invalid data. + * @param primitive The status primitive + * @param w The widget to render this + * @param size The icon size to render at + * @retrun A GdkPixbuf, created from stock */ -GdkPixbuf *pidgin_create_prpl_icon_with_status(GaimAccount *account, GaimStatusType *status_type, double scale_factor); - -/** - * Create a Pidgin running-man icon with the status emblem overlayed - * in the lower right corner. - * - * @param primitive The status type to set the emblem for. - * @param scale_factor The amount to scale to the original image. - * The default size is 32x32 pixels. A scale - * factor of 1 means no scaling will be done. - * A scale factor of 0.5 means the length - * and width will be 16 pixels each. - * - * @return A newly-created pixbuf with a reference count of 1, - * or NULL if any of several error conditions occurred: - * the file could not be opened, there was no loader for - * the file's format, there was not enough memory to - * allocate the image buffer, or the image file contained - * invalid data. - */ -GdkPixbuf *pidgin_create_gaim_icon_with_status(GaimStatusPrimitive primitive, double scale_factor); +GdkPixbuf * pidgin_create_status_icon(GaimStatusPrimitive primitive, GtkWidget *w, const char *size); /**