diff --git a/src/lib/evas/canvas/evas_image_private.h b/src/lib/evas/canvas/evas_image_private.h index ef76267968..ac7b29c574 100644 --- a/src/lib/evas/canvas/evas_image_private.h +++ b/src/lib/evas/canvas/evas_image_private.h @@ -148,6 +148,7 @@ struct _Evas_Image_Data Eina_Bool legacy_type : 1; Eina_Bool skip_head : 1; Eina_Bool can_scanout : 1; + Eina_Bool plane_status : 1; }; /* shared functions between legacy and new eo classes */ diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index cd11d54914..7834ce087e 100644 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -55,6 +55,7 @@ static void evas_object_image_render_prepare(Evas_Object *obj, Evas_Obje static void evas_object_image_filled_resize_listener(void *data, Evas *eo_e, Evas_Object *eo_obj, void *einfo); static int evas_object_image_is_on_plane(Evas_Object *obj EINA_UNUSED, Evas_Object_Protected_Data *pd EINA_UNUSED, void *type_private_data); +static int evas_object_image_plane_changed(Evas_Object *obj EINA_UNUSED, Evas_Object_Protected_Data *pd EINA_UNUSED, void *type_private_data); static const Evas_Object_Func object_func = { /* methods (compulsory) */ @@ -76,6 +77,7 @@ static const Evas_Object_Func object_func = evas_object_image_can_map, evas_object_image_render_prepare, // render_prepare evas_object_image_is_on_plane, + evas_object_image_plane_changed }; static const Evas_Object_Image_Load_Opts default_load_opts = { @@ -1753,6 +1755,21 @@ evas_object_image_is_on_plane(Evas_Object *obj EINA_UNUSED, Evas_Object_Protecte if (o->plane) return 1; return 0; } + +static int +evas_object_image_plane_changed(Evas_Object *obj EINA_UNUSED, Evas_Object_Protected_Data *pd EINA_UNUSED, void *type_private_data) +{ + Evas_Image_Data *o = type_private_data; + + if (!!o->plane != o->plane_status) + { + o->plane_status = !!o->plane; + return 1; + } + + return 0; +} + static void evas_object_image_render(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, void *type_private_data, void *engine, void *output, void *context, void *surface, int x, int y, Eina_Bool do_async) diff --git a/src/lib/evas/include/evas_inline.x b/src/lib/evas/include/evas_inline.x index 739a59b32d..c83c1a0bc6 100644 --- a/src/lib/evas/include/evas_inline.x +++ b/src/lib/evas/include/evas_inline.x @@ -125,6 +125,14 @@ evas_object_is_on_plane(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) return 0; } +static inline int +evas_object_plane_changed(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj) +{ + if (obj->func->plane_changed) + return obj->func->plane_changed(eo_obj, obj, obj->private_data); + return 0; +} + static inline int evas_event_freezes_through(Evas_Object *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj) { diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index db2498708a..76621161af 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1261,6 +1261,7 @@ struct _Evas_Object_Func // from disk or uploading to texture etc. void (*render_prepare) (Evas_Object *obj, Evas_Object_Protected_Data *pd, Eina_Bool do_async); int (*is_on_plane) (Evas_Object *obj, Evas_Object_Protected_Data *pd, void *type_private_data); + int (*plane_changed) (Evas_Object *obj, Evas_Object_Protected_Data *pd, void *type_private_data); }; struct _Evas_Func