*
* @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
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;
}
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;
_window_blur_create(window);
- if (!window->blur.blur) return;
+ if (!window->blur.blur)
+ {
+ ERR("Failed to create blur");
+ return;
+ }
if (window->blur.radius > 0)
{
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);
}
}