summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2016-03-21 21:08:29 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2016-03-28 16:40:01 +0900
commit91e0bdb1e78b4d6505702600bde52e012b8d2679 (patch)
tree90c940e4266e0661153d2cb7d7a644dd73e780a6
parent08c11608880038e36ebf94fa6db5a24049146de6 (diff)
downloadefl-91e0bdb1e78b4d6505702600bde52e012b8d2679.tar.gz
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.
-rw-r--r--src/lib/evas/canvas/efl_canvas_image.c11
-rw-r--r--src/lib/evas/canvas/evas_object_image.c4
-rw-r--r--src/lib/evas/include/evas_private.h2
-rw-r--r--src/modules/evas/engines/gl_cocoa/evas_engine.c16
-rw-r--r--src/modules/evas/engines/gl_generic/evas_engine.c16
-rw-r--r--src/modules/evas/engines/software_generic/evas_engine.c16
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 6d088feafa..14a0274625 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 92f58a16a6..12fa3b60a5 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 744d394098..49b713db72 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 f67ecd133b..08b62b510e 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 a672e81c1a..d1d2a6fa57 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 5be5d5bddb..8b609a3534 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,