diff options
author | Tor Andersson <tor@ghostscript.com> | 2010-07-16 19:24:05 +0000 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2010-07-16 19:24:05 +0000 |
commit | 811ec408a7d8bdf2fef7d17ee2ad903ac1eafad4 (patch) | |
tree | c4a082a241a2e782261cc45892aadc01bb0e2932 | |
parent | a56b2d1d460f584c92196dbb6fcea989f1ef19f9 (diff) | |
download | mupdf-811ec408a7d8bdf2fef7d17ee2ad903ac1eafad4.tar.xz |
Set scissor after replacing dest with the transparency buffer. Pop the transparency buffer after popping the XObject clip masks.
-rw-r--r-- | fitz/dev_draw.c | 7 | ||||
-rw-r--r-- | mupdf/pdf_interpret.c | 6 |
2 files changed, 9 insertions, 4 deletions
diff --git a/fitz/dev_draw.c b/fitz/dev_draw.c index 28550174..3148360e 100644 --- a/fitz/dev_draw.c +++ b/fitz/dev_draw.c @@ -27,6 +27,7 @@ struct fz_drawdevice_s struct { fz_pixmap *dest; fz_blendmode blendmode; + fz_bbox scissor; } groupstack[MAXCLIP]; int grouptop; }; @@ -840,8 +841,11 @@ fz_drawbegingroup(void *user, fz_rect rect, int isolated, int knockout, fz_blend fz_clearpixmap(dest, 0); dev->groupstack[dev->grouptop].blendmode = blendmode; + dev->groupstack[dev->grouptop].scissor = dev->scissor; dev->groupstack[dev->grouptop].dest = dev->dest; dev->grouptop++; + + dev->scissor = bbox; dev->dest = dest; } @@ -855,8 +859,9 @@ fz_drawendgroup(void *user) if (dev->grouptop > 0) { dev->grouptop--; - dev->dest = dev->groupstack[dev->grouptop].dest; blendmode = dev->groupstack[dev->grouptop].blendmode; + dev->dest = dev->groupstack[dev->grouptop].dest; + dev->scissor = dev->groupstack[dev->grouptop].scissor; fz_blendpixmaps(group, dev->dest, blendmode); } diff --git a/mupdf/pdf_interpret.c b/mupdf/pdf_interpret.c index f89f9acc..710b52da 100644 --- a/mupdf/pdf_interpret.c +++ b/mupdf/pdf_interpret.c @@ -193,9 +193,6 @@ pdf_runxobject(pdf_csi *csi, fz_obj *resources, pdf_xobject *xobj) if (error) return fz_rethrow(error, "cannot interpret XObject stream"); - if (xobj->transparency) - csi->dev->endgroup(csi->dev->user); - csi->topctm = oldtopctm; while (oldtop < csi->gtop) @@ -203,6 +200,9 @@ pdf_runxobject(pdf_csi *csi, fz_obj *resources, pdf_xobject *xobj) pdf_grestore(csi); + if (xobj->transparency) + csi->dev->endgroup(csi->dev->user); + return fz_okay; } |