Apply E_View to e_service_volume 62/321762/1
authorjinbong.lee <jinbong.lee@samsung.com>
Thu, 27 Mar 2025 10:37:51 +0000 (19:37 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 28 Mar 2025 00:58:24 +0000 (09:58 +0900)
Change-Id: I40ee70dc5c83476c48cf735d4f50ad9e91bd408a

src/bin/windowmgr/services/e_service_volume.c

index 7e03275543377da872cbc924808d63594553b20a..f6350cd6493e3c705c6d70bb45657fa9a0979ee8 100644 (file)
@@ -4,7 +4,9 @@
 #include "e_comp_wl_intern.h"
 #include "e_view_intern.h"
 #include "e_view_client_intern.h"
+#include "e_view_rect.h"
 #include "e_comp_wl_intern.h"
+#include "e_comp_canvas.h"
 #include "e_seat_intern.h"
 
 #include <wayland-server.h>
 #define REGION_OBJS_VISIBLE_CHANGE(V) \
 do { \
    Eina_List *l; \
-   Evas_Object *o; \
+   E_View_Rect *o; \
    EINA_LIST_FOREACH(_volume_region_objs[_volume_cur_angle_map], l, o) \
      { \
-        if (V) evas_object_show(o); \
-        else evas_object_hide(o); \
+        if (V) e_view_show(e_view_rect_view_get(o)); \
+        else e_view_hide(e_view_rect_view_get(o)); \
      } \
 } while(0)
 #define REGION_OBJS_SHOW() REGION_OBJS_VISIBLE_CHANGE(EINA_TRUE)
@@ -153,17 +155,18 @@ _volume_client_view_cb_move(struct wl_listener *listener, void *data)
 {
    Eina_List *l;
    Eina_Rectangle *r;
-   Evas_Object *region_obj;
+   E_View_Rect *region_obj;
    int x, y;
 
    REGION_OBJS_FOREACH(l, region_obj)
      {
-        r = evas_object_data_get(region_obj, "content_rect");
+        E_View *view = e_view_rect_view_get(region_obj);
+        r = e_view_data_get(view, "content_rect");
         if (EINA_UNLIKELY(r == NULL))
           continue;
 
         e_view_client_geometry_get(e_client_view_get(_volume_ec), &x, &y, NULL, NULL);
-        evas_object_move(region_obj, x + r->x, y + r->y);
+        e_view_position_set(view, x + r->x, y + r->y);
      }
 }
 
@@ -171,10 +174,10 @@ static void
 _volume_client_view_cb_restack(struct wl_listener *listener, void *data)
 {
    Eina_List *l;
-   Evas_Object *region_obj;
+   E_View_Rect *region_obj;
 
    REGION_OBJS_FOREACH(l, region_obj)
-      evas_object_stack_above(region_obj, _volume_ec->frame);
+      e_view_place_above(e_view_rect_view_get(region_obj), e_view_client_view_get(e_client_view_get(_volume_ec)));
 }
 
 static Eina_Bool
@@ -192,19 +195,20 @@ _region_objs_is_empty(void)
 }
 
 static void
-_region_obj_del(Evas_Object *obj)
+_region_obj_del(E_View_Rect *obj)
 {
    Eina_Rectangle *r;
+   E_View *obj_view = e_view_rect_view_get(obj);
 
-   r = evas_object_data_get(obj, "content_rect");
-   E_FREE_FUNC(r, eina_rectangle_free);
-   evas_object_del(obj);
+   r = e_view_data_get(obj_view, "content_rect");
+   if (r) E_FREE_FUNC(r, eina_rectangle_free);
+   e_view_destroy(obj_view);
 }
 
 static void
 _region_objs_del(E_Policy_Angle_Map angle_map)
 {
-   Evas_Object *obj;
+   E_View_Rect *obj;
    E_View *view;
    E_View_Client *view_client;
 
@@ -341,31 +345,46 @@ e_service_volume_client_set(E_Client *ec)
    return EINA_TRUE;
 }
 
-static Evas_Object *
-_volume_content_region_obj_new(void)
+static E_View_Rect *
+_volume_content_region_obj_new(int width, int height)
 {
-   Evas_Object *obj;
+   /* make it transparent */
+   int color[4] = {0, 0, 0, 0};
+   E_View_Tree *layer_tree;
+   E_View_Client *view_client;
+   E_View_Rect *obj;
+   E_View* obj_view;
 
-   obj = evas_object_rectangle_add(evas_object_evas_get(_volume_ec->frame));
+   view_client = e_client_view_get(_volume_ec);
+   if (!view_client)
+     {
+        ERR("There is no view_client for volume_ec(%p)", _volume_ec);
+        return NULL;
+     }
 
-   /* make it transparent */
-   evas_object_color_set(obj, 0, 0, 0, 0);
+   layer_tree = e_canvas_layer_view_tree_get(e_comp_canvas_get(), e_view_layer_index_get(e_view_client_view_get(view_client)));
+   obj = e_view_rect_create(layer_tree, width, height, color);
+   if (!obj)
+     {
+        ERR("E_View_Rect creation is failed (width=%d, height=%d)", width, height);
+        return NULL;
+     }
 
-   /* set stack of obj object on the volume object. */
-   evas_object_layer_set(obj, evas_object_layer_get(_volume_ec->frame));
-   evas_object_stack_above(obj, _volume_ec->frame);
+   /* set stack of region view_rect on the volume object. */
+   obj_view = e_view_rect_view_get(obj);
+   e_view_place_above(obj_view, e_view_client_view_get(view_client));
 
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE,
+   evas_object_event_callback_add(obj_view->eo, EVAS_CALLBACK_MOUSE_MOVE,
                                   _volume_region_obj_cb_mouse_move, NULL);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN,
+   evas_object_event_callback_add(obj_view->eo, EVAS_CALLBACK_MOUSE_DOWN,
                                   _volume_region_obj_cb_mouse_down, NULL);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP,
+   evas_object_event_callback_add(obj_view->eo, EVAS_CALLBACK_MOUSE_UP,
                                   _volume_region_obj_cb_mouse_up, NULL);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MULTI_DOWN,
+   evas_object_event_callback_add(obj_view->eo, EVAS_CALLBACK_MULTI_DOWN,
                                   _volume_region_obj_cb_multi_down, NULL);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MULTI_UP,
+   evas_object_event_callback_add(obj_view->eo, EVAS_CALLBACK_MULTI_UP,
                                   _volume_region_obj_cb_multi_up, NULL);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MULTI_MOVE,
+   evas_object_event_callback_add(obj_view->eo, EVAS_CALLBACK_MULTI_MOVE,
                                   _volume_region_obj_cb_multi_move, NULL);
 
    return obj;
@@ -377,7 +396,8 @@ _region_objs_tile_set(E_Policy_Angle_Map angle_map, Eina_Tiler *tiler)
    Eina_List *objs_list, *l, *ll;
    Eina_Iterator *it;
    Eina_Rectangle *r, *cr;
-   Evas_Object *obj;
+   E_View_Rect *obj;
+   E_View *obj_view;
    E_Zone *zone;
    E_Desk *desk;
 
@@ -395,38 +415,41 @@ _region_objs_tile_set(E_Policy_Angle_Map angle_map, Eina_Tiler *tiler)
         obj = eina_list_data_get(objs_list);
         if (obj)
           {
+             obj_view = e_view_rect_view_get(obj);
+             cr = e_view_data_get(obj_view, "content_rect");
+             if (cr) EINA_RECTANGLE_SET(cr, r->x, r->y, r->w, r->h);
+             e_view_rect_size_set(obj, r->w, r->h);
              objs_list = eina_list_next(objs_list);
-             cr = evas_object_data_get(obj, "content_rect");
-             E_FREE_FUNC(cr, eina_rectangle_free);
           }
         else
           {
-             obj = _volume_content_region_obj_new();
+             obj = _volume_content_region_obj_new(r->w, r->h);
+             /* store the value of reigon as a region view_rect's data */
+             cr = eina_rectangle_new(r->x, r->y, r->w, r->h);
+             obj_view = e_view_rect_view_get(obj);
+             e_view_data_set(obj_view, "content_rect", cr);
              _volume_region_objs[angle_map] = eina_list_append(_volume_region_objs[angle_map], obj);
-             e_desk_smart_member_add(desk, obj);
+             e_desk_smart_member_add(desk, obj_view->eo);
           }
 
         INF("\t@@@@@ Region Set: %d %d %d %d", r->x, r->y, r->w, r->h);
-        /* set geometry of region object */
-        evas_object_move(obj, _volume_ec->client.x + r->x, _volume_ec->client.y + r->y);
-        evas_object_resize(obj, r->w, r->h);
+        /* set geometry of region view_rect */
+        e_view_position_set(obj_view, _volume_ec->client.x + r->x, _volume_ec->client.y + r->y);
 
-        /* store the value of reigon as a region object's data */
-        cr = eina_rectangle_new(r->x, r->y, r->w, r->h);
-        evas_object_data_set(obj, "content_rect", cr);
+        /* store the value of reigon as a region view_rect's data */
 
         if (angle_map == _volume_cur_angle_map)
           {
              if (e_view_client_visible_get(e_client_view_get(_volume_ec)))
-               evas_object_show(obj);
+               e_view_show(obj_view);
           }
      }
    eina_iterator_free(it);
 
-   /* delete rest of objects after reusing */
+   /* delete rest of region view_rects after reusing */
    EINA_LIST_FOREACH_SAFE(objs_list, l, ll, obj)
      {
-        _region_obj_del(obj);
+      _region_obj_del(obj);
         _volume_region_objs[angle_map] =
            eina_list_remove_list(_volume_region_objs[angle_map], l);
      }