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 --
