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
This commit is contained in:
Shinwoo Kim 2019-07-25 15:02:02 +09:00 committed by Hermet Park
parent 38c4e34533
commit 5f1f361c08
2 changed files with 9 additions and 1 deletions

View File

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

View File

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