derekf pushed a commit to branch master.

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

commit ac065749a667b96140efcba62d334993fd12c44e
Author: Derek Foreman <derek.foreman.sams...@gmail.com>
Date:   Mon Oct 22 10:22:26 2018 -0500

    evas_object: Add function to test if hardware plane status changed
    
    This is used to check if an object has been put on or removed from a
    hardware plane between calls.
    
    Signed-off-by: Derek Foreman <derek.foreman.sams...@gmail.com>
    Reviewed-by: Cedric BAIL <cedric.b...@free.fr>
    Differential Revision: https://phab.enlightenment.org/D7192
---
 src/lib/evas/canvas/evas_image_private.h |  1 +
 src/lib/evas/canvas/evas_object_image.c  | 17 +++++++++++++++++
 src/lib/evas/include/evas_inline.x       |  8 ++++++++
 src/lib/evas/include/evas_private.h      |  1 +
 4 files changed, 27 insertions(+)

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

-- 


Reply via email to