From: Hosang Kim Date: Tue, 13 Aug 2024 07:54:59 +0000 (+0900) Subject: ecore_wl2: apply new interface for window blur X-Git-Tag: accepted/tizen/unified/20240821.165312~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c31ba90ae53d1151e16d32646ee4d687380a4ccc;p=platform%2Fupstream%2Fefl.git ecore_wl2: apply new interface for window blur Change-Id: I3e2e2d0950dd58c7e239d6c2ee287f871d425cc2 --- diff --git a/src/lib/ecore_wl2/Ecore_Wayland2.h b/src/lib/ecore_wl2/Ecore_Wayland2.h index 6befb3a..40d3c77 100644 --- a/src/lib/ecore_wl2/Ecore_Wayland2.h +++ b/src/lib/ecore_wl2/Ecore_Wayland2.h @@ -1288,11 +1288,13 @@ EAPI void ecore_wl2_subsurface_exported_surface_commit(Ecore_Wl2_Subsurface *sub * * @param window The window to set the background blur radius * @param radius The radius of the blur effect + * @param rx The radius of the rounded corners in x direction + * @param ry The radius of the rounded corners in y direction * * @ingroup Ecore_Wl2_Window_Group * @since_tizen 9.0 */ -EAPI void ecore_wl2_window_background_blur_set(Ecore_Wl2_Window *window, int radius); +EAPI void ecore_wl2_window_background_blur_set(Ecore_Wl2_Window *window, int radius, int rx, int ry); /** * @brief Get the background blur radius of a given window diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h b/src/lib/ecore_wl2/ecore_wl2_private.h index 7127a4e..d49a13a 100644 --- a/src/lib/ecore_wl2/ecore_wl2_private.h +++ b/src/lib/ecore_wl2/ecore_wl2_private.h @@ -573,7 +573,10 @@ struct _Ecore_Wl2_Window struct { struct wtz_blur *blur; + struct wtz_blur_rectangle *rect; int radius; + int rx; + int ry; } blur; }; diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index d04b31c..5eb88a3 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -1632,6 +1632,9 @@ ecore_wl2_window_free(Ecore_Wl2_Window *window) if (window->blur.blur) wtz_blur_destroy(window->blur.blur); window->blur.blur = NULL; + if (window->blur.rect) wtz_blur_rectangle_destroy(window->blur.rect); + window->blur.rect = NULL; + if (window->callback) wl_callback_destroy(window->callback); window->callback = NULL; @@ -4831,6 +4834,16 @@ _window_blur_create(Ecore_Wl2_Window *window) } static void +_blur_rectangle_create(Ecore_Wl2_Window *window, int x, int y, int w, int h, int rx, int ry) +{ + if (!window->blur.blur) return; + + if (window->blur.rect) wtz_blur_rectangle_destroy(window->blur.rect); + + window->blur.rect = wtz_blur_create_rectangle(window->blur.blur, x, y, w, h, rx, ry); +} + +static void _background_blur_set(Ecore_Wl2_Window *window) { int w = 0, h = 0; @@ -4839,7 +4852,11 @@ _background_blur_set(Ecore_Wl2_Window *window) _window_blur_create(window); - if (!window->blur.blur) return; + if (!window->blur.blur) + { + ERR("Failed to create blur"); + return; + } if (window->blur.radius > 0) { @@ -4847,30 +4864,32 @@ _background_blur_set(Ecore_Wl2_Window *window) h = window->set_config.geometry.h; } - struct wl_region *region = NULL; + _blur_rectangle_create(window, 0, 0, w, h, window->blur.rx, window->blur.ry); - region = _region_create(window->display->wl.compositor, - 0, 0, w, h); - if (!region) return; + if (!window->blur.rect) + { + ERR("Failed to create blur rectangle"); + return; + } wtz_blur_set_radius(window->blur.blur, window->blur.radius); - wtz_blur_set_region(window->blur.blur, region); - if (region) wl_region_destroy(region); ecore_wl2_window_commit(window, EINA_TRUE); } EAPI void -ecore_wl2_window_background_blur_set(Ecore_Wl2_Window *window, int radius) +ecore_wl2_window_background_blur_set(Ecore_Wl2_Window *window, int radius, int rx, int ry) { EINA_SAFETY_ON_NULL_RETURN(window); EINA_SAFETY_ON_NULL_RETURN(window->surface); EINA_SAFETY_ON_NULL_RETURN(window->display->wl.compositor); EINA_SAFETY_ON_NULL_RETURN(window->display->wl.tz_blur_manager); - if (window->blur.radius != radius) + if (window->blur.radius != radius || window->blur.rx != rx || window->blur.ry != ry) { window->blur.radius = radius; + window->blur.rx = rx; + window->blur.ry = ry; _background_blur_set(window); } }