e_blur: add _e_blur_rectangle_dim_rect functions 37/325137/1
authorhojoon-ryou <hojoon.ryou@samsung.com>
Tue, 27 May 2025 10:49:01 +0000 (19:49 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 4 Jun 2025 03:47:47 +0000 (12:47 +0900)
fix codes to using new functions
also add e_blur_rectangle_show/hide functions

Change-Id: I41940526af822b6614eabae085b97d44393c0c3e

src/bin/server/e_blur.c

index c9a3935e4d2c477bd9434081a838548ddb5611e9..bd0c2846a899bd1ee234f2a2da4a666e0e22b0ee 100644 (file)
@@ -125,6 +125,8 @@ static void _e_blur_behind_ec_set(E_Blur_Behind *blur, E_Client *ec);
 
 static void _e_blur_rectangle_view_image_new(E_Blur_Rectangle *blur_rectangle, E_Client *ec, const char *name);
 static void _e_blur_rectangle_view_image_free(E_Blur_Rectangle *blur_rectangle);
+static void _e_blur_rectangle_dim_rect_new(E_Blur_Rectangle *blur_rectangle, E_Client *ec, const char *name);
+static void _e_blur_rectangle_dim_rect_free(E_Blur_Rectangle *blur_rectangle);
 
 static void
 _e_blur_hooks_clean(void)
@@ -227,6 +229,30 @@ _e_blur_rectangle_remove(E_Blur *blur, E_Blur_Rectangle *blur_rectangle)
      _e_blur_enabled_set(blur, EINA_FALSE);
 }
 
+static void
+_e_blur_rectangle_show(E_Blur_Rectangle *blur_rectangle)
+{
+   e_view_show(e_view_image_view_get(blur_rectangle->view_image));
+
+   if (blur_rectangle->dim_rect)
+     e_view_show(e_view_rect_view_get(blur_rectangle->dim_rect));
+
+   if (blur_rectangle->corner_radius_view_image)
+     e_view_show(e_view_image_view_get(blur_rectangle->corner_radius_view_image));
+}
+
+static void
+_e_blur_rectangle_hide(E_Blur_Rectangle *blur_rectangle)
+{
+   e_view_hide(e_view_image_view_get(blur_rectangle->view_image));
+
+   if (blur_rectangle->dim_rect)
+     e_view_hide(e_view_rect_view_get(blur_rectangle->dim_rect));
+
+   if (blur_rectangle->corner_radius_view_image)
+     e_view_hide(e_view_image_view_get(blur_rectangle->corner_radius_view_image));
+}
+
 static void
 _e_blur_rectangle_free(E_Blur_Rectangle *blur_rectangle)
 {
@@ -235,7 +261,7 @@ _e_blur_rectangle_free(E_Blur_Rectangle *blur_rectangle)
    if (blur_rectangle->blur) _e_blur_rectangle_remove(blur_rectangle->blur, blur_rectangle);
 
    _e_blur_rectangle_view_image_free(blur_rectangle);
-   e_view_destroy(e_view_rect_view_get(blur_rectangle->dim_rect));
+   _e_blur_rectangle_dim_rect_free(blur_rectangle);
 
    if (blur_rectangle->corner_radius_view_image)
      e_view_destroy(e_view_image_view_get(blur_rectangle->corner_radius_view_image));
@@ -303,10 +329,14 @@ _e_blur_rectangle_geometry_set(E_Blur_Rectangle *blur_rectangle, E_Client *ec)
 
    e_view_image_geometry_set(blur_rectangle->view_image,
                              final_x, final_y, final_w, final_h);
-   e_view_position_set(e_view_rect_view_get(blur_rectangle->dim_rect),
-                       final_x, final_y);
-   e_view_rect_size_set(blur_rectangle->dim_rect,
-                        final_w, final_h);
+
+   if (blur_rectangle->dim_rect)
+     {
+        e_view_position_set(e_view_rect_view_get(blur_rectangle->dim_rect),
+                            final_x, final_y);
+        e_view_rect_size_set(blur_rectangle->dim_rect,
+                             final_w, final_h);
+     }
 
    if (blur_rectangle->corner_radius_view_image)
      e_view_image_geometry_set(blur_rectangle->corner_radius_view_image,
@@ -374,10 +404,7 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data)
              if (!vc) continue;
              if (!e_view_client_visible_get(vc)) continue;
 
-             e_view_show(e_view_image_view_get(blur_rectangle->view_image));
-             e_view_show(e_view_rect_view_get(blur_rectangle->dim_rect));
-             if (blur_rectangle->corner_radius_view_image)
-               e_view_show(e_view_image_view_get(blur_rectangle->corner_radius_view_image));
+             _e_blur_rectangle_show(blur_rectangle);
           }
 
         _e_blur_enabled_set(blur, EINA_TRUE);
@@ -385,12 +412,7 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data)
    else
      {
         EINA_LIST_FOREACH(blur->blur_rectangles, l, blur_rectangle)
-          {
-             e_view_hide(e_view_image_view_get(blur_rectangle->view_image));
-             e_view_hide(e_view_rect_view_get(blur_rectangle->dim_rect));
-             if (blur_rectangle->corner_radius_view_image)
-               e_view_hide(e_view_image_view_get(blur_rectangle->corner_radius_view_image));
-          }
+          _e_blur_rectangle_hide(blur_rectangle);
 
         _e_blur_enabled_set(blur, EINA_FALSE);
      }
@@ -407,12 +429,7 @@ _e_blur_cb_show(struct wl_listener *listener, void *data)
    if (!_e_blur_enabled_get(blur)) return;
 
    EINA_LIST_FOREACH(blur->blur_rectangles, l, blur_rectangle)
-     {
-        e_view_show(e_view_image_view_get(blur_rectangle->view_image));
-        e_view_show(e_view_rect_view_get(blur_rectangle->dim_rect));
-        if (blur_rectangle->corner_radius_view_image)
-          e_view_show(e_view_image_view_get(blur_rectangle->corner_radius_view_image));
-     }
+     _e_blur_rectangle_show(blur_rectangle);
 }
 
 static void
@@ -425,12 +442,7 @@ _e_blur_cb_hide(struct wl_listener *listener, void *data)
    blur = wl_container_of(listener, blur, listener.hide);
 
    EINA_LIST_FOREACH(blur->blur_rectangles, l, blur_rectangle)
-     {
-        e_view_hide(e_view_image_view_get(blur_rectangle->view_image));
-        e_view_hide(e_view_rect_view_get(blur_rectangle->dim_rect));
-        if (blur_rectangle->corner_radius_view_image)
-          e_view_hide(e_view_image_view_get(blur_rectangle->corner_radius_view_image));
-     }
+     _e_blur_rectangle_hide(blur_rectangle);
 }
 
 static void
@@ -479,9 +491,14 @@ _e_blur_cb_restack(struct wl_listener *listener, void *data)
         E_View *img_view = e_view_image_view_get(blur_rectangle->view_image);
         e_view_reparent(img_view, layer_tree);
         e_view_place_below(img_view, event_src_view);
-        E_View *dim_view = e_view_rect_view_get(blur_rectangle->dim_rect);
-        e_view_reparent(dim_view, view_tree);
-        e_view_place_below(dim_view, img_view);
+
+        if (blur_rectangle->dim_rect)
+          {
+             E_View *dim_view = e_view_rect_view_get(blur_rectangle->dim_rect);
+             e_view_reparent(dim_view, layer_tree);
+             e_view_place_below(dim_view, img_view);
+          }
+
         if (blur_rectangle->corner_radius_view_image)
           {
              E_View *corner_img_view = e_view_image_view_get(blur_rectangle->corner_radius_view_image);
@@ -613,6 +630,41 @@ _e_blur_rectangle_view_image_free(E_Blur_Rectangle *blur_rectangle)
 {
    if (blur_rectangle && blur_rectangle->view_image)
      e_view_destroy(e_view_image_view_get(blur_rectangle->view_image));
+
+   blur_rectangle->view_image = NULL;
+}
+
+static void
+_e_blur_rectangle_dim_rect_new(E_Blur_Rectangle *blur_rectangle, E_Client *ec, const char *name)
+{
+   E_View_Client *blur_view_client;
+   E_View_Tree *blur_view_client_tree;
+   E_View_Rect *dim_rect = NULL;
+   E_View *dim_view = NULL;
+   int dim_color[4] = {15, 15, 15, 153};
+
+   blur_view_client = e_client_view_get(ec);
+   EINA_SAFETY_ON_NULL_RETURN(blur_view_client);
+   blur_view_client_tree = e_view_parent_get(e_view_client_view_get(blur_view_client));
+   EINA_SAFETY_ON_NULL_RETURN(blur_view_client_tree);
+
+   dim_rect = e_view_rect_create(blur_view_client_tree, 1, 1, dim_color);
+   EINA_SAFETY_ON_NULL_RETURN(dim_rect);
+
+   dim_view = e_view_rect_view_get(dim_rect);
+   e_view_name_set(dim_view, name);
+   e_view_pass_events_set(dim_view, true);
+
+   blur_rectangle->dim_rect = dim_rect;
+}
+
+static void
+_e_blur_rectangle_dim_rect_free(E_Blur_Rectangle *blur_rectangle)
+{
+   if (blur_rectangle && blur_rectangle->dim_rect)
+     e_view_destroy(e_view_rect_view_get(blur_rectangle->dim_rect));
+
+   blur_rectangle->dim_rect = NULL;
 }
 
 static void
@@ -622,8 +674,6 @@ _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
    E_Blur_Rectangle *blur_rectangle;
    struct ds_tizen_blur_rectangle *tizen_blur_rectangle = data;
    E_View_Image *corner_radius_view_image = NULL;
-   E_View_Rect *dim_rect = NULL;
-   int dim_color[4] = {15, 15, 15, 153};
    E_View *dim_view = NULL, *img_view = NULL, *corner_img_view = NULL;
    E_View_Client *blur_view_client;
    E_View_Tree *blur_view_client_tree;
@@ -638,11 +688,6 @@ _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
    blur_view_client_tree = e_canvas_layer_view_tree_get(e_comp_canvas_get(), e_view_layer_index_get(e_view_client_view_get(blur_view_client)));
    EINA_SAFETY_ON_NULL_RETURN(blur_view_client_tree);
 
-   dim_rect = e_view_rect_create(blur_view_client_tree, 1, 1, dim_color);
-   EINA_SAFETY_ON_NULL_RETURN(dim_rect);
-
-   dim_view = e_view_rect_view_get(dim_rect);
-
    blur_rectangle = E_NEW(E_Blur_Rectangle, 1);
    EINA_SAFETY_ON_NULL_GOTO(blur_rectangle, fail);
 
@@ -664,6 +709,10 @@ _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
    EINA_SAFETY_ON_NULL_GOTO(blur_rectangle->view_image, fail);
    img_view = e_view_image_view_get(blur_rectangle->view_image);
 
+   _e_blur_rectangle_dim_rect_new(blur_rectangle, blur->ec, "blur_dim_obj");
+   EINA_SAFETY_ON_NULL_GOTO(blur_rectangle->dim_rect, fail);
+   dim_view = e_view_rect_view_get(blur_rectangle->dim_rect);
+
    if ((blur_rectangle->rx != 0) && (blur_rectangle->ry != 0))
      {
         corner_radius_view_image = e_view_image_filled_create(blur_view_client_tree);
@@ -683,13 +732,12 @@ _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
 
         blur_rectangle->corner_radius_view_image = corner_radius_view_image;
      }
+
    blur_rectangle->blur = blur;
-   blur_rectangle->dim_rect = dim_rect;
 
    _e_blur_rectangle_add(blur, blur_rectangle);
    _e_blur_rectangle_filter_set(blur_rectangle);
    _e_blur_rectangle_geometry_set(blur_rectangle, blur->ec);
-   e_view_pass_events_set(dim_view, true);
 
    // place E_Views into right layers
    e_view_place_below(img_view, e_view_client_view_get(blur_view_client));
@@ -699,13 +747,7 @@ _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
 
    // show new E_Views
    if (e_view_client_visible_get(blur_view_client) && _e_blur_enabled_get(blur))
-     {
-        e_view_show(img_view);
-        e_view_show(dim_view);
-        if (corner_img_view)
-          e_view_show(corner_img_view);
-     }
-
+     _e_blur_rectangle_show(blur_rectangle);
 
    ELOGF("E_BLUR", "E_Blur_Rectangle:%p Create (%dx%d+%d+%d) rx:%d ry:%d", blur->ec, blur_rectangle,
          blur_rectangle->w, blur_rectangle->h, blur_rectangle->x, blur_rectangle->y,
@@ -718,7 +760,7 @@ _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
 
 fail:
    if (dim_view) e_view_destroy(dim_view);
-   if (blur_rectangle && blur_rectangle->view_image) _e_blur_rectangle_view_image_free(blur_rectangle);
+   if (img_view) _e_blur_rectangle_view_image_free(blur_rectangle);
    if (corner_img_view) e_view_destroy(corner_img_view);
    if (blur_rectangle) free(blur_rectangle);
 }
@@ -888,15 +930,13 @@ _e_blur_behind_cb_ds_tizen_blur_behind_commit(struct wl_listener *listener, void
      {
          _e_blur_behind_filter_set(blur_behind);
         if (!e_view_client_visible_get(e_client_view_get(blur_behind->ec))) return;
-        e_view_show(e_view_image_view_get(blur_behind->blur_rectangle->view_image));
-        e_view_show(e_view_rect_view_get(blur_behind->blur_rectangle->dim_rect));
+        _e_blur_rectangle_show(blur_behind->blur_rectangle);
 
         _e_blur_behind_enabled_set(blur_behind, EINA_TRUE);
      }
    else
      {
-        e_view_hide(e_view_image_view_get(blur_behind->blur_rectangle->view_image));
-        e_view_hide(e_view_rect_view_get(blur_behind->blur_rectangle->dim_rect));
+        _e_blur_rectangle_hide(blur_behind->blur_rectangle);
 
         _e_blur_behind_enabled_set(blur_behind, EINA_FALSE);
      }
@@ -926,8 +966,7 @@ _e_blur_behind_cb_show(struct wl_listener *listener, void *data)
    blur_behind = wl_container_of(listener, blur_behind, listener.show);
    if (!blur_behind->radius) return;
 
-   e_view_show(e_view_image_view_get(blur_behind->blur_rectangle->view_image));
-   e_view_show(e_view_rect_view_get(blur_behind->blur_rectangle->dim_rect));
+   _e_blur_rectangle_show(blur_behind->blur_rectangle);
 
    _e_blur_behind_enabled_set(blur_behind, EINA_TRUE);
 }
@@ -939,8 +978,7 @@ _e_blur_behind_cb_hide(struct wl_listener *listener, void *data)
 
    blur_behind = wl_container_of(listener, blur_behind, listener.hide);
 
-   e_view_hide(e_view_image_view_get(blur_behind->blur_rectangle->view_image));
-   e_view_hide(e_view_rect_view_get(blur_behind->blur_rectangle->dim_rect));
+   _e_blur_rectangle_hide(blur_behind->blur_rectangle);
 
    _e_blur_behind_enabled_set(blur_behind, EINA_FALSE);
 }
@@ -951,7 +989,7 @@ _e_blur_behind_cb_restack(struct wl_listener *listener, void *data)
    E_View *event_src_view = ((E_View_Event_Callback_Data *)data)->view;
    E_Blur_Behind *blur_behind;
    E_View_Tree *layer_tree;
-   E_View *img_view, *dim_view;
+   E_View *img_view, *dim_view = NULL;
 
    blur_behind = wl_container_of(listener, blur_behind, listener.restack);
 
@@ -959,12 +997,16 @@ _e_blur_behind_cb_restack(struct wl_listener *listener, void *data)
    if (!layer_tree) return;
 
    img_view = e_view_image_view_get(blur_behind->blur_rectangle->view_image);
-   dim_view = e_view_rect_view_get(blur_behind->blur_rectangle->dim_rect);
 
    e_view_reparent(img_view, layer_tree);
-   e_view_reparent(dim_view, layer_tree);
    e_view_place_below(img_view, _e_blur_behind_bottom_view_get(event_src_view));
-   e_view_place_below(dim_view, img_view);
+
+   if (blur_behind->blur_rectangle->dim_rect)
+     {
+        dim_view = e_view_rect_view_get(blur_behind->blur_rectangle->dim_rect);
+        e_view_reparent(dim_view, layer_tree);
+        e_view_place_below(dim_view, img_view);
+     }
 }
 
 static void
@@ -1029,8 +1071,6 @@ _e_blur_manager_cb_new_blur_behind(struct wl_listener *listener, void *data)
    E_Client *ec;
    E_View_Client *view_client;
    E_View_Tree *view_client_tree;
-   E_View_Rect *dim_rect;
-   int dim_color[4] = {15, 15, 15, 153};
    E_View *image_view, *dim_view;
    E_Blur_Hook_Data hook_data;
    int comp_w = 0, comp_h = 0;
@@ -1055,11 +1095,6 @@ _e_blur_manager_cb_new_blur_behind(struct wl_listener *listener, void *data)
    view_client_tree = e_canvas_layer_view_tree_get(e_comp_canvas_get(), e_view_layer_index_get(e_view_client_view_get(view_client)));
    EINA_SAFETY_ON_NULL_RETURN(view_client_tree);
 
-   dim_rect = e_view_rect_create(view_client_tree, 1, 1, dim_color);
-   EINA_SAFETY_ON_NULL_RETURN(dim_rect);
-
-   dim_view = e_view_rect_view_get(dim_rect);
-
    blur_behind = E_NEW(E_Blur_Behind, 1);
    EINA_SAFETY_ON_NULL_RETURN(blur_behind);
    blur_behind->blur_rectangle = E_NEW(E_Blur_Rectangle, 1);
@@ -1078,17 +1113,20 @@ _e_blur_manager_cb_new_blur_behind(struct wl_listener *listener, void *data)
    _e_blur_rectangle_view_image_new(blur_behind->blur_rectangle, ec, "blur_behind_obj");
    EINA_SAFETY_ON_NULL_GOTO(blur_behind->blur_rectangle->view_image, fail);
    image_view = e_view_image_view_get(blur_behind->blur_rectangle->view_image);
-   e_view_pass_events_set(dim_view, true);
+
+   _e_blur_rectangle_dim_rect_new(blur_behind->blur_rectangle, ec, "blur_behind_dim_obj");
+   EINA_SAFETY_ON_NULL_GOTO(blur_behind->blur_rectangle->dim_rect, fail);
+   dim_view = e_view_rect_view_get(blur_behind->blur_rectangle->dim_rect);
+
    e_comp_size_get(&comp_w, &comp_h);
 
    // resize & place E_View_Objects
    e_view_image_geometry_set(blur_behind->blur_rectangle->view_image, 0, 0, comp_w, comp_h);
    e_view_position_set(dim_view, 0, 0);
-   e_view_rect_size_set(dim_rect, comp_w, comp_h);
+   e_view_rect_size_set(blur_behind->blur_rectangle->dim_rect, comp_w, comp_h);
    e_view_place_below(image_view, _e_blur_behind_bottom_view_get(e_view_client_view_get(view_client)));
    e_view_place_below(dim_view, image_view);
 
-   blur_behind->blur_rectangle->dim_rect = dim_rect;
    blur_manager->blurs_behind = eina_list_append(blur_manager->blurs_behind, blur_behind);
 
    ELOGF("E_BLUR", "E_Blur_Behind:%p Create", ec, blur_behind);