e_blur: add _e_blur_rectangle_view_image functions 35/325135/1
authorhojoon-ryou <hojoon.ryou@samsung.com>
Tue, 20 May 2025 04:32:23 +0000 (13:32 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 4 Jun 2025 03:47:47 +0000 (12:47 +0900)
add new and free functions for view_image in blur_rectangle.
fix other functions to using new functions

Change-Id: Ia20d1f98ae66a738882e69bc69215871ad70739b

src/bin/server/e_blur.c

index 1f9eee529712cd94d3b6a288fa95cf8e0aad8265..2fc84eea3d6fda48f5f032c5336020a878f2f187 100644 (file)
@@ -98,10 +98,10 @@ struct _E_Blur_Behind
    E_Object_Delfn *ec_delfn;
 
    uint32_t radius;
-   E_View_Image *view_image;
-   E_View_Rect  *dim_rect;
 
    Eina_Bool enabled;
+
+   E_Blur_Rectangle *blur_rectangle;
 };
 
 static int _e_blur_hooks_delete = 0;
@@ -123,6 +123,9 @@ static Eina_Bool blur_trace = EINA_FALSE;
 static void _e_blur_ec_set(E_Blur *blur, E_Client *ec);
 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_hooks_clean(void)
 {
@@ -229,9 +232,9 @@ _e_blur_rectangle_free(E_Blur_Rectangle *blur_rectangle)
 {
    ELOGF("E_BLUR", "E_Blur_Rectangle:%p Free", NULL, blur_rectangle);
 
-   _e_blur_rectangle_remove(blur_rectangle->blur, blur_rectangle);
+   if (blur_rectangle->blur) _e_blur_rectangle_remove(blur_rectangle->blur, blur_rectangle);
 
-   e_view_destroy(e_view_image_view_get(blur_rectangle->view_image));
+   _e_blur_rectangle_view_image_free(blur_rectangle);
    e_view_destroy(e_view_rect_view_get(blur_rectangle->dim_rect));
 
    if (blur_rectangle->corner_radius_view_image)
@@ -578,15 +581,46 @@ _e_blur_rectangle_cb_ds_tizen_blur_rectangle_destroy(struct wl_listener *listene
      }
 }
 
+static void
+_e_blur_rectangle_view_image_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_Image *view_image = NULL;
+   E_View *img_view = NULL;
+
+   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);
+
+   view_image = e_view_image_filled_create(blur_view_client_tree);
+   EINA_SAFETY_ON_NULL_RETURN(view_image);
+
+   e_view_image_snapshot_set(view_image, true);
+   img_view = e_view_image_view_get(view_image);
+   e_view_name_set(img_view, name);
+   e_view_pass_events_set(img_view, true);
+
+   blur_rectangle->view_image = view_image;
+}
+
+static void
+_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));
+}
+
 static void
 _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
 {
    E_Blur *blur;
    E_Blur_Rectangle *blur_rectangle;
    struct ds_tizen_blur_rectangle *tizen_blur_rectangle = data;
-   E_View_Image *view_image = NULL, *corner_radius_view_image = NULL;
+   E_View_Image *corner_radius_view_image = NULL;
    E_View_Rect *dim_rect = NULL;
-   int dim_color[4] = {0.6 * 0x1A, 0.6 * 0x1A, 0.6 * 0x1A, 0.6 * 0xFF};
+   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;
@@ -601,13 +635,9 @@ _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);
 
-   view_image = e_view_image_filled_create(blur_view_client_tree);
-   EINA_SAFETY_ON_NULL_RETURN(view_image);
-
    dim_rect = e_view_rect_create(blur_view_client_tree, 1, 1, dim_color);
    EINA_SAFETY_ON_NULL_RETURN(dim_rect);
 
-   img_view = e_view_image_view_get(view_image);
    dim_view = e_view_rect_view_get(dim_rect);
 
    blur_rectangle = E_NEW(E_Blur_Rectangle, 1);
@@ -627,10 +657,9 @@ _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
    ds_tizen_blur_rectangle_add_destroy_listener(tizen_blur_rectangle, &blur_rectangle->listener.destroy);
    blur_rectangle->tizen_blur_rectangle = tizen_blur_rectangle;
 
-   e_view_image_snapshot_set(view_image, true);
-   e_view_name_set(img_view, "blur_obj");
-   e_view_position_set(dim_view, blur_rectangle->x, blur_rectangle->y);
-   e_view_rect_size_set(dim_rect, blur_rectangle->w, blur_rectangle->h);
+   _e_blur_rectangle_view_image_new(blur_rectangle, blur->ec, "blur_obj");
+   EINA_SAFETY_ON_NULL_GOTO(blur_rectangle->view_image, fail);
+   img_view = e_view_image_view_get(blur_rectangle->view_image);
 
    if ((blur_rectangle->rx != 0) && (blur_rectangle->ry != 0))
      {
@@ -652,18 +681,20 @@ _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->view_image = view_image;
    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(img_view, true);
    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));
    if (corner_img_view)
      e_view_place_above(corner_img_view, img_view);
    e_view_place_below(dim_view, img_view);
+
+   // show new E_Views
    if (e_view_client_visible_get(blur_view_client) && _e_blur_enabled_get(blur))
      {
         e_view_show(img_view);
@@ -684,7 +715,7 @@ _e_blur_cb_new_rectangle(struct wl_listener *listener, void *data)
 
 fail:
    if (dim_view) e_view_destroy(dim_view);
-   if (img_view) e_view_destroy(img_view);
+   if (blur_rectangle && blur_rectangle->view_image) _e_blur_rectangle_view_image_free(blur_rectangle);
    if (corner_img_view) e_view_destroy(corner_img_view);
    if (blur_rectangle) free(blur_rectangle);
 }
@@ -796,8 +827,7 @@ _e_blur_behind_free(E_Blur_Behind *blur_behind)
    ELOGF("E_BLUR", "E_Blur_Behind:%p Free", blur_behind->ec, blur_behind);
 
    _e_blur_behind_ec_set(blur_behind, NULL);
-   e_view_destroy(e_view_image_view_get(blur_behind->view_image));
-   e_view_destroy(e_view_rect_view_get(blur_behind->dim_rect));
+   if (blur_behind->blur_rectangle) _e_blur_rectangle_free(blur_behind->blur_rectangle);
    _e_blur_behind_enabled_set(blur_behind, EINA_FALSE);
 
    free(blur_behind);
@@ -824,7 +854,7 @@ _e_blur_behind_filter_set(E_Blur_Behind *blur_behind)
 
    snprintf(program, sizeof(program), "blur (%d) padding_set (0)", blur_behind->radius);
 
-   e_view_image_gfx_filter_program_set(blur_behind->view_image, program, "image_filter");
+   e_view_image_gfx_filter_program_set(blur_behind->blur_rectangle->view_image, program, "image_filter");
 }
 
 static void
@@ -855,15 +885,15 @@ _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->view_image));
-        e_view_show(e_view_rect_view_get(blur_behind->dim_rect));
+        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_behind_enabled_set(blur_behind, EINA_TRUE);
      }
    else
      {
-        e_view_hide(e_view_image_view_get(blur_behind->view_image));
-        e_view_hide(e_view_rect_view_get(blur_behind->dim_rect));
+        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_behind_enabled_set(blur_behind, EINA_FALSE);
      }
@@ -893,8 +923,8 @@ _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->view_image));
-   e_view_show(e_view_rect_view_get(blur_behind->dim_rect));
+   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_behind_enabled_set(blur_behind, EINA_TRUE);
 }
@@ -906,8 +936,8 @@ _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->view_image));
-   e_view_hide(e_view_rect_view_get(blur_behind->dim_rect));
+   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_behind_enabled_set(blur_behind, EINA_FALSE);
 }
@@ -925,8 +955,8 @@ _e_blur_behind_cb_restack(struct wl_listener *listener, void *data)
    layer_tree = e_canvas_layer_view_tree_get(e_comp_canvas_get(), e_view_layer_index_get(event_src_view));
    if (!layer_tree) return;
 
-   img_view = e_view_image_view_get(blur_behind->view_image);
-   dim_view = e_view_rect_view_get(blur_behind->dim_rect);
+   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);
@@ -996,9 +1026,8 @@ _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_Image *view_image;
    E_View_Rect *dim_rect;
-   int dim_color[4] = {0.6 * 0x1A, 0.6 * 0x1A, 0.6 * 0x1A, 0.6 * 0xFF};
+   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;
@@ -1023,17 +1052,15 @@ _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);
 
-   view_image = e_view_image_filled_create(view_client_tree);
-   EINA_SAFETY_ON_NULL_RETURN(view_image);
-
    dim_rect = e_view_rect_create(view_client_tree, 1, 1, dim_color);
    EINA_SAFETY_ON_NULL_RETURN(dim_rect);
 
-   image_view = e_view_image_view_get(view_image);
    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);
+   EINA_SAFETY_ON_NULL_RETURN(blur_behind->blur_rectangle);
 
    blur_behind->listener.destroy.notify = _e_blur_behind_cb_ds_tizen_blur_behind_destroy;
    ds_tizen_blur_behind_add_destroy_listener(tizen_blur_behind, &blur_behind->listener.destroy);
@@ -1045,25 +1072,35 @@ _e_blur_manager_cb_new_blur_behind(struct wl_listener *listener, void *data)
 
    _e_blur_behind_ec_set(blur_behind, ec);
 
-   e_view_image_snapshot_set(view_image, true);
-   e_view_name_set(image_view, "blur_behind_obj");
-   e_view_pass_events_set(image_view, true);
+   _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_comp_size_get(&comp_w, &comp_h);
-   e_view_image_geometry_set(view_image, 0, 0, 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_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->view_image = view_image;
-   blur_behind->dim_rect = dim_rect;
+   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);
 
    hook_data.blur_behind = blur_behind;
    _e_blur_hook_call(E_BLUR_HOOK_BEHIND_CREATE, &hook_data);
+
+   return;
+
+fail:
+   if (blur_behind->blur_rectangle)
+     {
+        _e_blur_rectangle_free(blur_behind->blur_rectangle);
+        blur_behind->blur_rectangle = NULL;
+     }
 }
 
 static void
@@ -1225,8 +1262,9 @@ EINTERN E_View_Image *
 e_blur_behind_object_get(E_Blur_Behind *blur_behind)
 {
    EINA_SAFETY_ON_NULL_RETURN_VAL(blur_behind, NULL);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(blur_behind->blur_rectangle, NULL);
 
-   return blur_behind->view_image;
+   return blur_behind->blur_rectangle->view_image;
 }
 
 EINTERN void