e_policy_desk_area_layer: Introduce new object representing layer of desk area 25/323425/1
authorJunseok Kim <juns.kim@samsung.com>
Tue, 1 Apr 2025 09:32:29 +0000 (18:32 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 28 Apr 2025 08:16:58 +0000 (17:16 +0900)
Change-Id: Ifc5cdd61f47c5b65193cddc25503c92f886ffe80

src/bin/Makefile.mk
src/bin/debug/e_info_server.c
src/bin/windowmgr/e_policy_desk_area.c
src/bin/windowmgr/e_policy_desk_area_intern.h
src/bin/windowmgr/e_policy_desk_area_layer.c [new file with mode: 0644]
src/bin/windowmgr/e_policy_desk_area_layer_intern.h [new file with mode: 0644]

index 69f1eddc4f3732fb73b84ff0b3d745136cf15d9f..3152fad37908abc1a832a9a5c9cd40d2a8b3df0f 100644 (file)
@@ -225,6 +225,7 @@ src/bin/windowmgr/e_policy_container.c \
 src/bin/windowmgr/e_policy_zone.c \
 src/bin/windowmgr/e_policy_desk.c \
 src/bin/windowmgr/e_policy_desk_area.c \
+src/bin/windowmgr/e_policy_desk_area_layer.c \
 src/bin/windowmgr/e_policy_stack.c  \
 src/bin/windowmgr/e_policy_visibility.c \
 src/bin/windowmgr/e_policy_conformant.c \
index b2184447df355557637861c0d1f50474686e2043..26c23e27b52bf95ded5250becb1a857780cf572b 100644 (file)
@@ -52,6 +52,7 @@
 #include "e_policy_zone_intern.h"
 #include "e_policy_desk_intern.h"
 #include "e_policy_desk_area_intern.h"
+#include "e_policy_desk_area_layer_intern.h"
 
 #include <tbm_bufmgr.h>
 #include <tbm_debug.h>
@@ -7796,6 +7797,7 @@ _view_tree_impl_name_map(const E_View_Tree_Impl *impl)
    if (impl == &zone_tree_impl) return "zone_tree";
    if (impl == &desk_tree_impl) return "desk_tree";
    if (impl == &desk_area_tree_impl) return "desk_area_tree";
+   if (impl == &desk_area_layer_tree_impl) return "desk_area_layer_tree";
    return "tree";
 }
 
index ddf0103cbdc24f38f9549a081d4ec7489187ff6c..eee9bb34dc4098b323535767287e4535e4fbb33e 100644 (file)
@@ -19,6 +19,7 @@
 #include "e_view_intern.h"
 #include "e_view_client_intern.h"
 #include "e_policy_wl_intern.h"
+#include "e_policy_desk_area_layer_intern.h"
 
 
 typedef struct _E_Policy_Desk_Area_Private_Client  E_Policy_Desk_Area_Private_Client;
@@ -30,6 +31,8 @@ struct _E_Policy_Desk_Area
 
    E_Desk_Area *desk_area;
 
+   E_Policy_Desk_Area_Layer *layers[E_LAYER_COUNT];
+
    struct wl_listener geometry_set;
    struct wl_listener activate;
    struct wl_listener raise;
@@ -2984,22 +2987,43 @@ EINTERN E_View_Tree_Impl desk_area_tree_impl = {
    .child_remove = _e_policy_desk_area_tree_child_remove,
 };
 
-EINTERN E_Policy_Desk_Area *
-e_policy_desk_area_new(E_Desk_Area *eda)
+static void
+_e_policy_desk_area_init_layer(E_Policy_Desk_Area *pda)
 {
-   E_Policy_Desk_Area *pda;
-   E_Policy_Desk *pd;
-   E_Desk *desk;
-   E_Layer ec_layer;
+   E_Policy_Desk_Area_Layer *pdal;
+   E_Canvas_Layer layer;
    Evas_Object *obj;
 #ifdef NEED_REFINE_EDA_LAYERS_LIST
    E_Comp *comp;
    comp = e_comp_get();
 #endif
 
+   /* init client's layers */
+   for (layer = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); layer <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); layer++)
+     {
+
+#ifdef NEED_REFINE_EDA_LAYERS_LIST
+        obj = comp->layers[layer].obj = evas_object_rectangle_add(e_comp_evas_get());
+#else
+        obj = eda->layers[layer].obj = evas_object_rectangle_add(e_comp_evas_get());
+#endif
+        pdal = e_policy_desk_area_layer_new(pda, e_comp_canvas_layer_map_to(layer));
+        if (pdal) pda->layers[layer] = pdal;
+        evas_object_layer_set(obj, e_comp_canvas_layer_map_to(layer));
+        evas_object_name_set(obj, "layer_obj");
+     }
+}
+
+EINTERN E_Policy_Desk_Area *
+e_policy_desk_area_new(E_Desk_Area *eda)
+{
+   E_Policy_Desk_Area *pda;
+   E_Policy_Desk *pd;
+   E_Desk *desk;
+
    EINA_SAFETY_ON_NULL_RETURN_VAL(eda, NULL);
 
-   pda = eina_hash_find(hash_policy_desk_area, &eda);
+   pda = e_policy_desk_area_get(eda);
    if (pda)
      {
         ELOGF("POLICY_DESK_AREA", "Already exist policy desk area. | DESK_AREA:%p", NULL, eda);
@@ -3023,21 +3047,9 @@ e_policy_desk_area_new(E_Desk_Area *eda)
      }
 
    pda->desk_area = eda;
-
    eina_hash_add(hash_policy_desk_area, &eda, pda);
 
-   /* init client's layers */
-   for (ec_layer = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); ec_layer <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); ec_layer++)
-     {
-
-#ifdef NEED_REFINE_EDA_LAYERS_LIST
-        obj = comp->layers[ec_layer].obj = evas_object_rectangle_add(e_comp_evas_get());
-#else
-        obj = eda->layers[ec_layer].obj = evas_object_rectangle_add(e_comp_evas_get());
-#endif
-        evas_object_layer_set(obj, e_comp_canvas_layer_map_to(ec_layer));
-        evas_object_name_set(obj, "layer_obj");
-     }
+   _e_policy_desk_area_init_layer(pda);
 
    eda->hook_subsurf_create = e_comp_wl_hook_add(E_COMP_WL_HOOK_SUBSURFACE_CREATE,
                                                  _e_policy_desk_area_cb_hook_subsurface_create,
@@ -3106,6 +3118,8 @@ e_policy_desk_area_del(E_Policy_Desk_Area *pda)
    E_FREE_FUNC(eda->hook_client_free, e_client_hook_del);
 #endif // CLIENT_DEL_STACK_ISSUE
 
+   e_policy_container_view_tree_shutdown(e_policy_container_get(pda));
+
    eina_hash_del_by_key(hash_policy_desk_area, &pda->desk_area);
 
    E_FREE(pda);
@@ -3121,6 +3135,14 @@ e_policy_desk_area_get(E_Desk_Area *eda)
    return eina_hash_find(hash_policy_desk_area, &eda);
 }
 
+EINTERN E_Desk_Area *
+e_policy_desk_area_get_desk_area(E_Policy_Desk_Area *pda)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(pda, NULL);
+
+   return pda->desk_area;
+}
+
 EINTERN void
 e_policy_desk_area_init(void)
 {
index a18e23c5ee5f29197657a1e5427206c5a2fde8eb..dfd547d9b71c4f1c9ea374f66bf6e3b89330cb05 100644 (file)
@@ -13,6 +13,7 @@ EINTERN Eina_Bool            e_policy_desk_area_hook_call(E_Desk_Area *eda, E_De
 EINTERN E_Policy_Desk_Area * e_policy_desk_area_new(E_Desk_Area *eda);
 EINTERN void                 e_policy_desk_area_del(E_Policy_Desk_Area *pda);
 EINTERN E_Policy_Desk_Area  *e_policy_desk_area_get(E_Desk_Area *eda);
+EINTERN E_Desk_Area         *e_policy_desk_area_get_desk_area(E_Policy_Desk_Area *eda);
 EINTERN void                 e_policy_desk_area_init(void);
 EINTERN void                 e_policy_desk_area_shutdown(void);
 #endif
diff --git a/src/bin/windowmgr/e_policy_desk_area_layer.c b/src/bin/windowmgr/e_policy_desk_area_layer.c
new file mode 100644 (file)
index 0000000..224857a
--- /dev/null
@@ -0,0 +1,109 @@
+#include "e_policy_desk_area_layer_intern.h"
+
+#include "e_desk_area_intern.h"
+#include "e_policy_desk_area_intern.h"
+#include "e_policy_container_intern.h"
+#include "e_view_intern.h"
+#include "e_view_rect.h"
+
+
+struct _E_Policy_Desk_Area_Layer
+{
+   E_Policy_Container container;
+
+   E_Policy_Desk_Area *pda;
+   E_Layer layer;
+   E_View *layer_bottom;
+};
+E_POLICY_CONTAINER_INIT(E_Policy_Desk_Area_Layer);
+
+//typedef unsigned int E_Layer_Order;
+typedef E_Canvas_Layer E_Layer_Order;
+
+
+static void
+_e_policy_desk_area_layer_tree_destroy(E_View_Tree *tree)
+{
+   // doing something
+}
+
+static void
+_e_policy_desk_area_layer_tree_child_add(E_View_Tree *tree, E_View *child)
+{
+   if (!child->eo)
+     return;
+   // doing something
+}
+
+static void
+_e_policy_desk_area_layer_tree_child_remove(E_View_Tree *tree, E_View *child)
+{
+   if (!child->eo)
+     return;
+
+   // doing something
+}
+
+EINTERN E_View_Tree_Impl desk_area_layer_tree_impl = {
+   .destroy = _e_policy_desk_area_layer_tree_destroy,
+   .child_add = _e_policy_desk_area_layer_tree_child_add,
+   .child_remove = _e_policy_desk_area_layer_tree_child_remove,
+};
+
+EINTERN E_Policy_Desk_Area_Layer *
+e_policy_desk_area_layer_new(E_Policy_Desk_Area *pda, E_Layer layer)
+{
+    E_Policy_Desk_Area_Layer * pdal = NULL;
+    E_Desk_Area *eda;
+    E_View_Rect *layer_bottom_rect;
+    int color[4] = {0, 0, 0, 255};
+
+    EINA_SAFETY_ON_NULL_GOTO(pda, err);
+
+    eda = e_policy_desk_area_get_desk_area(pda);
+    EINA_SAFETY_ON_NULL_GOTO(eda, err);
+
+    pdal = E_NEW(E_Policy_Desk_Area_Layer, 1);
+    EINA_SAFETY_ON_NULL_GOTO(pdal, err);
+
+    ELOGF("POL_LAYER", "Create Policy_desk_area_layer, desk_area(ID:%d):%p, policy_desk_area:%p, policy_desk_area_layer:%p, layer:%d",
+          NULL, eda->id, eda, pda, pdal, layer);
+
+   if (!e_policy_container_view_tree_init(e_policy_container_get(pdal), &desk_area_layer_tree_impl, e_policy_container_general_get(pda)))
+     {
+        ERR("Failed to init view tree of desk area layer:%p / layer:%d", pdal, layer);
+        goto err;
+     }
+    layer_bottom_rect = e_view_rect_create(&e_policy_container_get(pdal)->tree, eda->w, eda->h, color);
+    if (!layer_bottom_rect)
+      {
+         ERR("Failed to init view tree of desk area layer:%p / layer:%d", pdal, layer);
+         goto err;
+      }
+
+    pdal->pda = pda;
+    pdal->layer = layer;
+    pdal->layer_bottom = e_view_rect_view_get(layer_bottom_rect);
+
+    // TODO: set layer
+    //evas_object_layer_set(pdal->layer_bottom->eo, layer);
+    evas_object_name_set(pdal->layer_bottom->eo, "layer_obj");
+   return pdal;
+
+err:
+   if (pdal) e_policy_desk_area_layer_del(pdal);
+   return NULL;
+}
+
+EINTERN void
+e_policy_desk_area_layer_del(E_Policy_Desk_Area_Layer *pdal)
+{
+    EINA_SAFETY_ON_NULL_RETURN(pdal);
+
+    ELOGF("POL_LAYER", "Delete Policy_desk_area_layer, policy_desk_area_layer:%p, layer:%d", NULL, pdal, pdal->layer);
+
+    if (pdal->layer_bottom) e_view_destroy(pdal->layer_bottom);
+    e_policy_container_view_tree_shutdown(e_policy_container_get(pdal));
+
+    E_FREE(pdal);
+}
\ No newline at end of file
diff --git a/src/bin/windowmgr/e_policy_desk_area_layer_intern.h b/src/bin/windowmgr/e_policy_desk_area_layer_intern.h
new file mode 100644 (file)
index 0000000..6fc332e
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef E_POLICY_DESK_AREA_LAYER_INTERN_H
+#define E_POLICY_DESK_AREA_LAYER_INTERN_H
+
+#include "e_intern.h"
+#include "e_policy_desk_area_intern.h"
+#include "e_view_intern.h"
+
+typedef struct _E_Policy_Desk_Area_Layer E_Policy_Desk_Area_Layer;
+
+extern EINTERN E_View_Tree_Impl desk_area_layer_tree_impl;
+
+EINTERN E_Policy_Desk_Area_Layer *e_policy_desk_area_layer_new(E_Policy_Desk_Area *pda, E_Layer layer);
+EINTERN void                      e_policy_desk_area_layer_del(E_Policy_Desk_Area_Layer *pdal);
+
+#endif //E_POLICY_DESK_AREA_LAYER_INTERN_H