]> Pileus Git - ~andy/gtk/commitdiff
Patch taken from maemo-gtk:
authorMichael Natterer <mitch@imendio.com>
Wed, 17 Jan 2007 14:07:01 +0000 (14:07 +0000)
committerMichael Natterer <mitch@src.gnome.org>
Wed, 17 Jan 2007 14:07:01 +0000 (14:07 +0000)
2007-01-17  Michael Natterer  <mitch@imendio.com>

Patch taken from maemo-gtk:

* io-png.c (png_text_to_pixbuf_option): don't call g_convert() on
ASCII strings.

(png_info_callback): set an error when the size_func would scale
the pixbuf away completely.

svn path=/trunk/; revision=17179

gdk-pixbuf/ChangeLog
gdk-pixbuf/io-png.c

index 9f617d1cd1f6ddca15c2dbec687c81e114379aee..9722d53afef7236f6d8f0c96aa8bd49938a8490b 100644 (file)
@@ -1,3 +1,13 @@
+2007-01-17  Michael Natterer  <mitch@imendio.com>
+
+       Patch taken from maemo-gtk:
+
+       * io-png.c (png_text_to_pixbuf_option): don't call g_convert() on
+       ASCII strings.
+
+       (png_info_callback): set an error when the size_func would scale
+       the pixbuf away completely.
+
 2007-01-16  Matthias Clasen  <mclasen@redhat.com>
 
        * gdk-pixbuf-loader.c (gdk_pixbuf_loader_write): Just
index 19a35251f77aa50470c904655845d15b57ea05c1..2c98d63c4a5e8423b9f1863d4e2871f399ff712d 100644 (file)
@@ -204,14 +204,24 @@ png_text_to_pixbuf_option (png_text   text_ptr,
                            gchar    **key,
                            gchar    **value)
 {
-        if (text_ptr.text_length > 0) {
-                *value = g_convert (text_ptr.text, -1, 
-                                    "UTF-8", "ISO-8859-1", 
-                                    NULL, NULL, NULL);
-        }
-        else {
+        gboolean is_ascii = TRUE;
+        int i;
+
+        /* Avoid loading iconv if the text is plain ASCII */
+        for (i = 0; i < text_ptr.text_length; i++)
+                if (text_ptr.text[i] & 0x80) {
+                        is_ascii = FALSE;
+                        break;
+                }
+
+        if (is_ascii) {
                 *value = g_strdup (text_ptr.text);
+        } else {
+                *value = g_convert (text_ptr.text, -1,
+                                     "UTF-8", "ISO-8859-1",
+                                     NULL, NULL, NULL);
         }
+
         if (*value) {
                 *key = g_strconcat ("tEXt::", text_ptr.key, NULL);
                 return TRUE;
@@ -602,6 +612,12 @@ png_info_callback   (png_structp png_read_ptr,
                 
                 if (w == 0 || h == 0) {
                         lc->fatal_error_occurred = TRUE;
+                        if (lc->error && *lc->error == NULL) {
+                                g_set_error (lc->error,
+                                             GDK_PIXBUF_ERROR,
+                                             GDK_PIXBUF_ERROR_FAILED,
+                                             _("Transformed PNG has zero width or height."));
+                        }
                         return;
                 }
         }