| 651 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
651 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); |
| 652 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
652 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); |
| 653 |
653 |
| 654 /* Dialog icon. */ |
654 /* Dialog icon. */ |
| 655 if (icon_data) { |
655 if (icon_data) { |
| 656 GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); |
656 GdkPixbuf *pixbuf = pidgin_pixbuf_from_data(icon_data, icon_size); |
| 657 GdkPixbuf *pixbuf = NULL; |
657 if (pixbuf) { |
| 658 if (gdk_pixbuf_loader_write(loader, icon_data, icon_size, NULL)) { |
658 /* scale the image if it is too large */ |
| 659 pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); |
659 int width = gdk_pixbuf_get_width(pixbuf); |
| 660 if (pixbuf) { |
660 int height = gdk_pixbuf_get_height(pixbuf); |
| 661 /* scale the image if it is too large */ |
661 if (width > 128 || height > 128) { |
| 662 int width = gdk_pixbuf_get_width(pixbuf); |
662 int scaled_width = width > height ? 128 : (128 * width) / height; |
| 663 int height = gdk_pixbuf_get_height(pixbuf); |
663 int scaled_height = height > width ? 128 : (128 * height) / width; |
| 664 if (width > 128 || height > 128) { |
664 GdkPixbuf *scaled = |
| 665 int scaled_width = width > height ? 128 : (128 * width) / height; |
665 gdk_pixbuf_scale_simple(pixbuf, scaled_width, scaled_height, |
| 666 int scaled_height = height > width ? 128 : (128 * height) / width; |
666 GDK_INTERP_BILINEAR); |
| 667 GdkPixbuf *scaled = |
667 |
| 668 gdk_pixbuf_scale_simple(pixbuf, scaled_width, scaled_height, |
668 purple_debug_info("pidgin", |
| 669 GDK_INTERP_BILINEAR); |
669 "dialog icon was too large, scaled it down\n"); |
| 670 |
670 if (scaled) { |
| 671 purple_debug_info("pidgin", |
671 g_object_unref(pixbuf); |
| 672 "dialog icon was too large, scale it down\n"); |
672 pixbuf = scaled; |
| 673 if (scaled) { |
|
| 674 g_object_unref(pixbuf); |
|
| 675 pixbuf = scaled; |
|
| 676 } |
|
| 677 } |
673 } |
| 678 img = gtk_image_new_from_pixbuf(pixbuf); |
|
| 679 } |
674 } |
| |
675 img = gtk_image_new_from_pixbuf(pixbuf); |
| |
676 g_object_unref(pixbuf); |
| 680 } else { |
677 } else { |
| 681 purple_debug_info("pidgin", "failed to parse dialog icon\n"); |
678 purple_debug_info("pidgin", "failed to parse dialog icon\n"); |
| 682 } |
679 } |
| 683 gdk_pixbuf_loader_close(loader, NULL); |
|
| 684 g_object_unref(loader); |
|
| 685 } |
680 } |
| 686 |
681 |
| 687 if (!img) { |
682 if (!img) { |
| 688 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
683 img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, |
| 689 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
684 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); |
| 1014 static GtkWidget * |
1009 static GtkWidget * |
| 1015 create_image_field(PurpleRequestField *field) |
1010 create_image_field(PurpleRequestField *field) |
| 1016 { |
1011 { |
| 1017 GtkWidget *widget; |
1012 GtkWidget *widget; |
| 1018 GdkPixbuf *buf, *scale; |
1013 GdkPixbuf *buf, *scale; |
| 1019 GdkPixbufLoader *loader; |
1014 |
| 1020 |
1015 buf = pidgin_pixbuf_from_data( |
| 1021 loader = gdk_pixbuf_loader_new(); |
1016 (const guchar *)purple_request_field_image_get_buffer(field), |
| 1022 gdk_pixbuf_loader_write(loader, |
1017 purple_request_field_image_get_size(field)); |
| 1023 (const guchar *)purple_request_field_image_get_buffer(field), |
|
| 1024 purple_request_field_image_get_size(field), |
|
| 1025 NULL); |
|
| 1026 gdk_pixbuf_loader_close(loader, NULL); |
|
| 1027 buf = gdk_pixbuf_loader_get_pixbuf(loader); |
|
| 1028 |
1018 |
| 1029 scale = gdk_pixbuf_scale_simple(buf, |
1019 scale = gdk_pixbuf_scale_simple(buf, |
| 1030 purple_request_field_image_get_scale_x(field) * gdk_pixbuf_get_width(buf), |
1020 purple_request_field_image_get_scale_x(field) * gdk_pixbuf_get_width(buf), |
| 1031 purple_request_field_image_get_scale_y(field) * gdk_pixbuf_get_height(buf), |
1021 purple_request_field_image_get_scale_y(field) * gdk_pixbuf_get_height(buf), |
| 1032 GDK_INTERP_BILINEAR); |
1022 GDK_INTERP_BILINEAR); |
| 1033 widget = gtk_image_new_from_pixbuf(scale); |
1023 widget = gtk_image_new_from_pixbuf(scale); |
| 1034 g_object_unref(G_OBJECT(loader)); |
1024 g_object_unref(G_OBJECT(buf)); |
| 1035 g_object_unref(G_OBJECT(scale)); |
1025 g_object_unref(G_OBJECT(scale)); |
| 1036 |
1026 |
| 1037 return widget; |
1027 return widget; |
| 1038 } |
1028 } |
| 1039 |
1029 |
| 1130 { |
1120 { |
| 1131 const char *icon_path = (const char *)icons->data; |
1121 const char *icon_path = (const char *)icons->data; |
| 1132 GdkPixbuf* pixbuf = NULL; |
1122 GdkPixbuf* pixbuf = NULL; |
| 1133 |
1123 |
| 1134 if (icon_path) |
1124 if (icon_path) |
| 1135 pixbuf = gdk_pixbuf_new_from_file(icon_path, NULL); |
1125 pixbuf = pidgin_pixbuf_new_from_file(icon_path); |
| 1136 |
1126 |
| 1137 gtk_list_store_set(store, &iter, |
1127 gtk_list_store_set(store, &iter, |
| 1138 0, purple_request_field_list_get_data(field, text), |
1128 0, purple_request_field_list_get_data(field, text), |
| 1139 1, text, |
1129 1, text, |
| 1140 2, pixbuf, |
1130 2, pixbuf, |