Mercurial > pidgin
annotate src/gtkstock.c @ 12024:e67993da8a22
[gaim-migrate @ 14317]
I strongly suspect CruiseControl is going to yell at me for this.
A voice chat API, GUI + mediastreamer. This is what I'm using for Google Talk.
This doesn't actually do anything at all. There's no code in the Jabber plugin yet
to use this API (although it Works For Me). All it will do is compile and link.
If you're lucky.
To build this, you should install oRTP from Linphone, Speex and iLBC (also
from linphone, I believe). To not build this, ./configure --disable-vv.
Most of the configure.ac and Makefile.am hackery was lifted right out of
Linphone with a few modifications. It seems to work if you have everything
installed or if you --disable-vv. I haven't really tested not having
everything installed and not --disabling-vv.
It's kinda funky to include all of mediastreamer in the source tree like this,
but linphone doesn't build it as a separate library. I'll probably wind up
writing them a patch to build it as a .so so we can link it dynamically instead.
This code certainly isn't finished. It'll adapt as I progress on the Google code,
but it's certainly of more use here in CVS than in my personal tree.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Wed, 09 Nov 2005 08:07:20 +0000 |
parents | c9188d3eb9d3 |
children | e75ef7aa913e |
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 }, |
10297 | 50 { GAIM_STOCK_DOWNLOAD, NULL, GTK_STOCK_GO_DOWN }, |
51 { GAIM_STOCK_DIALOG_AUTH, "dialogs", "gaim_auth.png" }, | |
52 { GAIM_STOCK_DIALOG_COOL, "dialogs", "gaim_cool.png" }, | |
53 { GAIM_STOCK_DIALOG_ERROR, "dialogs", "gaim_error.png" }, | |
54 { GAIM_STOCK_DIALOG_INFO, "dialogs", "gaim_info.png" }, | |
55 { GAIM_STOCK_DIALOG_QUESTION, "dialogs", "gaim_question.png" }, | |
56 { GAIM_STOCK_DIALOG_WARNING, "dialogs", "gaim_warning.png" }, | |
57 { GAIM_STOCK_FGCOLOR, "buttons", "change-fgcolor-small.png" }, | |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
58 #if GTK_CHECK_VERSION(2,6,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
59 { GAIM_STOCK_EDIT, NULL, GTK_STOCK_EDIT }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
60 #else |
10297 | 61 { GAIM_STOCK_EDIT, "buttons", "edit.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
62 #endif |
10297 | 63 { GAIM_STOCK_FILE_CANCELED, NULL, GTK_STOCK_CANCEL }, |
64 { GAIM_STOCK_FILE_DONE, NULL, GTK_STOCK_APPLY }, | |
65 { GAIM_STOCK_FILE_TRANSFER, NULL, GTK_STOCK_REVERT_TO_SAVED }, | |
66 { GAIM_STOCK_ICON_AWAY, "icons", "away.png" }, | |
67 { GAIM_STOCK_ICON_AWAY_MSG, "icons", "msgpend.png" }, | |
68 { GAIM_STOCK_ICON_CONNECT, "icons", "connect.png" }, | |
69 { GAIM_STOCK_ICON_OFFLINE, "icons", "offline.png" }, | |
70 { GAIM_STOCK_ICON_ONLINE, "icons", "online.png" }, | |
71 { GAIM_STOCK_ICON_ONLINE_MSG, "icons", "msgunread.png" }, | |
72 { GAIM_STOCK_IGNORE, NULL, GTK_STOCK_DIALOG_ERROR }, | |
11271
b33eccbc3a10
[gaim-migrate @ 13454]
Richard Laager <rlaager@wiktel.com>
parents:
10871
diff
changeset
|
73 { GAIM_STOCK_IM, "buttons", "send-im.png" }, |
10297 | 74 { GAIM_STOCK_IMAGE, "buttons", "insert-image-small.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
75 #if GTK_CHECK_VERSION(2,8,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
76 { GAIM_STOCK_INFO, NULL, GTK_STOCK_INFO }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
77 #else |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
78 { GAIM_STOCK_INFO, "icons", "info.png" }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
79 #endif |
10297 | 80 { GAIM_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, |
81 { GAIM_STOCK_LINK, "buttons", "insert-link-small.png" }, | |
82 { GAIM_STOCK_LOGO, "gaim", "logo.png" }, | |
83 { GAIM_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, | |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
84 #if GTK_CHECK_VERSION(2,6,0) |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
85 { GAIM_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, |
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
86 #else |
10297 | 87 { GAIM_STOCK_PAUSE, "buttons", "pause.png" }, |
11370
2c3fb4a0f785
[gaim-migrate @ 13595]
Richard Laager <rlaager@wiktel.com>
parents:
11271
diff
changeset
|
88 #endif |
10297 | 89 { GAIM_STOCK_OPEN_MAIL, NULL, GTK_STOCK_JUMP_TO }, |
90 { GAIM_STOCK_SEND, "buttons", "send-im.png" }, | |
91 { GAIM_STOCK_SIGN_ON, NULL, GTK_STOCK_EXECUTE }, | |
92 { GAIM_STOCK_SIGN_OFF, NULL, GTK_STOCK_CLOSE }, | |
93 { GAIM_STOCK_SMILEY, "buttons", "insert-smiley-small.png" }, | |
94 { GAIM_STOCK_TEXT_BIGGER, "buttons", "text_bigger.png" }, | |
95 { GAIM_STOCK_TEXT_NORMAL, "buttons", "text_normal.png" }, | |
96 { GAIM_STOCK_TEXT_SMALLER, "buttons", "text_smaller.png" }, | |
97 { GAIM_STOCK_TYPED, "gaim", "typed.png" }, | |
98 { GAIM_STOCK_TYPING, "gaim", "typing.png" }, | |
12024 | 99 { GAIM_STOCK_VOICE_CHAT, "gaim", "phone.png" }, |
10643 | 100 { GAIM_STOCK_STATUS_ONLINE, "gaim", "status-online.png" }, |
101 { GAIM_STOCK_STATUS_OFFLINE, "gaim", "status-offline.png" }, | |
102 { GAIM_STOCK_STATUS_AWAY, "gaim", "status-away.png" }, | |
103 { GAIM_STOCK_STATUS_INVISIBLE,"gaim", "status-invisible.png" }, | |
104 { GAIM_STOCK_STATUS_TYPING0, "gaim", "status-typing0.png" }, | |
105 { GAIM_STOCK_STATUS_TYPING1, "gaim", "status-typing1.png" }, | |
106 { GAIM_STOCK_STATUS_TYPING2, "gaim", "status-typing2.png" }, | |
107 { GAIM_STOCK_STATUS_TYPING3, "gaim", "status-typing3.png" }, | |
108 { GAIM_STOCK_STATUS_CONNECT0, "gaim", "status-connect0.png" }, | |
109 { GAIM_STOCK_STATUS_CONNECT1, "gaim", "status-connect1.png" }, | |
110 { GAIM_STOCK_STATUS_CONNECT2, "gaim", "status-connect2.png" }, | |
111 { GAIM_STOCK_STATUS_CONNECT3, "gaim", "status-connect3.png" }, | |
10297 | 112 { GAIM_STOCK_UPLOAD, NULL, GTK_STOCK_GO_UP }, |
113 { GAIM_STOCK_WARN, NULL, GTK_STOCK_DIALOG_WARNING } | |
114 }; | |
115 | |
10871 | 116 static const GtkStockItem stock_items[] = |
10297 | 117 { |
118 { GAIM_STOCK_ALIAS, N_("_Alias"), 0, 0, NULL }, | |
119 { GAIM_STOCK_CHAT, N_("_Join"), 0, 0, NULL }, | |
120 { GAIM_STOCK_INVITE, N_("_Invite"), 0, 0, NULL }, | |
121 { GAIM_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, | |
122 { GAIM_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, | |
123 { GAIM_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, | |
124 { GAIM_STOCK_WARN, N_("_Warn"), 0, 0, NULL } | |
125 }; | |
126 | |
127 static gchar * | |
128 find_file(const char *dir, const char *base) | |
129 { | |
130 char *filename; | |
131 | |
132 if (base == NULL) | |
133 return NULL; | |
134 | |
135 if (!strcmp(dir, "gaim")) | |
136 filename = g_build_filename(DATADIR, "pixmaps", "gaim", base, NULL); | |
137 else | |
138 { | |
139 filename = g_build_filename(DATADIR, "pixmaps", "gaim", dir, | |
140 base, NULL); | |
141 } | |
142 | |
143 if (!g_file_test(filename, G_FILE_TEST_EXISTS)) | |
144 { | |
145 g_critical("Unable to load stock pixmap %s\n", base); | |
146 | |
147 g_free(filename); | |
148 | |
149 return NULL; | |
150 } | |
151 | |
152 return filename; | |
153 } | |
154 | |
155 static void | |
156 gaim_gtk_stock_versionize(GdkPixbuf **original, GtkWidget *widget) { | |
157 GdkPixmap *pixmap; | |
158 GtkStyle *style; | |
159 PangoContext *context; | |
160 PangoLayout *layout; | |
161 gchar *markup; | |
162 gint width, height; | |
163 gint lwidth = 0, lheight = 0; | |
164 | |
165 style = gtk_widget_get_style(widget); | |
166 | |
167 gdk_pixbuf_render_pixmap_and_mask(*original, &pixmap, NULL, 255); | |
168 width = gdk_pixbuf_get_width(*original); | |
169 height = gdk_pixbuf_get_height(*original); | |
170 g_object_unref(G_OBJECT(*original)); | |
171 | |
172 context = gtk_widget_get_pango_context(widget); | |
173 layout = pango_layout_new(context); | |
174 | |
175 markup = g_strdup_printf("<span foreground=\"#FFFFFF\" size=\"larger\">%s</span>", VERSION); | |
176 pango_layout_set_font_description(layout, style->font_desc); | |
177 pango_layout_set_markup(layout, markup, strlen(markup)); | |
178 g_free(markup); | |
179 | |
180 pango_layout_get_pixel_size(layout, &lwidth, &lheight); | |
181 gdk_draw_layout(GDK_DRAWABLE(pixmap), style->bg_gc[GTK_STATE_NORMAL], | |
182 width - (lwidth + 3), height - (lheight + 1), layout); | |
183 g_object_unref(G_OBJECT(layout)); | |
184 | |
185 *original = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, | |
186 0, 0, 0, 0, | |
187 width, height); | |
188 g_object_unref(G_OBJECT(pixmap)); | |
189 } | |
190 | |
191 void | |
192 gaim_gtk_stock_init(void) | |
193 { | |
194 static gboolean stock_initted = FALSE; | |
195 GtkIconFactory *icon_factory; | |
196 int i; | |
197 GtkWidget *win; | |
198 | |
199 if (stock_initted) | |
200 return; | |
201 | |
202 stock_initted = TRUE; | |
203 | |
204 /* Setup the icon factory. */ | |
205 icon_factory = gtk_icon_factory_new(); | |
206 | |
207 gtk_icon_factory_add_default(icon_factory); | |
208 | |
209 /* Er, yeah, a hack, but it works. :) */ | |
210 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
211 gtk_widget_realize(win); | |
212 | |
213 for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) | |
214 { | |
215 GdkPixbuf *pixbuf; | |
216 GtkIconSet *iconset; | |
217 gchar *filename; | |
218 | |
219 if (stock_icons[i].dir == NULL) | |
220 { | |
221 /* GTK+ Stock icon */ | |
222 iconset = gtk_style_lookup_icon_set(gtk_widget_get_style(win), | |
223 stock_icons[i].filename); | |
224 } | |
225 else | |
226 { | |
227 filename = find_file(stock_icons[i].dir, stock_icons[i].filename); | |
228 | |
229 if (filename == NULL) | |
230 continue; | |
231 | |
232 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | |
233 | |
234 g_free(filename); | |
235 | |
236 if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) | |
237 gaim_gtk_stock_versionize(&pixbuf, win); | |
238 | |
239 iconset = gtk_icon_set_new_from_pixbuf(pixbuf); | |
240 | |
241 g_object_unref(G_OBJECT(pixbuf)); | |
242 } | |
243 | |
244 gtk_icon_factory_add(icon_factory, stock_icons[i].name, iconset); | |
245 | |
246 gtk_icon_set_unref(iconset); | |
247 } | |
248 | |
249 gtk_widget_destroy(win); | |
250 | |
251 /* register custom icon sizes */ | |
252 gtk_icon_size_register(GAIM_ICON_SIZE_LOGO, 330, 90); | |
253 gtk_icon_size_register(GAIM_ICON_SIZE_DIALOG_COOL, 40, 60); | |
10643 | 254 gtk_icon_size_register(GAIM_ICON_SIZE_STATUS, 30, 30); |
10297 | 255 |
256 g_object_unref(G_OBJECT(icon_factory)); | |
257 | |
258 /* Register the stock items. */ | |
259 gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); | |
260 } |