e_blur: update the blur object only when region and radius are changed 51/308451/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Wed, 13 Mar 2024 07:50:37 +0000 (16:50 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 26 Mar 2024 01:38:22 +0000 (10:38 +0900)
Change-Id: I8102ddd7c2e7821193c8f8327303611a28fad233

src/bin/e_blur.c

index c088c57..aba5cfa 100644 (file)
@@ -183,6 +183,7 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data)
    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;
@@ -190,14 +191,25 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data)
    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);
@@ -230,7 +242,7 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data)
 
              _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)
                {