Mercurial > pidgin
diff pidgin/gaimstock.c @ 15396:a8ee645e7fb4
A lot of status icon changes:
- Added Tango icons to blist
- Added tooltip changes
A work in progress. TODO:
- desaturate and tranparentify status icons in list
- protocol icon in tooltip
- statusbox icon changes
- Add emblems
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Wed, 24 Jan 2007 09:30:54 +0000 |
parents | 5fe8042783c1 |
children | c9497aad9fc4 9c0cf4db1f4d |
line wrap: on
line diff
--- a/pidgin/gaimstock.c Tue Jan 23 19:45:31 2007 +0000 +++ b/pidgin/gaimstock.c Wed Jan 24 09:30:54 2007 +0000 @@ -117,9 +117,6 @@ { GAIM_STOCK_TYPED, "gaim", "typed.png" }, { GAIM_STOCK_TYPING, "gaim", "typing.png" }, { GAIM_STOCK_VOICE_CHAT, "gaim", "phone.png" }, - { GAIM_STOCK_STATUS_ONLINE, "gaim", "status-online.png" }, - { GAIM_STOCK_STATUS_OFFLINE, "gaim", "status-offline.png" }, - { GAIM_STOCK_STATUS_AWAY, "gaim", "status-away.png" }, { GAIM_STOCK_STATUS_INVISIBLE,"gaim", "status-invisible.png" }, { GAIM_STOCK_STATUS_TYPING0, "gaim", "status-typing0.png" }, { GAIM_STOCK_STATUS_TYPING1, "gaim", "status-typing1.png" }, @@ -145,6 +142,28 @@ { GAIM_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, }; +static struct SizedStockIcon { + const char *name; + const char *dir; + const char *filename; + gboolean extra_small; + gboolean small; + gboolean medium; + gboolean huge; +} const sized_stock_icons [] = { + { GAIM_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, FALSE }, + { GAIM_STOCK_STATUS_OPERATOR, "status", "operator.png", TRUE, FALSE, FALSE, FALSE }, + { GAIM_STOCK_STATUS_HALFOP, "status", "half-operator.png", TRUE, FALSE, FALSE, FALSE }, +}; + static gchar * find_file(const char *dir, const char *base) { @@ -161,16 +180,26 @@ base, NULL); } - if (!g_file_test(filename, G_FILE_TEST_EXISTS)) - { - g_critical("Unable to load stock pixmap %s\n", base); + return filename; +} + +static void +add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, + const char *size, const char *file) +{ + char *filename; + GtkIconSource *source; - g_free(filename); - - return NULL; - } - - return filename; + filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, file, NULL); + source = gtk_icon_source_new(); + gtk_icon_source_set_filename(source, filename); + gtk_icon_source_set_direction_wildcarded(source, TRUE); + gtk_icon_source_set_size(source, sizeid); + gtk_icon_source_set_size_wildcarded(source, FALSE); + gtk_icon_source_set_state_wildcarded(source, TRUE); + gtk_icon_set_add_source(iconset, source); + gtk_icon_source_free(source); + g_free(filename); } void @@ -180,7 +209,8 @@ GtkIconFactory *icon_factory; size_t i; GtkWidget *win; - + GtkIconSize extra_small, small, medium, huge; + if (stock_initted) return; @@ -197,7 +227,7 @@ for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) { - GdkPixbuf *pixbuf; + GtkIconSource *source; GtkIconSet *iconset; gchar *filename; @@ -214,13 +244,18 @@ if (filename == NULL) continue; - pixbuf = gdk_pixbuf_new_from_file(filename, NULL); - - g_free(filename); + source = gtk_icon_source_new(); + gtk_icon_source_set_filename(source, filename); + gtk_icon_source_set_direction_wildcarded(source, TRUE); + gtk_icon_source_set_size_wildcarded(source, TRUE); + gtk_icon_source_set_state_wildcarded(source, TRUE); + - iconset = gtk_icon_set_new_from_pixbuf(pixbuf); - - g_object_unref(G_OBJECT(pixbuf)); + iconset = gtk_icon_set_new(); + gtk_icon_set_add_source(iconset, source); + + gtk_icon_source_free(source); + g_free(filename); } gtk_icon_factory_add(icon_factory, stock_icons[i].name, iconset); @@ -228,15 +263,40 @@ gtk_icon_set_unref(iconset); } - gtk_widget_destroy(win); - /* register custom icon sizes */ gtk_icon_size_register(GAIM_ICON_SIZE_DIALOG_COOL, 40, 60); - gtk_icon_size_register(GAIM_ICON_SIZE_STATUS, 30, 30); - gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_TWO_LINE, 30, 30); - gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_SMALL, 16, 16); - gtk_icon_size_register(GAIM_ICON_SIZE_STATUS_SMALL_TWO_LINE, 24, 24); + extra_small = gtk_icon_size_register(GAIM_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); + small = gtk_icon_size_register(GAIM_ICON_SIZE_TANGO_SMALL, 22, 22); + medium = gtk_icon_size_register(GAIM_ICON_SIZE_TANGO_MEDIUM, 32, 32); + huge = gtk_icon_size_register(GAIM_ICON_SIZE_TANGO_HUGE, 64, 64); + + for (i = 0; i < G_N_ELEMENTS(sized_stock_icons); i++) + { + GtkIconSet *iconset; + iconset = gtk_icon_set_new(); + if (sized_stock_icons[i].extra_small) + add_sized_icon(iconset, extra_small, + sized_stock_icons[i].dir, + "16", sized_stock_icons[i].filename); + if (sized_stock_icons[i].small) + add_sized_icon(iconset, small, + sized_stock_icons[i].dir, + "22", sized_stock_icons[i].filename); + if (sized_stock_icons[i].medium) + add_sized_icon(iconset, medium, + sized_stock_icons[i].dir, + "32", sized_stock_icons[i].filename); + if (sized_stock_icons[i].huge) + add_sized_icon(iconset, huge, + sized_stock_icons[i].dir, + "64", sized_stock_icons[i].filename); + + gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset); + gtk_icon_set_unref(iconset); + } + + gtk_widget_destroy(win); g_object_unref(G_OBJECT(icon_factory)); /* Register the stock items. */