summaryrefslogtreecommitdiff
path: root/mupdf/build.c
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2004-11-25 04:46:31 +0100
committerTor Andersson <tor@ghostscript.com>2004-11-25 04:46:31 +0100
commit9c659d040a3890dc6a33aed485eba15364631bec (patch)
tree50916134c964184f16706f93d253aa1000ab889d /mupdf/build.c
parent4b2218b903da6de40e8a82b9e2a69157d415637c (diff)
downloadmupdf-9c659d040a3890dc6a33aed485eba15364631bec.tar.xz
optimize away useless clipmasks. undo ctm for shades.
Diffstat (limited to 'mupdf/build.c')
-rw-r--r--mupdf/build.c78
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)