Mercurial > pidgin
annotate src/gtkstock.c @ 12170:51c194ca6016
[gaim-migrate @ 14471]
(08:59:36) Peter Lawler (Bleeter): I just noticed the mail icon thing in the blist. I stupidly assumed it meant I'd had new mail, but had closed the dialog. Maybe it could do with using the gaimdude instead as the pixmap?
I'm thinking the IM icon would be better. I kept the PENDING icon separate, in case we come up with a better icon for just this case. I left the envelope pixmap for now. We can remove it later, if desired.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 20 Nov 2005 13:17:04 +0000 |
parents | f6f08fd1841a |
children | bc2b9f925979 |
rev | line source |
---|---|
10297 | 1 /** |
2 * @file gtkstock.c GTK+ Stock resources | |
3 * @ingroup gtkui | |
4 * | |
5 * gaim | |
6 * | |
7 * Gaim is the legal property of its developers, whose names are too numerous | |
8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
9 * source distribution. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 * | |
25 */ | |
26 #include "internal.h" | |
27 #include "gtkgaim.h" | |
28 | |
29 #include "gtkstock.h" | |
30 | |
31 static struct StockIcon | |
32 { | |
33 const char *name; | |
34 const char *dir; | |
35 const char *filename; | |
36 | |
37 } const stock_icons[] = | |
38 { | |
39 { GAIM_STOCK_ABOUT, "buttons", "about_menu.png" }, | |
40 { GAIM_STOCK_ACCOUNTS, "buttons", "accounts.png" }, | |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
41 #if GTK_CHECK_VERSION(2,6,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
42 { GAIM_STOCK_ALIAS, NULL, GTK_STOCK_EDIT }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
43 #else |
10297 | 44 { GAIM_STOCK_ALIAS, "buttons", "edit.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
45 #endif |
10297 | 46 { GAIM_STOCK_BGCOLOR, "buttons", "change-bgcolor-small.png" }, |
47 { GAIM_STOCK_BLOCK, NULL, GTK_STOCK_STOP }, | |
48 { GAIM_STOCK_CHAT, NULL, GTK_STOCK_JUMP_TO }, | |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
49 { GAIM_STOCK_CLEAR, NULL, GTK_STOCK_CLEAR }, |
12163
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
50 #if GTK_CHECK_VERSION(2,6,0) |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
51 { GAIM_STOCK_CONNECT, NULL, GTK_STOCK_CONNECT }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
52 #else |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
53 { GAIM_STOCK_CONNECT, "icons", "stock_connect_16.png" }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
54 #endif |
10297 | 55 { GAIM_STOCK_DOWNLOAD, NULL, GTK_STOCK_GO_DOWN }, |
56 { GAIM_STOCK_DIALOG_AUTH, "dialogs", "gaim_auth.png" }, | |
57 { GAIM_STOCK_DIALOG_COOL, "dialogs", "gaim_cool.png" }, | |
58 { GAIM_STOCK_DIALOG_ERROR, "dialogs", "gaim_error.png" }, | |
59 { GAIM_STOCK_DIALOG_INFO, "dialogs", "gaim_info.png" }, | |
60 { GAIM_STOCK_DIALOG_QUESTION, "dialogs", "gaim_question.png" }, | |
61 { GAIM_STOCK_DIALOG_WARNING, "dialogs", "gaim_warning.png" }, | |
12163
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
62 #if GTK_CHECK_VERSION(2,6,0) |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
63 { GAIM_STOCK_DISCONNECT, NULL, GTK_STOCK_DISCONNECT }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
64 #else |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
65 { GAIM_STOCK_DISCONNECT, "icons", "stock_disconnect_16.png" }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
66 #endif |
10297 | 67 { GAIM_STOCK_FGCOLOR, "buttons", "change-fgcolor-small.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
68 #if GTK_CHECK_VERSION(2,6,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
69 { GAIM_STOCK_EDIT, NULL, GTK_STOCK_EDIT }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
70 #else |
10297 | 71 { GAIM_STOCK_EDIT, "buttons", "edit.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
72 #endif |
10297 | 73 { GAIM_STOCK_FILE_CANCELED, NULL, GTK_STOCK_CANCEL }, |
74 { GAIM_STOCK_FILE_DONE, NULL, GTK_STOCK_APPLY }, | |
75 { GAIM_STOCK_FILE_TRANSFER, NULL, GTK_STOCK_REVERT_TO_SAVED }, | |
76 { GAIM_STOCK_ICON_AWAY, "icons", "away.png" }, | |
77 { GAIM_STOCK_ICON_AWAY_MSG, "icons", "msgpend.png" }, | |
78 { GAIM_STOCK_ICON_CONNECT, "icons", "connect.png" }, | |
79 { GAIM_STOCK_ICON_OFFLINE, "icons", "offline.png" }, | |
80 { GAIM_STOCK_ICON_ONLINE, "icons", "online.png" }, | |
81 { GAIM_STOCK_ICON_ONLINE_MSG, "icons", "msgunread.png" }, | |
82 { GAIM_STOCK_IGNORE, NULL, GTK_STOCK_DIALOG_ERROR }, | |
11271
b33eccbc3a10
[gaim-migrate @ 13454]
Richard Laager <rlaager@wiktel.com>
parents:
10871
diff
changeset
|
83 { GAIM_STOCK_IM, "buttons", "send-im.png" }, |
10297 | 84 { GAIM_STOCK_IMAGE, "buttons", "insert-image-small.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
85 #if GTK_CHECK_VERSION(2,8,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
86 { GAIM_STOCK_INFO, NULL, GTK_STOCK_INFO }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
87 #else |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
88 { GAIM_STOCK_INFO, "icons", "info.png" }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
89 #endif |
10297 | 90 { GAIM_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, |
91 { GAIM_STOCK_LINK, "buttons", "insert-link-small.png" }, | |
92 { GAIM_STOCK_LOGO, "gaim", "logo.png" }, | |
93 { GAIM_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, | |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
94 #if GTK_CHECK_VERSION(2,6,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
95 { GAIM_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
96 #else |
10297 | 97 { GAIM_STOCK_PAUSE, "buttons", "pause.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
98 #endif |
12170
51c194ca6016
[gaim-migrate @ 14471]
Richard Laager <rlaager@wiktel.com>
parents:
12163
diff
changeset
|
99 { GAIM_STOCK_PENDING, "buttons", "send-im.png" }, |
12163
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
100 #if GTK_CHECK_VERSION(2,6,0) |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
101 { GAIM_STOCK_PLUGIN, NULL, GTK_STOCK_DISCONNECT }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
102 #else |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
103 { GAIM_STOCK_PLUGIN, "icons", "stock_disconnect_16.png" }, |
f6f08fd1841a
[gaim-migrate @ 14464]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
104 #endif |
10297 | 105 { GAIM_STOCK_OPEN_MAIL, NULL, GTK_STOCK_JUMP_TO }, |
106 { GAIM_STOCK_SEND, "buttons", "send-im.png" }, | |
107 { GAIM_STOCK_SIGN_ON, NULL, GTK_STOCK_EXECUTE }, | |
108 { GAIM_STOCK_SIGN_OFF, NULL, GTK_STOCK_CLOSE }, | |
109 { GAIM_STOCK_SMILEY, "buttons", "insert-smiley-small.png" }, | |
110 { GAIM_STOCK_TEXT_BIGGER, "buttons", "text_bigger.png" }, | |
111 { GAIM_STOCK_TEXT_NORMAL, "buttons", "text_normal.png" }, | |
112 { GAIM_STOCK_TEXT_SMALLER, "buttons", "text_smaller.png" }, | |
113 { GAIM_STOCK_TYPED, "gaim", "typed.png" }, | |
114 { GAIM_STOCK_TYPING, "gaim", "typing.png" }, | |
12024 | 115 { GAIM_STOCK_VOICE_CHAT, "gaim", "phone.png" }, |
10643 | 116 { GAIM_STOCK_STATUS_ONLINE, "gaim", "status-online.png" }, |
117 { GAIM_STOCK_STATUS_OFFLINE, "gaim", "status-offline.png" }, | |
118 { GAIM_STOCK_STATUS_AWAY, "gaim", "status-away.png" }, | |
119 { GAIM_STOCK_STATUS_INVISIBLE,"gaim", "status-invisible.png" }, | |
120 { GAIM_STOCK_STATUS_TYPING0, "gaim", "status-typing0.png" }, | |
121 { GAIM_STOCK_STATUS_TYPING1, "gaim", "status-typing1.png" }, | |
122 { GAIM_STOCK_STATUS_TYPING2, "gaim", "status-typing2.png" }, | |
123 { GAIM_STOCK_STATUS_TYPING3, "gaim", "status-typing3.png" }, | |
124 { GAIM_STOCK_STATUS_CONNECT0, "gaim", "status-connect0.png" }, | |
125 { GAIM_STOCK_STATUS_CONNECT1, "gaim", "status-connect1.png" }, | |
126 { GAIM_STOCK_STATUS_CONNECT2, "gaim", "status-connect2.png" }, | |
127 { GAIM_STOCK_STATUS_CONNECT3, "gaim", "status-connect3.png" }, | |
10297 | 128 { GAIM_STOCK_UPLOAD, NULL, GTK_STOCK_GO_UP }, |
129 { GAIM_STOCK_WARN, NULL, GTK_STOCK_DIALOG_WARNING } | |
130 }; | |
131 | |
10871 | 132 static const GtkStockItem stock_items[] = |
10297 | 133 { |
134 { GAIM_STOCK_ALIAS, N_("_Alias"), 0, 0, NULL }, | |
135 { GAIM_STOCK_CHAT, N_("_Join"), 0, 0, NULL }, | |
136 { GAIM_STOCK_INVITE, N_("_Invite"), 0, 0, NULL }, | |
137 { GAIM_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, | |
138 { GAIM_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, | |
139 { GAIM_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, | |
140 { GAIM_STOCK_WARN, N_("_Warn"), 0, 0, NULL } | |
141 }; | |
142 | |
143 static gchar * | |
144 find_file(const char *dir, const char *base) | |
145 { | |
146 char *filename; | |
147 | |
148 if (base == NULL) | |
149 return NULL; | |
150 | |
151 if (!strcmp(dir, "gaim")) | |
152 filename = g_build_filename(DATADIR, "pixmaps", "gaim", base, NULL); | |
153 else | |
154 { | |
155 filename = g_build_filename(DATADIR, "pixmaps", "gaim", dir, | |
156 base, NULL); | |
157 } | |
158 | |
159 if (!g_file_test(filename, G_FILE_TEST_EXISTS)) | |
160 { | |
161 g_critical("Unable to load stock pixmap %s\n", base); | |
162 | |
163 g_free(filename); | |
164 | |
165 return NULL; | |
166 } | |
167 | |
168 return filename; | |
169 } | |
170 | |
171 static void | |
172 gaim_gtk_stock_versionize(GdkPixbuf **original, GtkWidget *widget) { | |
173 GdkPixmap *pixmap; | |
174 GtkStyle *style; | |
175 PangoContext *context; | |
176 PangoLayout *layout; | |
177 gchar *markup; | |
178 gint width, height; | |
179 gint lwidth = 0, lheight = 0; | |
180 | |
181 style = gtk_widget_get_style(widget); | |
182 | |
183 gdk_pixbuf_render_pixmap_and_mask(*original, &pixmap, NULL, 255); | |
184 width = gdk_pixbuf_get_width(*original); | |
185 height = gdk_pixbuf_get_height(*original); | |
186 g_object_unref(G_OBJECT(*original)); | |
187 | |
188 context = gtk_widget_get_pango_context(widget); | |
189 layout = pango_layout_new(context); | |
190 | |
191 markup = g_strdup_printf("<span foreground=\"#FFFFFF\" size=\"larger\">%s</span>", VERSION); | |
192 pango_layout_set_font_description(layout, style->font_desc); | |
193 pango_layout_set_markup(layout, markup, strlen(markup)); | |
194 g_free(markup); | |
195 | |
196 pango_layout_get_pixel_size(layout, &lwidth, &lheight); | |
197 gdk_draw_layout(GDK_DRAWABLE(pixmap), style->bg_gc[GTK_STATE_NORMAL], | |
198 width - (lwidth + 3), height - (lheight + 1), layout); | |
199 g_object_unref(G_OBJECT(layout)); | |
200 | |
201 *original = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, | |
202 0, 0, 0, 0, | |
203 width, height); | |
204 g_object_unref(G_OBJECT(pixmap)); | |
205 } | |
206 | |
207 void | |
208 gaim_gtk_stock_init(void) | |
209 { | |
210 static gboolean stock_initted = FALSE; | |
211 GtkIconFactory *icon_factory; | |
212 int i; | |
213 GtkWidget *win; | |
214 | |
215 if (stock_initted) | |
216 return; | |
217 | |
218 stock_initted = TRUE; | |
219 | |
220 /* Setup the icon factory. */ | |
221 icon_factory = gtk_icon_factory_new(); | |
222 | |
223 gtk_icon_factory_add_default(icon_factory); | |
224 | |
225 /* Er, yeah, a hack, but it works. :) */ | |
226 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
227 gtk_widget_realize(win); | |
228 | |
229 for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) | |
230 { | |
231 GdkPixbuf *pixbuf; | |
232 GtkIconSet *iconset; | |
233 gchar *filename; | |
234 | |
235 if (stock_icons[i].dir == NULL) | |
236 { | |
237 /* GTK+ Stock icon */ | |
238 iconset = gtk_style_lookup_icon_set(gtk_widget_get_style(win), | |
239 stock_icons[i].filename); | |
240 } | |
241 else | |
242 { | |
243 filename = find_file(stock_icons[i].dir, stock_icons[i].filename); | |
244 | |
245 if (filename == NULL) | |
246 continue; | |
247 | |
248 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | |
249 | |
250 g_free(filename); | |
251 | |
252 if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) | |
253 gaim_gtk_stock_versionize(&pixbuf, win); | |
254 | |
255 iconset = gtk_icon_set_new_from_pixbuf(pixbuf); | |
256 | |
257 g_object_unref(G_OBJECT(pixbuf)); | |
258 } | |
259 | |
260 gtk_icon_factory_add(icon_factory, stock_icons[i].name, iconset); | |
261 | |
262 gtk_icon_set_unref(iconset); | |
263 } | |
264 | |
265 gtk_widget_destroy(win); | |
266 | |
267 /* register custom icon sizes */ | |
268 gtk_icon_size_register(GAIM_ICON_SIZE_LOGO, 330, 90); | |
269 gtk_icon_size_register(GAIM_ICON_SIZE_DIALOG_COOL, 40, 60); | |
10643 | 270 gtk_icon_size_register(GAIM_ICON_SIZE_STATUS, 30, 30); |
10297 | 271 |
272 g_object_unref(G_OBJECT(icon_factory)); | |
273 | |
274 /* Register the stock items. */ | |
275 gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); | |
276 } |