diff options
Diffstat (limited to 'tree/node2.c')
-rw-r--r-- | tree/node2.c | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/tree/node2.c b/tree/node2.c index ceb59ad6..f21ebf36 100644 --- a/tree/node2.c +++ b/tree/node2.c @@ -90,7 +90,7 @@ fz_newblendnode(fz_node **nodep, fz_colorspace *cs, fz_blendkind b, int k, int i *nodep = (fz_node*)node; fz_initnode((fz_node*)node, FZ_NBLEND); - node->cs = cs; + node->cs = fz_keepcolorspace(cs); node->mode = b; node->knockout = k; node->isolated = i; @@ -101,7 +101,31 @@ fz_newblendnode(fz_node **nodep, fz_colorspace *cs, fz_blendkind b, int k, int i fz_rect fz_boundblendnode(fz_blendnode *node, fz_matrix ctm) { - return fz_emptyrect; + fz_node *child; + fz_rect bbox; + fz_rect temp; + + child = node->super.first; + if (!child) + return fz_emptyrect; + + bbox = fz_boundnode(child, ctm); + + child = child->next; + while (child) + { + temp = fz_boundnode(child, ctm); + bbox = fz_mergerects(temp, bbox); + child = child->next; + } + + return bbox; +} + +void +fz_dropblendnode(fz_blendnode *node) +{ + fz_dropcolorspace(node->cs); } /* @@ -223,7 +247,7 @@ fz_newcolornode(fz_node **nodep, fz_colorspace *cs, int n, float *v) *nodep = (fz_node*)node; fz_initnode((fz_node*)node, FZ_NCOLOR); - node->cs = cs; + node->cs = fz_keepcolorspace(cs); node->n = n; for (i = 0; i < n; i++) node->samples[i] = v[i]; @@ -237,6 +261,12 @@ fz_boundcolornode(fz_colornode *node, fz_matrix ctm) return fz_infiniterect; } +void +fz_dropcolornode(fz_colornode *node) +{ + fz_dropcolorspace(node->cs); +} + /* * Image node */ @@ -252,7 +282,7 @@ fz_newimagenode(fz_node **nodep, fz_image *image) *nodep = (fz_node*)node; fz_initnode((fz_node*)node, FZ_NIMAGE); - node->image = image; + node->image = fz_keepimage(image); return nil; } @@ -289,7 +319,7 @@ fz_newshadenode(fz_node **nodep, fz_shade *shade) *nodep = (fz_node*)node; fz_initnode((fz_node*)node, FZ_NSHADE); - node->shade = shade; + node->shade = fz_keepshade(shade); return nil; } |