diff options
Diffstat (limited to 'tree/tree.c')
-rw-r--r-- | tree/tree.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/tree/tree.c b/tree/tree.c new file mode 100644 index 00000000..1a96ec38 --- /dev/null +++ b/tree/tree.c @@ -0,0 +1,63 @@ +#include <fitz.h> + +fz_error * +fz_newtree(fz_tree **treep) +{ + fz_tree *tree; + + tree = *treep = fz_malloc(sizeof (fz_tree)); + if (!tree) + return fz_outofmem; + + tree->root = nil; + tree->head = nil; + + return nil; +} + +void +fz_freetree(fz_tree *tree) +{ + if (tree->root) + fz_freenode(tree->root); + fz_free(tree); +} + +fz_rect +fz_boundtree(fz_tree *tree, fz_matrix ctm) +{ + if (tree->root) + return fz_boundnode(tree->root, ctm); + return FZ_INFRECT; +} + +void +fz_insertnode(fz_node *node, fz_node *child) +{ + child->parent = node; + + if (fz_isover(node)) + { + child->next = ((fz_over*)node)->child; + ((fz_over*)node)->child = child; + } + + if (fz_ismask(node)) + { + child->next = ((fz_mask*)node)->child; + ((fz_mask*)node)->child = child; + } + + if (fz_isblend(node)) + { + child->next = ((fz_blend*)node)->child; + ((fz_blend*)node)->child = child; + } + + if (fz_istransform(node)) + { + child->next = ((fz_transform*)node)->child; + ((fz_transform*)node)->child = child; + } +} + |