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);
_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);
}
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;
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));
}
}
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
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);
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;
{
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
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;
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);
}
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);
}
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
E_View_Layout_Item *li;
E_View_Tree *layer_tree;
E_Canvas_Layer canvas_layer;
+ E_View *view;
if (!layout) return;
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);
}
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;
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
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);
}