gtk+ r20820 - trunk/gdk-pixbuf



Author: matthiasc
Date: Sat Jul 12 02:37:35 2008
New Revision: 20820
URL: http://svn.gnome.org/viewvc/gtk+?rev=20820&view=rev

Log:
2008-07-11  Matthias Clasen  <mclasen redhat com>

        * gdk-pixbuf-io.c: Use GIO for sniffing image types, except
        on Win32, where GIO doesn't do any sniffing.



Modified:
   trunk/gdk-pixbuf/ChangeLog
   trunk/gdk-pixbuf/gdk-pixbuf-io.c

Modified: trunk/gdk-pixbuf/gdk-pixbuf-io.c
==============================================================================
--- trunk/gdk-pixbuf/gdk-pixbuf-io.c	(original)
+++ trunk/gdk-pixbuf/gdk-pixbuf-io.c	Sat Jul 12 02:37:35 2008
@@ -51,6 +51,12 @@
 #define SNIFF_BUFFER_SIZE 4096
 #define LOAD_BUFFER_SIZE 65536
 
+#ifndef G_OS_WIN32
+/* GIO doesn't do mime sniffing on Win32, so we need to do our own */
+#define GDK_PIXBUF_USE_GIO_MIME 1
+#endif
+
+#ifndef GDK_PIXBUF_USE_GIO_MIME 
 static gint 
 format_check (GdkPixbufModule *module, guchar *buffer, int size)
 {
@@ -102,6 +108,7 @@
 	}
 	return 0;
 }
+#endif
 
 G_LOCK_DEFINE_STATIC (init_lock);
 G_LOCK_DEFINE_STATIC (threadunsafe_loader_lock);
@@ -763,9 +770,33 @@
 {
 	GSList *modules;
 
-	gint score, best = 0;
 	GdkPixbufModule *selected = NULL;
 	gchar *display_name = NULL;
+#ifdef GDK_PIXBUF_USE_GIO_MIME
+	gchar *mime_type;
+	gchar **mimes;
+	gint j;
+
+	mime_type = g_content_type_guess (filename, buffer, size, NULL);
+
+	for (modules = get_file_formats (); modules; modules = g_slist_next (modules)) {
+		GdkPixbufModule *module = (GdkPixbufModule *)modules->data;
+		GdkPixbufFormat *info = module->info;
+
+		if (info->disabled)
+			continue;
+
+		mimes = info->mime_types;
+		for (j = 0; mimes[j] != NULL; j++) {
+			if (g_ascii_strcasecmp (mimes[j], mime_type) == 0) {
+				selected = module;
+				break;
+			}
+		}
+	}
+	g_free (mime_type);
+#else
+	gint score, best = 0;
 
 	for (modules = get_file_formats (); modules; modules = g_slist_next (modules)) {
 		GdkPixbufModule *module = (GdkPixbufModule *)modules->data;
@@ -781,6 +812,8 @@
 		if (score >= 100) 
 			break;
 	}
+#endif
+
 	if (selected != NULL)
 		return selected;
 



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