char program[1024];
Eina_List *l;
struct ds_tizen_blur_state *state;
+ Eina_Bool region_changed = EINA_FALSE, radius_changed = EINA_FALSE;
blur = container_of(listener, E_Blur, commit_listener);
if (!blur->ec) return;
state = ds_tizen_blur_get_state(blur->tizen_blur);
if (!state) return;
- blur->radius = state->radius;
- pixman_region32_copy(&blur->region, &state->region);
+ if ((state->committed & DS_TIZEN_BLUR_STATE_REGION) &&
+ (!pixman_region32_equal(&blur->region, &state->region)))
+ {
+ pixman_region32_copy(&blur->region, &state->region);
+ region_changed = EINA_TRUE;
+ }
+
+ if ((state->committed & DS_TIZEN_BLUR_STATE_RADIUS) &&
+ (blur->radius != state->radius))
+ {
+ blur->radius = state->radius;
+ radius_changed = EINA_TRUE;
+ }
if (blur->radius)
{
snprintf(program, sizeof(program), "blur (%d) padding_set (0)", blur->radius);
- if (state->committed & DS_TIZEN_BLUR_STATE_REGION)
+ if (region_changed)
{
EINA_LIST_FREE(blur->blur_objs, blur_obj)
_e_blur_object_destroy(blur_obj);
_e_blur_hook_call(E_BLUR_HOOK_SET, blur);
}
- else if (state->committed & DS_TIZEN_BLUR_STATE_RADIUS)
+ else if (radius_changed)
{
EINA_LIST_FOREACH(blur->blur_objs, l, blur_obj)
{