[gs-commits] mupdf/master - 0_6-186-g303890d - Set scissor after replacing dest with the transparency buffer. Pop the transparency buffer after popping the XObject clip masks.

Tor Andersson tor at ghostscript.com
Sat Jul 17 01:47:52 UTC 2010


commit 303890de53fe374e756062f6e4f1762f1b40f069
Author: Tor Andersson <tor at ghostscript.com>
Date:   Fri Jul 16 19:24:05 2010 +0000

    Set scissor after replacing dest with the transparency buffer. Pop the transparency buffer after popping the XObject clip masks.
    
    Ignore-this: e59efa1e1eefc81fc26d5df566c3c75a
    
    darcs-hash:20100716192405-f546f-071285c615eef818ed453b47598d603254eccf76.gz

 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/fitz/dev_draw.c b/fitz/dev_draw.c
index 2855017..3148360 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 f89f9ac..710b52d 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;
 }
 

--
git/hooks/post-receive


More information about the gs-commits mailing list