[gtk+/gtk-3-8] gtkicontheme: check for GdkPixbuf first



commit 1e93ed963022d82936f1bfccfab8d8a8b3f9d4cc
Author: Ryan Lortie <desrt desrt ca>
Date:   Fri Aug 2 15:05:06 2013 +0200

    gtkicontheme: check for GdkPixbuf first
    
    We checked for G_IS_LOADABLE_ICON() before GDK_IS_PIXBUF().
    
    Since we made GdkPixbuf implement GLoadableIcon, the special case for
    pixbufs is never used, and the much much slower GLoadableIcon path is
    taken instead.  Move the GdkPixbuf one to be first to fix that.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=705320

 gtk/gtkicontheme.c |   68 ++++++++++++++++++++++++++--------------------------
 1 files changed, 34 insertions(+), 34 deletions(-)
---
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index 38f0f73..e5234fd 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -4881,7 +4881,40 @@ gtk_icon_theme_lookup_by_gicon (GtkIconTheme       *icon_theme,
   g_return_val_if_fail (GTK_IS_ICON_THEME (icon_theme), NULL);
   g_return_val_if_fail (G_IS_ICON (icon), NULL);
 
-  if (G_IS_LOADABLE_ICON (icon))
+  if (GDK_IS_PIXBUF (icon))
+    {
+      GdkPixbuf *pixbuf;
+
+      pixbuf = GDK_PIXBUF (icon);
+
+      if ((flags & GTK_ICON_LOOKUP_FORCE_SIZE) != 0)
+        {
+          gint width, height, max;
+          gdouble scale;
+          GdkPixbuf *scaled;
+
+          width = gdk_pixbuf_get_width (pixbuf);
+          height = gdk_pixbuf_get_height (pixbuf);
+          max = MAX (width, height);
+          scale = (gdouble) size / (gdouble) max;
+
+          scaled = gdk_pixbuf_scale_simple (pixbuf,
+                                            0.5 + width * scale,
+                                            0.5 + height * scale,
+                                            GDK_INTERP_BILINEAR);
+
+          info = gtk_icon_info_new_for_pixbuf (icon_theme, scaled);
+
+          g_object_unref (scaled);
+        }
+      else
+        {
+          info = gtk_icon_info_new_for_pixbuf (icon_theme, pixbuf);
+        }
+
+      return info;
+    }
+  else if (G_IS_LOADABLE_ICON (icon))
     {
       info = icon_info_new ();
       info->loadable = G_LOADABLE_ICON (g_object_ref (icon));
@@ -4944,39 +4977,6 @@ gtk_icon_theme_lookup_by_gicon (GtkIconTheme       *icon_theme,
       else
         return NULL;
     }
-  else if (GDK_IS_PIXBUF (icon))
-    {
-      GdkPixbuf *pixbuf;
-
-      pixbuf = GDK_PIXBUF (icon);
-
-      if ((flags & GTK_ICON_LOOKUP_FORCE_SIZE) != 0)
-       {
-         gint width, height, max;
-         gdouble scale;
-         GdkPixbuf *scaled;
-
-         width = gdk_pixbuf_get_width (pixbuf);
-         height = gdk_pixbuf_get_height (pixbuf);
-         max = MAX (width, height);
-         scale = (gdouble) size / (gdouble) max;
-
-         scaled = gdk_pixbuf_scale_simple (pixbuf,
-                                           0.5 + width * scale,
-                                           0.5 + height * scale,
-                                           GDK_INTERP_BILINEAR);
-
-         info = gtk_icon_info_new_for_pixbuf (icon_theme, scaled);
-
-         g_object_unref (scaled);
-       }
-      else
-       {
-         info = gtk_icon_info_new_for_pixbuf (icon_theme, pixbuf);
-       }
-
-      return info;
-    }
 
   return NULL;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]