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;
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)
{
{
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)
}
}
+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;
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);
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))
{
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);
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);
}
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);
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
{
_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);
}
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);
}
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);
}
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);
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;
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);
_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
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