e_hwc_window: add E_HWC_WINDOW_RESTRICTION_BLUR 83/307783/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 11 Mar 2024 04:34:14 +0000 (13:34 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 13 Mar 2024 05:03:49 +0000 (14:03 +0900)
The hwc_window under blur_obj should be composited by evas

Change-Id: I8778efab2aac1d68c7e62e8632ae8014719fd3d1

src/bin/e_hwc_window.c
src/bin/e_hwc_window_intern.h
src/bin/e_hwc_windows.c

index c418d05..e50decc 100644 (file)
@@ -16,6 +16,7 @@
 #include "e_client_intern.h"
 #include "e_comp_object_intern.h"
 #include "e_utils_intern.h"
+#include "e_blur_intern.h"
 
 #include <pixman.h>
 #include <wayland-tbm-server.h>
@@ -70,6 +71,7 @@ static Eina_List *hwc_window_comp_wl_hooks = NULL;
 static Eina_List *hwc_window_event_hdlrs = NULL;
 static Eina_List *hwc_window_comp_object_hooks = NULL;
 static Eina_List *hwc_window_pixmap_hooks = NULL;
+static Eina_List *hwc_window_blur_hooks = NULL;
 
 static int _e_hwc_window_hooks_delete = 0;
 static int _e_hwc_window_hooks_walking = 0;
@@ -1418,6 +1420,36 @@ _e_hwc_window_cb_pixmap_buffer_clear_done(void *data EINA_UNUSED, E_Pixmap *cp)
    e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_BUFFER);
 }
 
+static void
+_e_hwc_window_cb_blur_set(void *data, E_Blur *blur)
+{
+   E_Client *ec;
+   E_Hwc_Window *hwc_window;
+
+   ec = e_blur_client_get(blur);
+   if (!ec) return;
+
+   hwc_window = ec->hwc_window;
+   if (!hwc_window) return;
+
+   e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
+}
+
+static void
+_e_hwc_window_cb_blur_unset(void *data, E_Blur *blur)
+{
+   E_Client *ec;
+   E_Hwc_Window *hwc_window;
+
+   ec = e_blur_client_get(blur);
+   if (!ec) return;
+
+   hwc_window = ec->hwc_window;
+   if (!hwc_window) return;
+
+   e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE);
+}
+
 EINTERN Eina_Bool
 e_hwc_window_init(void)
 {
@@ -1445,6 +1477,10 @@ e_hwc_window_init(void)
                            _e_hwc_window_cb_effect_start, NULL);
    E_COMP_COMP_HOOK_APPEND(hwc_window_comp_object_hooks, E_COMP_OBJECT_HOOK_EFFECT_END,
                            _e_hwc_window_cb_effect_end, NULL);
+   E_BLUR_HOOK_APPEND(hwc_window_blur_hooks, E_BLUR_HOOK_SET,
+                      _e_hwc_window_cb_blur_set, NULL);
+   E_BLUR_HOOK_APPEND(hwc_window_blur_hooks, E_BLUR_HOOK_UNSET,
+                      _e_hwc_window_cb_blur_unset, NULL);
 
    return EINA_TRUE;
 }
@@ -1457,6 +1493,7 @@ e_hwc_window_deinit(void)
    E_FREE_LIST(hwc_window_comp_wl_hooks, e_comp_wl_hook_del);
    E_FREE_LIST(hwc_window_comp_object_hooks, e_comp_object_hook_del);
    E_FREE_LIST(hwc_window_pixmap_hooks, e_pixmap_hook_del);
+   E_FREE_LIST(hwc_window_blur_hooks, e_blur_hook_del);
 }
 
 EINTERN E_Hwc_Window *
index e80c555..759f6c2 100644 (file)
@@ -47,6 +47,7 @@ typedef enum _E_Hwc_Window_Restriction
    E_HWC_WINDOW_RESTRICTION_BLEND_EQUATION = (1 << 14),
    E_HWC_WINDOW_RESTRICTION_QUEUE_UNSET_WAITING = (1 << 15),
    E_HWC_WINDOW_RESTRICTION_QUICKPANEL_OPEN = (1 << 16),
+   E_HWC_WINDOW_RESTRICTION_BLUR = (1 << 17),
 } E_Hwc_Window_Restriction;
 
 typedef enum _E_Hwc_Window_Hook_Point
index 2c6a866..c5b2a16 100644 (file)
@@ -921,6 +921,7 @@ _e_hwc_windows_visible_windows_list_get(E_Hwc *hwc)
    Eina_Bool effect_client;
    Evas_Render_Op render_op;
    Eina_Bool qps_visible;
+   Eina_Bool blur_visible = EINA_FALSE;
 
    ecore_evas_geometry_get(e_comp->ee, NULL, NULL, &ee_w, &ee_h);
    qps_visible = e_qps_visible_get();
@@ -928,7 +929,14 @@ _e_hwc_windows_visible_windows_list_get(E_Hwc *hwc)
    for (o = evas_object_top_get(e_comp->evas); o; o = evas_object_below_get(o))
      {
         ec = _e_hwc_windows_client_get_from_object(o, &effect_client);
-        if (!ec) continue;
+        if (!ec)
+          {
+             if ((evas_object_visible_get(o)) &&
+                 (!e_util_strcmp(evas_object_name_get(o), "blur_obj")))
+               blur_visible = EINA_TRUE;
+
+             continue;
+          }
 
         hwc_window = ec->hwc_window;
         if (!hwc_window) continue;
@@ -940,6 +948,11 @@ _e_hwc_windows_visible_windows_list_get(E_Hwc *hwc)
         else
           e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_QUICKPANEL_OPEN);
 
+        if (blur_visible)
+          e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_BLUR);
+        else
+          e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_BLUR);
+
         if (hwc)
           {
              zone = hwc_window->zone;