diff options
author | Tor Andersson <tor@ghostscript.com> | 2004-12-02 06:55:46 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2004-12-02 06:55:46 +0100 |
commit | 5c335f9337724f61c14af143b18f0891c58dbacd (patch) | |
tree | be1c7eef2412c09d4ae0caebd933a17e4b8b80f0 /tree/node2.c | |
parent | 615d27315a131bea0df699c3daa1102289b433c6 (diff) | |
download | mupdf-5c335f9337724f61c14af143b18f0891c58dbacd.tar.xz |
optimise object store. refcount resources. colorkeyed transparency. font bbox.
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; } |