diff options
author | Simon Ser <[email protected]> | 2021-08-20 11:25:02 +0200 |
---|---|---|
committer | Isaac Freund <[email protected]> | 2021-09-21 16:48:31 +0200 |
commit | c171032baa8574b3629772a82ec5ea2ac98d6f11 (patch) | |
tree | 4532becfc272888ab33e5ca59da4d82f7906c319 | |
parent | f5b359f5b68b92be2cac3d396fef6feab6078700 (diff) |
scene: add wlr_scene_tree
-rw-r--r-- | wlr_scene.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/wlr_scene.c b/wlr_scene.c index 6a988e5..5d57504 100644 --- a/wlr_scene.c +++ b/wlr_scene.c @@ -15,6 +15,11 @@ static struct wlr_scene *scene_root_from_node(struct wlr_scene_node *node) { return (struct wlr_scene *)node; } +static struct wlr_scene_tree *scene_tree_from_node(struct wlr_scene_node *node) { + assert(node->type == WLR_SCENE_NODE_TREE); + return (struct wlr_scene_tree *)node; +} + struct wlr_scene_surface *wlr_scene_surface_from_node( struct wlr_scene_node *node) { assert(node->type == WLR_SCENE_NODE_SURFACE); @@ -84,6 +89,10 @@ void wlr_scene_node_destroy(struct wlr_scene_node *node) { free(scene); break; + case WLR_SCENE_NODE_TREE:; + struct wlr_scene_tree *tree = scene_tree_from_node(node); + free(tree); + break; case WLR_SCENE_NODE_SURFACE:; struct wlr_scene_surface *scene_surface = wlr_scene_surface_from_node(node); wl_list_remove(&scene_surface->surface_destroy.link); @@ -106,6 +115,16 @@ struct wlr_scene *wlr_scene_create(void) { return scene; } +struct wlr_scene_tree *wlr_scene_tree_create(struct wlr_scene_node *parent) { + struct wlr_scene_tree *tree = calloc(1, sizeof(struct wlr_scene_tree)); + if (tree == NULL) { + return NULL; + } + scene_node_init(&tree->node, WLR_SCENE_NODE_TREE, parent); + + return tree; +} + static void scene_surface_handle_surface_destroy(struct wl_listener *listener, void *data) { struct wlr_scene_surface *scene_surface = @@ -246,6 +265,7 @@ static void _scene_node_damage_whole(struct wlr_scene_node *node, int width = 0, height = 0; switch (node->type) { case WLR_SCENE_NODE_ROOT: + case WLR_SCENE_NODE_TREE: return; case WLR_SCENE_NODE_SURFACE:; struct wlr_scene_surface *scene_surface = @@ -536,8 +556,9 @@ static void render_node_iterator(struct wlr_scene_node *node, }; switch (node->type) { - case WLR_SCENE_NODE_ROOT:; - /* Root node has nothing to render itself */ + case WLR_SCENE_NODE_ROOT: + case WLR_SCENE_NODE_TREE: + /* Root or tree node has nothing to render itself */ break; case WLR_SCENE_NODE_SURFACE:; struct wlr_scene_surface *scene_surface = wlr_scene_surface_from_node(node); |