evas: add evas_object_image_extension_can_load_get.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 1 Jun 2011 14:32:08 +0000 (14:32 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 1 Jun 2011 14:32:08 +0000 (14:32 +0000)
This functions let you check if a file could be opened by
Evas_Object_Image. It is threadsafe, and you should use it
from another thread as often as possible :-)

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@59872 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
src/lib/Evas.h
src/lib/canvas/evas_main.c
src/lib/engines/common/evas_image.h
src/lib/engines/common/evas_image_load.c

index 77e3ef8..efbf832 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 2011-05-29  Vincent Torri
 
        * Fix compilation when --disable-async-preload is passed to configure.
+
+2011-06-01  Cedric Bail
+
+       * Add +evas_object_image_extension_can_load_get and
+       evas_object_image_extension_can_load_fast_get that check if a file
+       may be opened by Evas_Object_Image.
index 7734981..e3625ed 100644 (file)
@@ -5237,6 +5237,28 @@ EAPI Evas_Object             *evas_object_image_source_get             (Evas_Obj
 EAPI Eina_Bool                evas_object_image_source_unset           (Evas_Object *obj) EINA_ARG_NONNULL(1);
 
 /**
+ * Check if a file extention may be supported by @ref Evas_Object_Image.
+ *
+ * @param file The file to check
+ * @return EINA_TRUE if we may be able to opeen it, EINA_FALSE if it's unlikely.
+ *
+ * If file is a Eina_Stringshare, use directly @ref evas_object_image_extension_can_load_fast_get.
+ *
+ * This functions is threadsafe.
+ */
+EAPI Eina_Bool evas_object_image_extension_can_load_get(const char *file);
+
+/**
+ * Check if a file extention may be supported by @ref Evas_Object_Image.
+ *
+ * @param file The file to check, it should be an Eina_Stringshare.
+ * @return EINA_TRUE if we may be able to opeen it, EINA_FALSE if it's unlikely.
+ *
+ * This functions is threadsafe.
+ */
+EAPI Eina_Bool evas_object_image_extension_can_load_fast_get(const char *file);
+
+/**
  * @defgroup Evas_Object_Text Text Object Functions
  *
  * Functions that operate on single line, single style text objects.
index 94d9abf..54e0679 100644 (file)
@@ -510,6 +510,25 @@ evas_render_method_list_free(Eina_List *list)
    eina_list_free(list);
 }
 
+EAPI Eina_Bool
+evas_object_image_extension_can_load_get(const char *file)
+{
+   const char *tmp;
+   Eina_Bool result;
+
+   tmp = eina_stringshare_add(file);
+   result = evas_common_extension_can_load_get(tmp);
+   eina_stringshare_del(tmp);
+
+   return result;
+}
+
+EAPI Eina_Bool
+evas_object_image_extension_can_load_fast_get(const char *file)
+{
+   return evas_common_extension_can_load_get(file);
+}
+
 EAPI void
 evas_pointer_output_xy_get(const Evas *e, int *x, int *y)
 {
index 618ea5a..6d5c620 100644 (file)
@@ -57,4 +57,6 @@ EAPI int evas_common_load_rgba_image_data_from_file   (Image_Entry *im);
 
 void _evas_common_rgba_image_post_surface(Image_Entry *ie);
 
+EAPI Eina_Bool evas_common_extension_can_load_get(const char *file);
+
 #endif /* _EVAS_IMAGE_H */
index c0486b1..fcbf7fa 100644 (file)
@@ -8,61 +8,65 @@
 
 struct ext_loader_s
 {
+   unsigned int length;
    const char *extension;
    const char *loader;
 };
 
+#define MATCHING(Ext, Module)                   \
+  { sizeof (Ext), Ext, Module }
+
 static const struct ext_loader_s loaders[] =
 { /* map extensions to loaders to use for good first-guess tries */
-   { ".png", "png" },
-   { ".jpg", "jpeg" },
-   { ".jpeg", "jpeg" },
-   { ".jfif", "jpeg" },
-   { ".eet", "eet" },
-   { ".edj", "eet" },
-   { ".eap", "eet" },
-   { ".edb", "edb" },
-   { ".xpm", "xpm" },
-   { ".tiff", "tiff" },
-   { ".tif", "tiff" },
-   { ".svg", "svg" },
-   { ".svgz", "svg" },
-   { ".svg.gz", "svg" },
-   { ".gif", "gif" },
-   { ".pbm", "pmaps" },
-   { ".pgm", "pmaps" },
-   { ".ppm", "pmaps" },
-   { ".pnm", "pmaps" },
-   { ".bmp", "bmp" },
-   { ".tga", "tga" },
-   { ".wbmp", "wbmp" },
-   { ".ico", "ico" },
-   { ".cur", "ico" },
-   { ".psd", "psd" },
-   { ".pdf", "generic" },
-   { ".ps", "generic" },
-   { ".xcf", "generic" },
-   { ".xcf.gz", "generic" },
-   { ".arw", "generic" },
-   { ".cr2", "generic" },
-   { ".crw", "generic" },
-   { ".dcr", "generic" },
-   { ".dng", "generic" },
-   { ".k25", "generic" },
-   { ".kdc", "generic" },
-   { ".erf", "generic" },
-   { ".mrw", "generic" },
-   { ".nef", "generic" },
-   { ".nrf", "generic" },
-   { ".nrw", "generic" },
-   { ".orf", "generic" },
-   { ".raw", "generic" },
-   { ".rw2", "generic" },
-   { ".pef", "generic" },
-   { ".raf", "generic" },
-   { ".sr2", "generic" },
-   { ".srf", "generic" },
-   { ".x3f", "generic" }
+   MATCHING(".png", "png"),
+   MATCHING(".jpg", "jpeg"),
+   MATCHING(".jpeg", "jpeg"),
+   MATCHING(".jfif", "jpeg"),
+   MATCHING(".eet", "eet"),
+   MATCHING(".edj", "eet"),
+   MATCHING(".eap", "eet"),
+   MATCHING(".edb", "edb"),
+   MATCHING(".xpm", "xpm"),
+   MATCHING(".tiff", "tiff"),
+   MATCHING(".tif", "tiff"),
+   MATCHING(".svg", "svg"),
+   MATCHING(".svgz", "svg"),
+   MATCHING(".svg.gz", "svg"),
+   MATCHING(".gif", "gif"),
+   MATCHING(".pbm", "pmaps"),
+   MATCHING(".pgm", "pmaps"),
+   MATCHING(".ppm", "pmaps"),
+   MATCHING(".pnm", "pmaps"),
+   MATCHING(".bmp", "bmp"),
+   MATCHING(".tga", "tga"),
+   MATCHING(".wbmp", "wbmp"),
+   MATCHING(".ico", "ico"),
+   MATCHING(".cur", "ico"),
+   MATCHING(".psd", "psd"),
+   MATCHING(".pdf", "generic"),
+   MATCHING(".ps", "generic"),
+   MATCHING(".xcf", "generic"),
+   MATCHING(".xcf.gz", "generic"),
+   MATCHING(".arw", "generic"),
+   MATCHING(".cr2", "generic"),
+   MATCHING(".crw", "generic"),
+   MATCHING(".dcr", "generic"),
+   MATCHING(".dng", "generic"),
+   MATCHING(".k25", "generic"),
+   MATCHING(".kdc", "generic"),
+   MATCHING(".erf", "generic"),
+   MATCHING(".mrw", "generic"),
+   MATCHING(".nef", "generic"),
+   MATCHING(".nrf", "generic"),
+   MATCHING(".nrw", "generic"),
+   MATCHING(".orf", "generic"),
+   MATCHING(".raw", "generic"),
+   MATCHING(".rw2", "generic"),
+   MATCHING(".pef", "generic"),
+   MATCHING(".raf", "generic"),
+   MATCHING(".sr2", "generic"),
+   MATCHING(".srf", "generic"),
+   MATCHING(".x3f", "generic")
 };
 
 static const char *loaders_name[] =
@@ -292,3 +296,23 @@ evas_common_load_rgba_image_data_from_file(Image_Entry *ie)
 
    return EVAS_LOAD_ERROR_NONE;
 }
+
+EAPI Eina_Bool
+evas_common_extension_can_load_get(const char *file)
+{
+   unsigned int length;
+   unsigned int i;
+
+   length = eina_stringshare_strlen(file) + 1;
+   if (length < 5) return EINA_FALSE;
+
+   for (i = 0; i < sizeof (loaders) / sizeof (struct ext_loader_s); ++i)
+     {
+        if (loaders[i].length > length) continue;
+
+        if (!strcasecmp(loaders[i].extension, file + length - loaders[i].length))
+          return EINA_TRUE;
+     }
+
+   return EINA_FALSE;
+}