diff options
author | Tor Andersson <tor@ghostscript.com> | 2004-11-25 04:46:31 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2004-11-25 04:46:31 +0100 |
commit | 9c659d040a3890dc6a33aed485eba15364631bec (patch) | |
tree | 50916134c964184f16706f93d253aa1000ab889d /mupdf/build.c | |
parent | 4b2218b903da6de40e8a82b9e2a69157d415637c (diff) | |
download | mupdf-9c659d040a3890dc6a33aed485eba15364631bec.tar.xz |
optimize away useless clipmasks. undo ctm for shades.
Diffstat (limited to 'mupdf/build.c')
-rw-r--r-- | mupdf/build.c | 78 |
1 files changed, 54 insertions, 24 deletions
diff --git a/mupdf/build.c b/mupdf/build.c index 541bf056..06c09f84 100644 --- a/mupdf/build.c +++ b/mupdf/build.c @@ -150,8 +150,6 @@ pdf_setshade(pdf_csi *csi, int what, fz_shade *shade) if (error) return error; -printf("setshade!\n"); - mat = what == PDF_MFILL ? &gs->fill : &gs->stroke; mat->kind = PDF_MSHADE; @@ -217,28 +215,6 @@ addcolorshape(pdf_gstate *gs, fz_node *shape, fz_colorspace *cs, float *v) } static fz_error * -addshadeshape(pdf_gstate *gs, fz_node *shape, fz_shade *shade) -{ - fz_error *error; - fz_node *mask; - fz_node *color; - -printf("addshade!\n"); - - error = fz_newmasknode(&mask); - if (error) return error; - - error = fz_newshadenode(&color, shade); - if (error) return error; - - fz_insertnodelast(mask, shape); - fz_insertnodelast(mask, color); - fz_insertnodelast(gs->head, mask); - - return nil; -} - -static fz_error * addinvisibleshape(pdf_gstate *gs, fz_node *shape) { fz_error *error; @@ -351,6 +327,60 @@ printf(" %d,%d to %d,%d\n", x0, y0, x1, y1); } fz_error * +pdf_addshade(pdf_gstate *gs, fz_shade *shade) +{ + fz_error *error; + fz_node *node; + fz_node *xform; + fz_matrix ctm; + fz_matrix inv; + + ctm = getmatrix(gs->head); + inv = fz_invertmatrix(ctm); + + error = fz_newtransformnode(&xform, inv); + if (error) return error; + + error = fz_newshadenode(&node, shade); + if (error) return error; + + fz_insertnodelast(xform, node); + fz_insertnodelast(gs->head, xform); + + return nil; +} + +static fz_error * +addshadeshape(pdf_gstate *gs, fz_node *shape, fz_shade *shade) +{ + fz_error *error; + fz_node *mask; + fz_node *color; + fz_node *xform; + fz_matrix ctm; + fz_matrix inv; + + ctm = getmatrix(gs->head); + inv = fz_invertmatrix(ctm); + + error = fz_newtransformnode(&xform, inv); + if (error) return error; + + error = fz_newmasknode(&mask); + if (error) return error; + + error = fz_newshadenode(&color, shade); + if (error) return error; + + fz_insertnodelast(mask, shape); + fz_insertnodelast(xform, color); + fz_insertnodelast(mask, xform); + fz_insertnodelast(gs->head, mask); + + return nil; +} + +fz_error * pdf_addfillshape(pdf_gstate *gs, fz_node *shape) { switch (gs->fill.kind) |