#include "e.h"
+#include "e_blur.h"
#include "e_blur_intern.h"
#include "e_blur_video_capture_intern.h"
#include "e_comp_wl_intern.h"
Eina_List *blurs;
Eina_List *blurs_behind;
+
+ struct {
+ E_Blur_Dim_Config *dim_config;
+ } configs;
};
struct _E_Blur
{
E_View_Rect *dim_rect = NULL;
E_View *dim_view = NULL;
- int dim_color[4] = {15, 15, 15, 153};
+ int dim_color[4];
EINA_SAFETY_ON_NULL_RETURN(view_tree);
+ EINA_SAFETY_ON_NULL_RETURN(_blur_manager->configs.dim_config);
+ dim_color[0] = _blur_manager->configs.dim_config->color.r;
+ dim_color[1] = _blur_manager->configs.dim_config->color.g;
+ dim_color[2] = _blur_manager->configs.dim_config->color.b;
+ dim_color[3] = _blur_manager->configs.dim_config->color.a;
dim_rect = e_view_rect_create(view_tree, 1, 1, dim_color);
EINA_SAFETY_ON_NULL_RETURN(dim_rect);
blur_manager = E_NEW(E_Blur_Manager, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(blur_manager, EINA_FALSE);
+ blur_manager->configs.dim_config = E_NEW(E_Blur_Dim_Config, 1);
+ EINA_SAFETY_ON_NULL_GOTO(blur_manager->configs.dim_config, fail);
+ blur_manager->configs.dim_config->enabled = EINA_TRUE;
+ blur_manager->configs.dim_config->color.r = 15;
+ blur_manager->configs.dim_config->color.g = 15;
+ blur_manager->configs.dim_config->color.b = 15;
+ blur_manager->configs.dim_config->color.a = 153; // #1A1A1A, 60%, premultiplied alpha
+
blur_manager->tizen_blur_manager = ds_tizen_blur_manager_create(wl_disp);
EINA_SAFETY_ON_NULL_GOTO(blur_manager->tizen_blur_manager, fail);
fail:
+ if (blur_manager->configs.dim_config) free(blur_manager->configs.dim_config);
free(blur_manager);
return EINA_FALSE;
INF("Blur Debug is %s", onoff?"ON":"OFF");
e_blur_video_capture_trace_debug(onoff);
}
+
+E_API Eina_Bool
+e_blur_dim_config_set(E_Blur_Dim_Config *dim_config)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(_blur_manager, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(_blur_manager->configs.dim_config, EINA_FALSE);
+
+ E_Blur_Dim_Config *current_dim_config = _blur_manager->configs.dim_config;
+ Eina_Bool before_enabled = current_dim_config->enabled;
+ Eina_Bool after_enabled = dim_config->enabled;
+ E_View_Client *view_client;
+ E_View_Tree *view_client_tree;
+ E_Blur *blur;
+ E_Blur_Behind *blur_behind;
+ E_Blur_Rectangle *blur_rectangle;
+ Eina_List *l, *ll;
+
+ current_dim_config->enabled = dim_config->enabled;
+ current_dim_config->color.r = dim_config->color.r;
+ current_dim_config->color.g = dim_config->color.g;
+ current_dim_config->color.b = dim_config->color.b;
+ current_dim_config->color.a = dim_config->color.a;
+
+ if (!before_enabled && !after_enabled)
+ return EINA_TRUE;
+
+ EINA_LIST_FOREACH(_blur_manager->blurs, l, blur)
+ {
+ view_client = e_client_view_get(blur->ec);
+ if (!view_client) continue;
+ view_client_tree = e_view_parent_get(e_view_client_view_get(view_client));
+ if (!view_client_tree) continue;
+ EINA_LIST_FOREACH(blur->blur_rectangles, ll, blur_rectangle)
+ {
+ if (after_enabled)
+ {
+ if (!blur_rectangle->dim_rect)
+ {
+ _e_blur_rectangle_dim_rect_new(blur_rectangle, view_client_tree, "blur_dim_obj");
+ EINA_SAFETY_ON_NULL_RETURN_VAL(blur_rectangle->dim_rect, EINA_FALSE);
+ e_view_place_below(e_view_rect_view_get(blur_rectangle->dim_rect),
+ e_view_image_view_get(blur_rectangle->view_image));
+ if (blur_rectangle->corner_radius_image)
+ e_view_clip_set(e_view_rect_view_get(blur_rectangle->dim_rect),
+ e_view_image_view_get(blur_rectangle->corner_radius_image));
+ _e_blur_rectangle_geometry_set(blur_rectangle, blur->ec);
+ if (blur->enabled) _e_blur_rectangle_show(blur_rectangle);
+ }
+ e_view_rect_color_set(blur_rectangle->dim_rect,
+ current_dim_config->color.r,
+ current_dim_config->color.g,
+ current_dim_config->color.b,
+ current_dim_config->color.a);
+ }
+ else if (before_enabled)
+ _e_blur_rectangle_dim_rect_free(blur_rectangle);
+ }
+ }
+
+ EINA_LIST_FOREACH(_blur_manager->blurs_behind, l, blur_behind)
+ {
+ view_client = e_client_view_get(blur_behind->ec);
+ if (!view_client) continue;
+ view_client_tree = e_view_parent_get(e_view_client_view_get(view_client));
+ if (!view_client_tree) continue;
+ blur_rectangle = blur_behind->blur_rectangle;
+ if (after_enabled)
+ {
+ if (!blur_rectangle->dim_rect)
+ {
+ _e_blur_rectangle_dim_rect_new(blur_rectangle, view_client_tree, "blur_behind_dim_obj");
+ EINA_SAFETY_ON_NULL_RETURN_VAL(blur_rectangle->dim_rect, EINA_FALSE);
+ e_view_place_below(e_view_rect_view_get(blur_rectangle->dim_rect),
+ e_view_image_view_get(blur_rectangle->view_image));
+ if (blur_rectangle->corner_radius_image)
+ e_view_clip_set(e_view_rect_view_get(blur_rectangle->dim_rect),
+ e_view_image_view_get(blur_rectangle->corner_radius_image));
+ _e_blur_rectangle_geometry_set(blur_rectangle, blur_behind->ec);
+ if (blur_behind->enabled) _e_blur_rectangle_show(blur_rectangle);
+ }
+ e_view_rect_color_set(blur_rectangle->dim_rect,
+ current_dim_config->color.r,
+ current_dim_config->color.g,
+ current_dim_config->color.b,
+ current_dim_config->color.a);
+ }
+ else if (before_enabled)
+ _e_blur_rectangle_dim_rect_free(blur_rectangle);
+ }
+
+ return EINA_TRUE;
+}
+
+E_API E_Blur_Dim_Config *
+e_blur_dim_config_get(void)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(_blur_manager, NULL);
+
+ return _blur_manager->configs.dim_config;
+}