e_view_layout: Use wl_list instead eina_list 46/318146/2
authorJunkyeong Kim <jk0430.kim@samsung.com>
Mon, 13 Jan 2025 10:48:59 +0000 (19:48 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 13 Jan 2025 11:04:50 +0000 (11:04 +0000)
Change-Id: I915d3b60c48ba00318cc4872092c1f4b0ac38539

src/bin/core/e_view_layout.c
src/bin/core/e_view_layout_intern.h

index 2494b6f1fc2fec4acabb464526dd5cad8f0469e8..3c2e503874bfa28e21f20cd5f6601dbd9cd9ce88 100644 (file)
@@ -16,18 +16,18 @@ struct _E_View_Layout
    int vw, vh;
    int frozen;
    unsigned char changed : 1;
-   Eina_Inlist *items;
+   struct wl_list items;
 };
 
 struct _E_View_Layout_Item
 {
-   EINA_INLIST;
    E_View_Layout *layout;
    int x, y, w, h;
    E_View *view;
    E_Canvas_Layer prev_layer;
    bool destroying;
    struct wl_listener destroy;
+   struct wl_list link;
 };
 
 static void _e_view_layout_disown(E_View *child);
@@ -49,15 +49,17 @@ static void
 _view_layout_handle_destroy(E_View_Tree *tree)
 {
    E_View_Layout *layout = _view_layout_from_tree(tree);
-   E_View *view = e_view_rect_view_get(layout->clip);
+   E_View_Layout_Item *li, *li_tmp;
 
-   while (layout->items)
+   if (!wl_list_empty(&layout->items))
      {
-        E_View_Layout_Item *li = (E_View_Layout_Item *)layout->items;
-        layout->items = eina_inlist_remove(layout->items, EINA_INLIST_GET(li));
-        _e_view_layout_disown(li->view);
+        wl_list_for_each_safe(li, li_tmp, &layout->items, link)
+         {
+            wl_list_remove(&li->link);
+            _e_view_layout_disown(li->view);
+         }
      }
-   e_view_destroy(view);
+
    free(layout);
 }
 
@@ -96,7 +98,7 @@ _e_view_layout_reconfigure(E_View_Layout *layout)
 
    if (!layout->changed) return;
 
-   EINA_INLIST_FOREACH(layout->items, li)
+   wl_list_for_each_reverse(li, &layout->items, link)
      _e_view_layout_move_resize_item(li);
 
    layout->changed = 0;
@@ -147,7 +149,7 @@ _e_view_layout_disown(E_View *child)
 
    li = e_view_data_get(child, "e_view_layout_data");
    if (!li) return;
-   if (!li->layout->items)
+   if (wl_list_empty(&li->layout->items))
      {
         e_view_hide(e_view_rect_view_get(li->layout->clip));
      }
@@ -192,15 +194,20 @@ e_view_layout_virtual_size_get(E_View_Layout *layout, int *w, int *h)
 }
 
 EINTERN void
-e_view_layout_child_lower(E_View *view)
+e_view_layout_child_lower(E_View *child)
 {
-   E_View_Layout_Item *li;
+   E_View_Layout_Item *li, *bottom;
 
-   li = e_view_data_get(view, "e_view_layout_data");
+   li = e_view_data_get(child, "e_view_layout_data");
    if (!li) return;
-   if ((!li->layout->items) || (!EINA_INLIST_GET(li)->next)) return;
-   li->layout->items = eina_inlist_promote(li->layout->items, EINA_INLIST_GET(li));
-   e_view_lower_to_bottom(view);
+   if (wl_list_empty(&li->layout->items)) return;
+   bottom = wl_container_of(li->layout->items.next, bottom, link);
+   if (li == bottom) return;
+
+   wl_list_remove(&li->link);
+   wl_list_insert(bottom->link.prev, &li->link);
+
+   e_view_place_below(child, bottom->view);
 }
 
 #if 0
@@ -224,6 +231,8 @@ e_view_layout_create(E_View_Tree *parent)
    layout = calloc(1, sizeof(E_View_Layout));
    if (!layout) return NULL;
 
+   wl_list_init(&layout->items);
+
    e_view_tree_init(&layout->tree, &view_layout_tree_impl, parent);
 //   e_view_reorderable_set(&layout->tree.view, false);
 
@@ -233,8 +242,6 @@ e_view_layout_create(E_View_Tree *parent)
    layout->clip = e_view_rect_create(&layout->tree, 200002, 200002, color);
    e_view_position_set(e_view_rect_view_get(layout->clip), -100001, -100001);
 
-//   _e_view_layout_adopt(layout, e_view_rect_view_get(layout->clip));
-
 //   evas_object_intercept_layer_set_callback_add(obj, _e_layout_intercept_layer_set, sd);
 
    return layout;
@@ -244,14 +251,7 @@ E_API void e_view_layout_destroy(E_View_Layout *layout)
 {
    if (!layout) return;
 
-   while (layout->items)
-     {
-        E_View_Layout_Item *li = (E_View_Layout_Item*)layout->items;
-        layout->items = eina_inlist_remove(layout->items, EINA_INLIST_GET(li));
-        _e_view_layout_disown(li->view);
-     }
-   e_view_destroy(e_view_rect_view_get(layout->clip));
-   free(layout);
+   e_view_destroy(e_view_tree_view_get(&layout->tree));
 }
 
 E_API void
@@ -279,14 +279,14 @@ e_view_layout_pack(E_View_Layout *layout, E_View *child)
    li = _e_view_layout_adopt(layout, child);
    if (!li) return;
 
-   layout->items = eina_inlist_append(layout->items, EINA_INLIST_GET(li));
+   wl_list_insert(layout->items.prev, &li->link);
+
    if (layout->frozen <= 0) _e_view_layout_move_resize_item(li);
 }
 
 E_API void
 e_view_layout_unpack(E_View *child)
 {
-   E_View_Layout *layout;
    E_View_Layout_Item *li;
 
    if (!child) return;
@@ -294,8 +294,7 @@ e_view_layout_unpack(E_View *child)
    li = e_view_data_get(child, "e_view_layout");
    if (!li) return;
 
-   layout = li->layout;
-   layout->items = eina_inlist_remove(layout->items, EINA_INLIST_GET(li));
+   wl_list_remove(&li->link);
    _e_view_layout_disown(child);
 }
 
@@ -306,9 +305,9 @@ e_view_layout_children_get(E_View_Layout *layout)
    E_View_Layout_Item *li;
 
    if (!layout) return NULL;
-   if (!layout->items) return NULL;
+   if (wl_list_empty(&layout->items)) return NULL;
 
-   EINA_INLIST_FOREACH(layout->items, li)
+   wl_list_for_each_reverse(li, &layout->items, link)
      {
         l = eina_list_append(l, li->view);
      }
@@ -347,13 +346,18 @@ e_view_layout_child_resize(E_View *child, int w, int h)
 E_API void
 e_view_layout_child_raise (E_View *child)
 {
-   E_View_Layout_Item *li;
+   E_View_Layout_Item *li, *top;
 
    li = e_view_data_get(child, "e_view_layout_data");
    if (!li) return;
-   if ((!li->layout->items) || (!EINA_INLIST_GET(li)->prev)) return;
-   li->layout->items = eina_inlist_demote(li->layout->items, EINA_INLIST_GET(li));
-   e_view_raise_to_top(child);
+   if (wl_list_empty(&li->layout->items)) return;
+   top = wl_container_of(li->layout->items.prev, top, link);
+   if (li == top) return;
+
+   wl_list_remove(&li->link);
+   wl_list_insert(&top->link, &li->link);
+
+   e_view_place_above(child, top->view);
 }
 
 E_API void
@@ -362,6 +366,7 @@ e_view_layout_layer_set(E_View_Layout *layout, E_Layer layer)
    E_View_Layout_Item *li;
    E_View_Tree *layer_tree;
    E_Canvas_Layer canvas_layer;
+   E_View *view;
 
    if (!layout) return;
 
@@ -369,10 +374,15 @@ e_view_layout_layer_set(E_View_Layout *layout, E_Layer layer)
 
    layer_tree = e_canvas_layer_view_tree_get(e_canvas_get(e_view_tree_view_get(&layout->tree)), canvas_layer);
 
-   EINA_INLIST_FOREACH(layout->items, li)
+   if (!wl_list_empty(&layout->items))
      {
-        evas_object_layer_set(li->view->eo, canvas_layer);
+        wl_list_for_each_reverse(li, &layout->items, link)
+          {
+             evas_object_layer_set(li->view->eo, canvas_layer);
+          }
      }
+   view = e_view_rect_view_get(layout->clip);
+   evas_object_layer_set(view->eo, canvas_layer);
 
    e_view_reparent(e_view_tree_view_get(&layout->tree), layer_tree);
 }
@@ -383,7 +393,7 @@ e_view_layout_show(E_View_Layout *layout)
    E_View *view;
 
    if (!layout) return;
-   if (!layout->items) return;
+   if (wl_list_empty(&layout->items)) return;
 
    view = e_view_tree_view_get(&layout->tree);
    view->visible = true;
@@ -407,24 +417,14 @@ e_view_layout_hide(E_View_Layout *layout)
 E_API void
 e_view_layout_move(E_View_Layout *layout, int x, int y)
 {
-   E_View_Layout_Item *li;
-   int dx, dy;
-
    if (!layout) return;
 
    if ((x == layout->x) && (y == layout->y)) return;
 
-   dx = x - layout->x;
-   dy = y - layout->y;
-   EINA_INLIST_FOREACH(layout->items, li)
-     {
-        int ox, oy;
-
-        e_view_position_get(li->view, &ox, &oy);
-        e_view_position_set(li->view, ox +dx, oy + dy);
-     }
    layout->x = x;
    layout->y = y;
+
+   e_view_position_set(e_view_tree_view_get(&layout->tree), x, y);
 }
 
 E_API void
@@ -437,6 +437,8 @@ e_view_layout_resize(E_View_Layout *layout, int w, int h)
    layout->w = w;
    layout->h = h;
    layout->changed = 1;
+
+   e_view_rect_size_set(layout->clip, w, h);
    if (layout->frozen <= 0) _e_view_layout_reconfigure(layout);
 }
 
index 29f0c2b1fd8f0c83e990bd7da7cec6767f3a645d..d7fa67635b6f30a0eabc482d84dcd1cc55c781c0 100644 (file)
@@ -7,6 +7,6 @@
 EINTERN int e_view_layout_freeze(E_View_Layout *layout);
 EINTERN int e_view_layout_thaw(E_View_Layout *layout);
 EINTERN void e_view_layout_virtual_size_get(E_View_Layout *layout, int *w, int *h);
-EINTERN void e_view_layout_child_lower(E_View *view);
+EINTERN void e_view_layout_child_lower(E_View *child);
 
 #endif