scene: add node reparent function
If nodes are arranged in a tree rather than at a single level, then it makes sense that there should be a way to move them to a completely different parent in addition to moving up or down among siblings.
This commit is contained in:
parent
b18c254e5f
commit
a1d462fa81
|
@ -90,6 +90,11 @@ void wlr_scene_node_place_above(struct wlr_scene_node *node,
|
||||||
*/
|
*/
|
||||||
void wlr_scene_node_place_below(struct wlr_scene_node *node,
|
void wlr_scene_node_place_below(struct wlr_scene_node *node,
|
||||||
struct wlr_scene_node *sibling);
|
struct wlr_scene_node *sibling);
|
||||||
|
/**
|
||||||
|
* Move the node to another location in the tree.
|
||||||
|
*/
|
||||||
|
void wlr_scene_node_reparent(struct wlr_scene_node *node,
|
||||||
|
struct wlr_scene_node *new_parent);
|
||||||
/**
|
/**
|
||||||
* Call `iterator` on each surface in the scene-graph, with the surface's
|
* Call `iterator` on each surface in the scene-graph, with the surface's
|
||||||
* position in layout coordinates. The function is called from root to leaves
|
* position in layout coordinates. The function is called from root to leaves
|
||||||
|
|
|
@ -133,6 +133,20 @@ void wlr_scene_node_place_below(struct wlr_scene_node *node,
|
||||||
wl_list_insert(sibling->state.link.prev, &node->state.link);
|
wl_list_insert(sibling->state.link.prev, &node->state.link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlr_scene_node_reparent(struct wlr_scene_node *node,
|
||||||
|
struct wlr_scene_node *new_parent) {
|
||||||
|
if (node->parent == new_parent) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wl_list_remove(&node->state.link);
|
||||||
|
|
||||||
|
node->parent = new_parent;
|
||||||
|
if (new_parent != NULL) {
|
||||||
|
wl_list_insert(new_parent->state.children.prev, &node->state.link);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void scene_node_for_each_surface(struct wlr_scene_node *node,
|
static void scene_node_for_each_surface(struct wlr_scene_node *node,
|
||||||
int lx, int ly, wlr_surface_iterator_func_t user_iterator,
|
int lx, int ly, wlr_surface_iterator_func_t user_iterator,
|
||||||
void *user_data) {
|
void *user_data) {
|
||||||
|
|
Loading…
Reference in New Issue