From 811ec408a7d8bdf2fef7d17ee2ad903ac1eafad4 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Fri, 16 Jul 2010 19:24:05 +0000 Subject: Set scissor after replacing dest with the transparency buffer. Pop the transparency buffer after popping the XObject clip masks. --- fitz/dev_draw.c | 7 ++++++- 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; } -- cgit v1.2.3