ecore_wl2: apply new interface for window blur 72/316072/5
authorHosang Kim <hosang12.kim@samsung.com>
Tue, 13 Aug 2024 07:54:59 +0000 (16:54 +0900)
committerkim hosang <hosang12.kim@samsung.com>
Wed, 21 Aug 2024 04:20:17 +0000 (04:20 +0000)
Change-Id: I3e2e2d0950dd58c7e239d6c2ee287f871d425cc2

src/lib/ecore_wl2/Ecore_Wayland2.h
src/lib/ecore_wl2/ecore_wl2_private.h
src/lib/ecore_wl2/ecore_wl2_window.c

index 6befb3a..40d3c77 100644 (file)
@@ -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
index 7127a4e..d49a13a 100644 (file)
@@ -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;
 };
 
index d04b31c..5eb88a3 100644 (file)
@@ -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);
      }
 }