diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-12-05 15:39:03 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-12-05 17:17:26 +0000 |
commit | 0ce8dad9a2330575276b28a37098fe6cc4bf877f (patch) | |
tree | f07404ea268a100d4d43131f3415dcb98e90d206 /src/cairo-rtree.c | |
parent | 31c0726f682159e6465719c389975ec8885fa38b (diff) | |
download | cairo-0ce8dad9a2330575276b28a37098fe6cc4bf877f.tar.gz |
gl: Decouple glyphs on shutdown from the scaled font caches
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-rtree.c')
-rw-r--r-- | src/cairo-rtree.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/cairo-rtree.c b/src/cairo-rtree.c index d6e57916a..94af45b83 100644 --- a/src/cairo-rtree.c +++ b/src/cairo-rtree.c @@ -368,6 +368,34 @@ _cairo_rtree_reset (cairo_rtree_t *rtree) cairo_list_add (&rtree->root.link, &rtree->available); } +static void +_cairo_rtree_node_foreach (cairo_rtree_node_t *node, + void (*func)(cairo_rtree_node_t *, void *data), + void *data) +{ + int i; + + for (i = 0; i < 4 && node->children[i] != NULL; i++) + _cairo_rtree_node_foreach(node->children[i], func, data); + + func(node, data); +} + +void +_cairo_rtree_foreach (cairo_rtree_t *rtree, + void (*func)(cairo_rtree_node_t *, void *data), + void *data) +{ + int i; + + if (rtree->root.state == CAIRO_RTREE_NODE_OCCUPIED) { + func(&rtree->root, data); + } else { + for (i = 0; i < 4 && rtree->root.children[i] != NULL; i++) + _cairo_rtree_node_foreach (rtree->root.children[i], func, data); + } +} + void _cairo_rtree_fini (cairo_rtree_t *rtree) { |