Mercurial > pidgin.yaz
comparison src/gtkstock.c @ 14190:366be2ce35a7
[gaim-migrate @ 16854]
Generates the image for the about dialog on demand instead of making it
a stock image which remains in memory forever.
committer: Tailor Script <tailor@pidgin.im>
author | Aaron Sheldon <aaronsheldon> |
---|---|
date | Sat, 19 Aug 2006 00:24:14 +0000 |
parents | 55c1e5cec4dc |
children |
comparison
equal
deleted
inserted
replaced
14189:789d80a6b9d9 | 14190:366be2ce35a7 |
---|---|
91 { GAIM_STOCK_INFO, "buttons", "info.png" }, | 91 { GAIM_STOCK_INFO, "buttons", "info.png" }, |
92 #endif | 92 #endif |
93 { GAIM_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, | 93 { GAIM_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, |
94 { GAIM_STOCK_LINK, "buttons", "insert-link-small.png" }, | 94 { GAIM_STOCK_LINK, "buttons", "insert-link-small.png" }, |
95 { GAIM_STOCK_LOG, NULL, GTK_STOCK_DND_MULTIPLE }, | 95 { GAIM_STOCK_LOG, NULL, GTK_STOCK_DND_MULTIPLE }, |
96 { GAIM_STOCK_LOGO, "gaim", "logo.png" }, | |
97 { GAIM_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, | 96 { GAIM_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, |
98 #if GTK_CHECK_VERSION(2,6,0) | 97 #if GTK_CHECK_VERSION(2,6,0) |
99 { GAIM_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, | 98 { GAIM_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, |
100 #else | 99 #else |
101 { GAIM_STOCK_PAUSE, "buttons", "pause.png" }, | 100 { GAIM_STOCK_PAUSE, "buttons", "pause.png" }, |
172 } | 171 } |
173 | 172 |
174 return filename; | 173 return filename; |
175 } | 174 } |
176 | 175 |
177 static void | |
178 gaim_gtk_stock_versionize(GdkPixbuf **original, GtkWidget *widget) { | |
179 GdkPixmap *pixmap; | |
180 GtkStyle *style; | |
181 PangoContext *context; | |
182 PangoLayout *layout; | |
183 gchar *markup; | |
184 gint width, height; | |
185 gint lwidth = 0, lheight = 0; | |
186 | |
187 style = gtk_widget_get_style(widget); | |
188 | |
189 gdk_pixbuf_render_pixmap_and_mask(*original, &pixmap, NULL, 255); | |
190 width = gdk_pixbuf_get_width(*original); | |
191 height = gdk_pixbuf_get_height(*original); | |
192 g_object_unref(G_OBJECT(*original)); | |
193 | |
194 context = gtk_widget_get_pango_context(widget); | |
195 layout = pango_layout_new(context); | |
196 | |
197 markup = g_strdup_printf("<span foreground=\"#FFFFFF\" size=\"larger\">%s</span>", VERSION); | |
198 pango_layout_set_font_description(layout, style->font_desc); | |
199 pango_layout_set_markup(layout, markup, strlen(markup)); | |
200 g_free(markup); | |
201 | |
202 pango_layout_get_pixel_size(layout, &lwidth, &lheight); | |
203 gdk_draw_layout(GDK_DRAWABLE(pixmap), style->bg_gc[GTK_STATE_NORMAL], | |
204 width - (lwidth + 3), height - (lheight + 1), layout); | |
205 g_object_unref(G_OBJECT(layout)); | |
206 | |
207 *original = gdk_pixbuf_get_from_drawable(NULL, pixmap, NULL, | |
208 0, 0, 0, 0, | |
209 width, height); | |
210 g_object_unref(G_OBJECT(pixmap)); | |
211 } | |
212 | |
213 void | 176 void |
214 gaim_gtk_stock_init(void) | 177 gaim_gtk_stock_init(void) |
215 { | 178 { |
216 static gboolean stock_initted = FALSE; | 179 static gboolean stock_initted = FALSE; |
217 GtkIconFactory *icon_factory; | 180 GtkIconFactory *icon_factory; |
253 | 216 |
254 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | 217 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
255 | 218 |
256 g_free(filename); | 219 g_free(filename); |
257 | 220 |
258 if (!strcmp(stock_icons[i].name, GAIM_STOCK_LOGO)) | |
259 gaim_gtk_stock_versionize(&pixbuf, win); | |
260 | |
261 iconset = gtk_icon_set_new_from_pixbuf(pixbuf); | 221 iconset = gtk_icon_set_new_from_pixbuf(pixbuf); |
262 | 222 |
263 g_object_unref(G_OBJECT(pixbuf)); | 223 g_object_unref(G_OBJECT(pixbuf)); |
264 } | 224 } |
265 | 225 |