e_comp: add api for image_filter_edge_detection's parameters 57/320857/1
authorhojoon-ryou <hojoon.ryou@samsung.com>
Tue, 4 Mar 2025 07:59:29 +0000 (16:59 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 10 Mar 2025 07:47:07 +0000 (16:47 +0900)
Note: just checked only build success. not tested in real device.

Change-Id: I31ad2667a0f88222f7ad24dbf5f603214cb19dfa

src/bin/compmgr/e_comp.c
src/bin/compmgr/e_comp_object.c
src/include/e_comp.h

index 79cf820346d318f7eebcd9f5296aa6c348674031..c74161cd0711c175dcf26e486aa62d0256db1a94 100644 (file)
@@ -346,6 +346,9 @@ e_comp_init(void)
 
    g_rec_mutex_init(&e_comp->ec_list_mutex);
 
+   e_comp->edge_detection_thickness = 1.0;
+   e_comp->edge_detection_color_id = 1;
+
    return EINA_TRUE;
 }
 
@@ -1374,6 +1377,23 @@ e_comp_image_filter_set(E_Comp_Image_Filter filter)
    return EINA_FALSE;
 }
 
+E_API void
+e_comp_image_filter_edge_detection_param_set(double thickness, int color_id)
+{
+   e_comp->edge_detection_thickness = thickness;
+   e_comp->edge_detection_color_id = color_id;
+
+   if (e_comp->image_filter != E_COMP_IMAGE_FILTER_EDGE_DETECTION) return;
+   E_Client *ec;
+   E_CLIENT_FOREACH(ec)
+     {
+        e_comp_object_image_filter_set(ec->frame, E_COMP_IMAGE_FILTER_EDGE_DETECTION);
+        e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h);
+        e_comp_object_dirty(ec->frame);
+        e_comp_object_render(ec->frame);
+     }
+}
+
 E_API E_Comp_Image_Filter
 e_comp_image_filter_get(void)
 {
index cf12ebe1d4d59a75b496ecdc375908e46f5c87a6..6991f88e721b34bf144451e608c6714efd8372c3 100644 (file)
@@ -4656,6 +4656,8 @@ e_comp_object_native_usable_get(Evas_Object *obj)
 EINTERN Eina_Bool
 e_comp_object_image_filter_set(Evas_Object *obj, E_Comp_Image_Filter filter)
 {
+   char efl_gfx_lua_code[64] = "";
+
    API_ENTRY EINA_FALSE;
    EINA_SAFETY_ON_NULL_RETURN_VAL(cw->ec, EINA_FALSE);
    if (e_object_is_del(E_OBJECT(cw->ec))) return EINA_FALSE;
@@ -4675,7 +4677,9 @@ e_comp_object_image_filter_set(Evas_Object *obj, E_Comp_Image_Filter filter)
          efl_gfx_filter_program_set(cw->obj, "inverse_color ()", "image_filter");
          break;
       case E_COMP_IMAGE_FILTER_EDGE_DETECTION:
-         efl_gfx_filter_program_set(cw->obj, "edge_detection { thickness = 1.0, color_id = 1 }", "image_filter");
+         sprintf(efl_gfx_lua_code, "edge_detection { thickness = %lf, color_id = %d }",
+            e_comp->edge_detection_thickness, e_comp->edge_detection_color_id);
+         efl_gfx_filter_program_set(cw->obj, efl_gfx_lua_code, "image_filter");
          break;
       case E_COMP_IMAGE_FILTER_NONE:
       default:
index fd9835c11933279ef9e354bb36d3c0df292a02a1..1ba3e9c440d091317e65696e8861515585c70eca 100644 (file)
@@ -135,6 +135,9 @@ struct _E_Comp
 
    E_Comp_Image_Filter image_filter;
 
+   double edge_detection_thickness;
+   int edge_detection_color_id;
+
    struct
    {
       char use; // 0: none 1: use commit_handler timer