From f7f9341419c4fa80dcd4047de9d79f549b9f07c8 Mon Sep 17 00:00:00 2001 From: ChunEon Park Date: Wed, 5 Sep 2012 04:20:42 +0000 Subject: [PATCH] evas/evas_object_image - added EVAS_CALLBACK_IMAGE_RESIZE. SVN revision: 76161 --- legacy/evas/ChangeLog | 4 ++++ legacy/evas/NEWS | 1 + legacy/evas/src/lib/Evas.h | 1 + .../evas/src/lib/canvas/evas_object_image.c | 23 +++++++++++++++++++ .../evas/src/lib/canvas/evas_object_inform.c | 8 +++++++ legacy/evas/src/lib/include/evas_private.h | 1 + 6 files changed, 38 insertions(+) diff --git a/legacy/evas/ChangeLog b/legacy/evas/ChangeLog index 2aaa482844..b1681e12a0 100644 --- a/legacy/evas/ChangeLog +++ b/legacy/evas/ChangeLog @@ -1020,3 +1020,7 @@ need the evas to get the framespace clip object, just directly use the framespace values from the canvas, rather than function call to get those values. + +2012-09-05 ChunEon Park (Hermet) + + * Added EVAS_CALLBACK_IMAGE_RESIZE. Now user have a notify when image data size of the image object is changed. diff --git a/legacy/evas/NEWS b/legacy/evas/NEWS index 6b9664892d..fb0bc688d2 100644 --- a/legacy/evas/NEWS +++ b/legacy/evas/NEWS @@ -6,6 +6,7 @@ Changes since Evas 1.7.0: Additions: * WEBP image loader support. + * EVAS_CALLBACK_IMAGE_RESIZE. Improvements: diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 2854de1d18..8ca7088952 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -425,6 +425,7 @@ typedef enum _Evas_Callback_Type EVAS_CALLBACK_HOLD, /**< Events go on/off hold */ EVAS_CALLBACK_CHANGED_SIZE_HINTS, /**< Size hints changed event */ EVAS_CALLBACK_IMAGE_PRELOADED, /**< Image has been preloaded */ + EVAS_CALLBACK_IMAGE_RESIZE, /**< Image size is changed @since 1.8 */ /* * The following events are only for use with Evas canvases, with diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index f32f649321..6ba36e0324 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -319,6 +319,7 @@ evas_object_image_file_set(Evas_Object *obj, const char *file, const char *key) { Evas_Object_Image *o; Evas_Image_Load_Opts lo; + Eina_Bool resize_call = EINA_FALSE; MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); return; @@ -387,6 +388,10 @@ evas_object_image_file_set(Evas_Object *obj, const char *file, const char *key) stride = w * 4; o->cur.has_alpha = obj->layer->evas->engine.func->image_alpha_get(obj->layer->evas->engine.data.output, o->engine_data); o->cur.cspace = obj->layer->evas->engine.func->image_colorspace_get(obj->layer->evas->engine.data.output, o->engine_data); + + if ((o->cur.image.w != w) || (o->cur.image.h != h)) + resize_call = EINA_TRUE; + o->cur.image.w = w; o->cur.image.h = h; o->cur.image.stride = stride; @@ -397,11 +402,17 @@ evas_object_image_file_set(Evas_Object *obj, const char *file, const char *key) o->load_error = EVAS_LOAD_ERROR_GENERIC; o->cur.has_alpha = 1; o->cur.cspace = EVAS_COLORSPACE_ARGB8888; + + if ((o->cur.image.w != 0) || (o->cur.image.h != 0)) + resize_call = EINA_TRUE; + o->cur.image.w = 0; o->cur.image.h = 0; o->cur.image.stride = 0; } + o->changed = EINA_TRUE; + if (resize_call) evas_object_inform_call_image_resize(obj); evas_object_change(obj); } @@ -822,6 +833,7 @@ evas_object_image_size_set(Evas_Object *obj, int w, int h) */ EVAS_OBJECT_IMAGE_FREE_FILE_AND_KEY(o); o->changed = EINA_TRUE; + evas_object_inform_call_image_resize(obj); evas_object_change(obj); } @@ -913,6 +925,7 @@ evas_object_image_data_set(Evas_Object *obj, void *data) { Evas_Object_Image *o; void *p_data; + Eina_Bool resize_call = EINA_FALSE; MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); return; @@ -968,6 +981,8 @@ evas_object_image_data_set(Evas_Object *obj, void *data) if (o->engine_data) obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output, o->engine_data); o->load_error = EVAS_LOAD_ERROR_NONE; + if ((o->cur.image.w != 0) || (o->cur.image.h != 0)) + resize_call = EINA_TRUE; o->cur.image.w = 0; o->cur.image.h = 0; o->cur.image.stride = 0; @@ -986,6 +1001,7 @@ evas_object_image_data_set(Evas_Object *obj, void *data) o->pixels_checked_out = 0; } o->changed = EINA_TRUE; + if (resize_call) evas_object_inform_call_image_resize(obj); evas_object_change(obj); } @@ -2525,6 +2541,7 @@ static void evas_object_image_unload(Evas_Object *obj, Eina_Bool dirty) { Evas_Object_Image *o; + Eina_Bool resize_call = EINA_FALSE; o = (Evas_Object_Image *)(obj->object_data); @@ -2555,9 +2572,11 @@ evas_object_image_unload(Evas_Object *obj, Eina_Bool dirty) o->load_error = EVAS_LOAD_ERROR_NONE; o->cur.has_alpha = 1; o->cur.cspace = EVAS_COLORSPACE_ARGB8888; + if ((o->cur.image.w != 0) || (o->cur.image.h != 0)) resize_call = EINA_TRUE; o->cur.image.w = 0; o->cur.image.h = 0; o->cur.image.stride = 0; + if (resize_call) evas_object_inform_call_image_resize(obj); } static void @@ -2588,6 +2607,7 @@ evas_object_image_load(Evas_Object *obj) { int w, h; int stride = 0; + Eina_Bool resize_call = EINA_FALSE; obj->layer->evas->engine.func->image_size_get (obj->layer->evas->engine.data.output, @@ -2604,9 +2624,12 @@ evas_object_image_load(Evas_Object *obj) o->cur.cspace = obj->layer->evas->engine.func->image_colorspace_get (obj->layer->evas->engine.data.output, o->engine_data); + if ((o->cur.image.w != w) || (o->cur.image.h != h)) + resize_call = EINA_TRUE; o->cur.image.w = w; o->cur.image.h = h; o->cur.image.stride = stride; + if (resize_call) evas_object_inform_call_image_resize(obj); } else { diff --git a/legacy/evas/src/lib/canvas/evas_object_inform.c b/legacy/evas/src/lib/canvas/evas_object_inform.c index 302da42221..ef1328f627 100644 --- a/legacy/evas/src/lib/canvas/evas_object_inform.c +++ b/legacy/evas/src/lib/canvas/evas_object_inform.c @@ -77,3 +77,11 @@ evas_object_inform_call_image_unloaded(Evas_Object *obj) evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_UNLOADED, NULL, _evas_event_counter); _evas_post_event_callback_call(obj->layer->evas); } + +void +evas_object_inform_call_image_resize(Evas_Object *obj) +{ + _evas_object_event_new(); + evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_RESIZE, NULL, _evas_event_counter); + _evas_post_event_callback_call(obj->layer->evas); +} diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index fc3033f75d..854fa0821f 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -995,6 +995,7 @@ void evas_object_inform_call_restack(Evas_Object *obj); void evas_object_inform_call_changed_size_hints(Evas_Object *obj); void evas_object_inform_call_image_preloaded(Evas_Object *obj); void evas_object_inform_call_image_unloaded(Evas_Object *obj); +void evas_object_inform_call_image_resize(Evas_Object *obj); void evas_object_intercept_cleanup(Evas_Object *obj); int evas_object_intercept_call_show(Evas_Object *obj); int evas_object_intercept_call_hide(Evas_Object *obj);