hermet pushed a commit to branch master.

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

commit 5f1f361c088fe5e2d7bf6efc51921e9bb769c037
Author: Shinwoo Kim <[email protected]>
Date:   Thu Jul 25 15:02:02 2019 +0900

    evas image: apply filter at runtime
    
    Summary:
    If you call efl_gfx_filter_program_set in a mouse event callback,
    it does not work. Because render_pre removes area uisng 
evas_render_update_del.
    
    Reviewers: Hermet, jpeg, jsuya, cedric
    
    Reviewed By: Hermet, cedric
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D9301
---
 src/lib/evas/canvas/evas_image_private.h | 1 +
 src/lib/evas/canvas/evas_object_image.c  | 9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_image_private.h 
b/src/lib/evas/canvas/evas_image_private.h
index 664d60e684..efd53209c8 100644
--- a/src/lib/evas/canvas/evas_image_private.h
+++ b/src/lib/evas/canvas/evas_image_private.h
@@ -146,6 +146,7 @@ struct _Evas_Image_Data
    Eina_Bool         written : 1;
    Eina_Bool         direct_render : 1;
    Eina_Bool         has_filter : 1;
+   Eina_Bool         changed_filter : 1;
    Eina_Bool         buffer_data_set : 1;
    struct
    {
diff --git a/src/lib/evas/canvas/evas_object_image.c 
b/src/lib/evas/canvas/evas_object_image.c
index 50a064a287..0f2c10aa10 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -1937,8 +1937,9 @@ 
_efl_canvas_image_internal_efl_canvas_filter_internal_filter_dirty(Eo *eo_obj, E
 {
    Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, 
EFL_CANVAS_OBJECT_CLASS);
 
-   o->changed = 1;
+   o->changed = EINA_TRUE;
    evas_object_change(eo_obj, obj);
+   o->changed_filter = EINA_TRUE;
 }
 
 EOLIAN static Eina_Bool
@@ -2891,6 +2892,11 @@ evas_object_image_render_pre(Evas_Object *eo_obj,
      }
    if (o->changed)
      {
+        if (o->changed_filter)
+          {
+             evas_object_render_pre_prev_cur_add(&e->clip_changes, eo_obj, 
obj);
+             goto done;
+          }
         if (((o->cur->f) && (!o->prev->f)) ||
             ((!o->cur->f) && (o->prev->f)) ||
             ((o->cur->key) && (!o->prev->key)) ||
@@ -3216,6 +3222,7 @@ done:
           }
      }
    o->changed = EINA_FALSE;
+   o->changed_filter = EINA_FALSE;
 }
 
 static void

-- 


Reply via email to