| 2160 |
2160 |
| 2161 |
2161 |
| 2162 static void |
2162 static void |
| 2163 icon_preview_change_cb(GtkFileChooser *widget, struct _icon_chooser *dialog) |
2163 icon_preview_change_cb(GtkFileChooser *widget, struct _icon_chooser *dialog) |
| 2164 { |
2164 { |
| 2165 GdkPixbuf *pixbuf, *scale; |
2165 GdkPixbuf *pixbuf; |
| 2166 int height, width; |
2166 int height, width; |
| 2167 char *basename, *markup, *size; |
2167 char *basename, *markup, *size; |
| 2168 struct stat st; |
2168 struct stat st; |
| 2169 char *filename; |
2169 char *filename; |
| 2170 |
2170 |
| 2171 filename = gtk_file_chooser_get_preview_filename( |
2171 filename = gtk_file_chooser_get_preview_filename( |
| 2172 GTK_FILE_CHOOSER(dialog->icon_filesel)); |
2172 GTK_FILE_CHOOSER(dialog->icon_filesel)); |
| 2173 |
2173 |
| 2174 if (!filename || g_stat(filename, &st) || !(pixbuf = pidgin_pixbuf_new_from_file(filename))) |
2174 if (!filename || g_stat(filename, &st) || !(pixbuf = pidgin_pixbuf_new_from_file_at_size(filename, 128, 128))) |
| 2175 { |
2175 { |
| 2176 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), NULL); |
2176 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), NULL); |
| 2177 gtk_label_set_markup(GTK_LABEL(dialog->icon_text), ""); |
2177 gtk_label_set_markup(GTK_LABEL(dialog->icon_text), ""); |
| 2178 g_free(filename); |
2178 g_free(filename); |
| 2179 return; |
2179 return; |
| 2180 } |
2180 } |
| 2181 |
2181 |
| 2182 width = gdk_pixbuf_get_width(pixbuf); |
2182 gdk_pixbuf_get_file_info(filename, &width, &height); |
| 2183 height = gdk_pixbuf_get_height(pixbuf); |
|
| 2184 basename = g_path_get_basename(filename); |
2183 basename = g_path_get_basename(filename); |
| 2185 size = purple_str_size_to_units(st.st_size); |
2184 size = purple_str_size_to_units(st.st_size); |
| 2186 markup = g_strdup_printf(_("<b>File:</b> %s\n" |
2185 markup = g_strdup_printf(_("<b>File:</b> %s\n" |
| 2187 "<b>File size:</b> %s\n" |
2186 "<b>File size:</b> %s\n" |
| 2188 "<b>Image size:</b> %dx%d"), |
2187 "<b>Image size:</b> %dx%d"), |
| 2189 basename, size, width, height); |
2188 basename, size, width, height); |
| 2190 |
2189 |
| 2191 scale = gdk_pixbuf_scale_simple(pixbuf, width * 50 / height, |
2190 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), pixbuf); |
| 2192 50, GDK_INTERP_BILINEAR); |
|
| 2193 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), scale); |
|
| 2194 gtk_label_set_markup(GTK_LABEL(dialog->icon_text), markup); |
2191 gtk_label_set_markup(GTK_LABEL(dialog->icon_text), markup); |
| 2195 |
2192 |
| 2196 g_object_unref(G_OBJECT(pixbuf)); |
2193 g_object_unref(G_OBJECT(pixbuf)); |
| 2197 g_object_unref(G_OBJECT(scale)); |
|
| 2198 g_free(filename); |
2194 g_free(filename); |
| 2199 g_free(basename); |
2195 g_free(basename); |
| 2200 g_free(size); |
2196 g_free(size); |
| 2201 g_free(markup); |
2197 g_free(markup); |
| 2202 } |
2198 } |