diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 8a3ea0b3aa..bad2ede840 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -102,20 +102,22 @@ typedef enum _Evas_Callback_Type EVAS_CALLBACK_CHANGED_SIZE_HINTS, /**< Size hints changed event */ EVAS_CALLBACK_IMAGE_PRELOADED, /**< Image as been preloaded */ - /* * The following events are only for use with canvas * evas_event_callback_add(): */ - EVAS_CALLBACK_CANVAS_FOCUS_IN, /**< Canvas got focus as a whole */ EVAS_CALLBACK_CANVAS_FOCUS_OUT, /**< Canvas lost focus as a whole */ EVAS_CALLBACK_RENDER_FLUSH_PRE, /**< Called just before rendering is updated on the canvas target */ EVAS_CALLBACK_RENDER_FLUSH_POST, /**< Called just after rendering is updated on the canvas target */ - EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, /**< Canvas object got focus */ EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, /**< Canvas object lost focus */ + /* + * More object event types - see evas_object_event_callback_add(): + */ + EVAS_CALLBACK_IMAGE_UNLOADED, /**< Image data has been unloaded (by some mechanims in evas that throws out original image data) */ + /* the following id no event number, but a sentinel: */ EVAS_CALLBACK_LAST /**< keep as last element/sentinel -- not really an event */ } Evas_Callback_Type; /**< The type of event to trigger the callback */ diff --git a/legacy/evas/src/lib/cache/evas_cache_image.c b/legacy/evas/src/lib/cache/evas_cache_image.c index 4d200a7d0c..b75261d35b 100644 --- a/legacy/evas/src/lib/cache/evas_cache_image.c +++ b/legacy/evas/src/lib/cache/evas_cache_image.c @@ -1443,6 +1443,7 @@ evas_cache_image_unload_data(Image_Entry *im) #ifdef BUILD_ASYNC_PRELOAD LKU(im->lock); #endif + //FIXME: imagedataunload - inform owners } static Eina_Bool diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index c795b2f314..029b7eff3e 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -1340,6 +1340,7 @@ evas_object_image_reload(Evas_Object *obj) if (o->engine_data) o->engine_data = obj->layer->evas->engine.func->image_dirty_region(obj->layer->evas->engine.data.output, o->engine_data, 0, 0, o->cur.image.w, o->cur.image.h); evas_object_image_unload(obj, 1); + evas_object_inform_call_image_unloaded(obj); evas_object_image_load(obj); o->prev.file = NULL; o->prev.key = NULL; @@ -1623,6 +1624,7 @@ evas_object_image_load_dpi_set(Evas_Object *obj, double dpi) if (o->cur.file) { evas_object_image_unload(obj, 0); + evas_object_inform_call_image_unloaded(obj); evas_object_image_load(obj); o->changed = 1; evas_object_change(obj); @@ -1681,6 +1683,7 @@ evas_object_image_load_size_set(Evas_Object *obj, int w, int h) if (o->cur.file) { evas_object_image_unload(obj, 0); + evas_object_inform_call_image_unloaded(obj); evas_object_image_load(obj); o->changed = 1; evas_object_change(obj); @@ -1739,6 +1742,7 @@ evas_object_image_load_scale_down_set(Evas_Object *obj, int scale_down) if (o->cur.file) { evas_object_image_unload(obj, 0); + evas_object_inform_call_image_unloaded(obj); evas_object_image_load(obj); o->changed = 1; evas_object_change(obj); @@ -1789,6 +1793,7 @@ evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int w, int h) if (o->cur.file) { evas_object_image_unload(obj, 0); + evas_object_inform_call_image_unloaded(obj); evas_object_image_load(obj); o->changed = 1; evas_object_change(obj); @@ -2124,6 +2129,7 @@ evas_image_cache_reload(Evas *e) if (o->magic == MAGIC_OBJ_IMAGE) { evas_object_image_unload(obj, 1); + evas_object_inform_call_image_unloaded(obj); } } } @@ -2211,8 +2217,13 @@ evas_object_image_unload(Evas_Object *obj, Eina_Bool dirty) o->cur.image.w, o->cur.image.h); } if (o->engine_data) - obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output, - o->engine_data); + { + obj->layer->evas->engine.func->image_data_preload_cancel(obj->layer->evas->engine.data.output, + o->engine_data, + obj); + obj->layer->evas->engine.func->image_free(obj->layer->evas->engine.data.output, + o->engine_data); + } o->engine_data = NULL; o->load_error = EVAS_LOAD_ERROR_NONE; o->cur.has_alpha = 1; diff --git a/legacy/evas/src/lib/canvas/evas_object_inform.c b/legacy/evas/src/lib/canvas/evas_object_inform.c index 90ead99ae5..d1dd6452e5 100644 --- a/legacy/evas/src/lib/canvas/evas_object_inform.c +++ b/legacy/evas/src/lib/canvas/evas_object_inform.c @@ -65,3 +65,12 @@ evas_object_inform_call_image_preloaded(Evas_Object *obj) evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_PRELOADED, NULL); _evas_post_event_callback_call(obj->layer->evas); } + +void +evas_object_inform_call_image_unloaded(Evas_Object *obj) +{ + _evas_object_event_new(); + + evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_UNLOADED, NULL); + _evas_post_event_callback_call(obj->layer->evas); +} diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index 453a4fc6fa..c5b30287de 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -1558,7 +1558,11 @@ evas_render_dump(Evas *e) Evas_Object *obj; EINA_INLIST_FOREACH(lay->objects, obj) - _evas_render_dump_map_surfaces(obj); + { + if ((obj->type) && (!strcmp(obj->type, "image"))) + evas_object_inform_call_image_unloaded(obj); + _evas_render_dump_map_surfaces(obj); + } } if ((e->engine.func) && (e->engine.func->output_dump) && (e->engine.data.output)) diff --git a/legacy/evas/src/lib/engines/common/evas_image_scalecache.c b/legacy/evas/src/lib/engines/common/evas_image_scalecache.c index 52a48a47ab..c479e3225c 100644 --- a/legacy/evas/src/lib/engines/common/evas_image_scalecache.c +++ b/legacy/evas/src/lib/engines/common/evas_image_scalecache.c @@ -743,6 +743,7 @@ evas_common_rgba_image_scalecache_do(Image_Entry *ie, RGBA_Image *dst, if ((dounload) || (im->cache.orig_usage < (im->cache.newest_usage / 20))) { + //FIXME: imagedataunload - inform owners evas_common_rgba_image_unload(&im->cache_entry); } } diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 737ab72d34..3984c760f2 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -756,6 +756,7 @@ void evas_object_inform_call_resize(Evas_Object *obj); 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_intercept_cleanup(Evas_Object *obj); int evas_object_intercept_call_show(Evas_Object *obj); int evas_object_intercept_call_hide(Evas_Object *obj);