jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=91e0bdb1e78b4d6505702600bde52e012b8d2679

commit 91e0bdb1e78b4d6505702600bde52e012b8d2679
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Mon Mar 21 21:08:29 2016 +0900

    Evas: Simplify direct access to image data
    
    This should avoid issues with image_data_get from the engines,
    when we really just want to fetch the original data pointer.
---
 src/lib/evas/canvas/efl_canvas_image.c                  | 11 ++---------
 src/lib/evas/canvas/evas_object_image.c                 |  4 ++--
 src/lib/evas/include/evas_private.h                     |  2 +-
 src/modules/evas/engines/gl_cocoa/evas_engine.c         | 16 ++++++----------
 src/modules/evas/engines/gl_generic/evas_engine.c       | 16 ++++++----------
 src/modules/evas/engines/software_generic/evas_engine.c | 16 ++++++----------
 6 files changed, 23 insertions(+), 42 deletions(-)

diff --git a/src/lib/evas/canvas/efl_canvas_image.c 
b/src/lib/evas/canvas/efl_canvas_image.c
index 6d088fe..14a0274 100644
--- a/src/lib/evas/canvas/efl_canvas_image.c
+++ b/src/lib/evas/canvas/efl_canvas_image.c
@@ -709,18 +709,11 @@ _efl_canvas_image_efl_gfx_buffer_buffer_data_get(Eo 
*eo_obj, void *_pd EINA_UNUS
 {
    Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, 
EVAS_OBJECT_CLASS);
    Evas_Image_Data *o = eo_data_scope_get(eo_obj, EVAS_IMAGE_CLASS);
-   DATA32 *data = NULL;
 
-   if (!o->buffer_data_set || !o->engine_data || !ENFN->image_data_has)
+   if (!o->buffer_data_set || !o->engine_data || !ENFN->image_data_direct)
      return NULL;
 
-   if (ENFN->image_data_has(ENDT, o->engine_data, NULL))
-     {
-        // FIXME: this is horrible code - need to store ptr somewhere safe
-        o->engine_data = ENFN->image_data_get(ENDT, o->engine_data, 0, &data, 
&o->load_error, NULL);
-     }
-
-   return data;
+   return ENFN->image_data_direct(ENDT, o->engine_data, NULL);
 }
 
 static void
diff --git a/src/lib/evas/canvas/evas_object_image.c 
b/src/lib/evas/canvas/evas_object_image.c
index 92f58a1..12fa3b6 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -850,11 +850,11 @@ _evas_image_efl_file_save(const Eo *eo_obj, 
Evas_Image_Data *o, const char *file
           }
      }
 
-   if (!ENFN->image_data_has)
+   if (!ENFN->image_data_direct)
      pixels = ENFN->image_data_get(ENDT, pixels, 0, &data, &o->load_error, 
&tofree);
    else
      {
-        if (ENFN->image_data_has(ENDT, pixels, &cspace))
+        if (ENFN->image_data_direct(ENDT, pixels, &cspace))
           {
              if ((want_cspace != (int) cspace) && (want_cspace != -1))
                cspace = EVAS_COLORSPACE_ARGB8888;
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index 744d394..49b713d 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1348,7 +1348,7 @@ struct _Evas_Func
    void *(*image_dirty_region)             (void *data, void *image, int x, 
int y, int w, int h);
    void *(*image_data_get)                 (void *data, void *image, int 
to_write, DATA32 **image_data, int *err, Eina_Bool *tofree);
    void *(*image_data_put)                 (void *data, void *image, DATA32 
*image_data);
-   Eina_Bool (*image_data_has)             (void *data, void *image, 
Evas_Colorspace *cspace);
+   void *(*image_data_direct)              (void *data, void *image, 
Evas_Colorspace *cspace);
    void  (*image_data_preload_request)     (void *data, void *image, const Eo 
*target);
    void  (*image_data_preload_cancel)      (void *data, void *image, const Eo 
*target);
    void *(*image_alpha_set)                (void *data, void *image, int 
has_alpha);
diff --git a/src/modules/evas/engines/gl_cocoa/evas_engine.c 
b/src/modules/evas/engines/gl_cocoa/evas_engine.c
index f67ecd1..08b62b5 100644
--- a/src/modules/evas/engines/gl_cocoa/evas_engine.c
+++ b/src/modules/evas/engines/gl_cocoa/evas_engine.c
@@ -477,18 +477,14 @@ eng_image_file_colorspace_get(void *data EINA_UNUSED, 
void *image)
    return im->im->cache_entry.space;
 }
 
-static Eina_Bool
-eng_image_data_has(void *data EINA_UNUSED, void *image, Evas_Colorspace 
*cspace)
+static void *
+eng_image_data_direct(void *data EINA_UNUSED, void *image, Evas_Colorspace 
*cspace)
 {
    Evas_GL_Image *im = image;
 
-   if (!im || !im->im) return EINA_FALSE;
-   if (im->im->image.data)
-     {
-        if (cspace) *cspace = im->im->cache_entry.space;
-        return EINA_TRUE;
-     }
-   return EINA_FALSE;
+   if (!im || !im->im) return NULL;
+   if (cspace) *cspace = im->im->cache_entry.space;
+   return im->im->image.data;
 }
 
 static void
@@ -1381,7 +1377,7 @@ module_open(Evas_Module *em)
    ORD(image_dirty_region);
    ORD(image_data_get);
    ORD(image_data_put);
-   ORD(image_data_has);
+   ORD(image_data_direct);
    ORD(image_data_preload_request);
    ORD(image_data_preload_cancel);
    ORD(image_alpha_set);
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c 
b/src/modules/evas/engines/gl_generic/evas_engine.c
index a672e81..d1d2a6f 100644
--- a/src/modules/evas/engines/gl_generic/evas_engine.c
+++ b/src/modules/evas/engines/gl_generic/evas_engine.c
@@ -265,18 +265,14 @@ eng_image_file_colorspace_get(void *data EINA_UNUSED, 
void *image)
    return im->im->cache_entry.space;
 }
 
-static Eina_Bool
-eng_image_data_has(void *data EINA_UNUSED, void *image, Evas_Colorspace 
*cspace)
+static void *
+eng_image_data_direct(void *data EINA_UNUSED, void *image, Evas_Colorspace 
*cspace)
 {
    Evas_GL_Image *im = image;
 
-   if (!im || !im->im) return EINA_FALSE;
-   if (im->im->image.data)
-     {
-        if (cspace) *cspace = im->im->cache_entry.space;
-        return EINA_TRUE;
-     }
-   return EINA_FALSE;
+   if (!im || !im->im) return NULL;
+   if (cspace) *cspace = im->im->cache_entry.space;
+   return im->im->image.data;
 }
 
 static void
@@ -2827,7 +2823,7 @@ module_open(Evas_Module *em)
    ORD(image_dirty_region);
    ORD(image_data_get);
    ORD(image_data_put);
-   ORD(image_data_has);
+   ORD(image_data_direct);
    ORD(image_data_preload_request);
    ORD(image_data_preload_cancel);
    ORD(image_alpha_set);
diff --git a/src/modules/evas/engines/software_generic/evas_engine.c 
b/src/modules/evas/engines/software_generic/evas_engine.c
index 5be5d5b..8b609a3 100644
--- a/src/modules/evas/engines/software_generic/evas_engine.c
+++ b/src/modules/evas/engines/software_generic/evas_engine.c
@@ -1090,18 +1090,14 @@ eng_image_file_colorspace_get(void *data EINA_UNUSED, 
void *image)
    return im->cache_entry.space;
 }
 
-static Eina_Bool
-eng_image_data_has(void *data EINA_UNUSED, void *image, Evas_Colorspace 
*cspace)
+static void *
+eng_image_data_direct(void *data EINA_UNUSED, void *image, Evas_Colorspace 
*cspace)
 {
    RGBA_Image *im = image;
 
-   if (!im) return EINA_FALSE;
-   if (im->image.data)
-     {
-        if (cspace) *cspace = im->cache_entry.space;
-        return EINA_TRUE;
-     }
-   return EINA_FALSE;
+   if (!im) return NULL;
+   if (cspace) *cspace = im->cache_entry.space;
+   return im->image.data;
 }
 
 static void
@@ -4148,7 +4144,7 @@ static Evas_Func func =
      eng_image_dirty_region,
      eng_image_data_get,
      eng_image_data_put,
-     eng_image_data_has,
+     eng_image_data_direct,
      eng_image_data_preload_request,
      eng_image_data_preload_cancel,
      eng_image_alpha_set,

-- 


Reply via email to