You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2019/06/29 16:14:00 UTC

svn commit: r1862316 - /pdfbox/branches/issue4569/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Author: tilman
Date: Sat Jun 29 16:14:00 2019
New Revision: 1862316

URL: http://svn.apache.org/viewvc?rev=1862316&view=rev
Log:
PDFBOX-4583: remember and apply initial clip of a graphics device

Modified:
    pdfbox/branches/issue4569/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: pdfbox/branches/issue4569/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue4569/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1862316&r1=1862315&r2=1862316&view=diff
==============================================================================
--- pdfbox/branches/issue4569/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/branches/issue4569/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Sat Jun 29 16:14:00 2019
@@ -134,6 +134,9 @@ public class PageDrawer extends PDFGraph
     
     // last clipping path
     private Area lastClip;
+
+    // clip when drawPage() is called, can be null, must be intersected when clipping
+    private Shape initialClip;
     
     // shapes of glyphs being drawn to be used for clipping
     private List<Shape> textClippings;
@@ -245,6 +248,7 @@ public class PageDrawer extends PDFGraph
     {
         graphics = (Graphics2D) g;
         xform = graphics.getTransform();
+        initialClip = graphics.getClip();
         this.pageSize = pageSize;
 
         setRenderingHints();
@@ -288,6 +292,8 @@ public class PageDrawer extends PDFGraph
 
         Area oldLastClip = lastClip;
         lastClip = null;
+        Shape oldInitialClip = initialClip;
+        initialClip = null;
         
         boolean oldFlipTG = flipTG;
         flipTG = true;
@@ -299,6 +305,7 @@ public class PageDrawer extends PDFGraph
         graphics = oldGraphics;
         linePath = oldLinePath;
         lastClip = oldLastClip;
+        initialClip = oldInitialClip;
         clipWindingRule = oldClipWindingRule;
     }
 
@@ -365,6 +372,11 @@ public class PageDrawer extends PDFGraph
         if (clippingPath != lastClip)
         {
             graphics.setClip(clippingPath);
+            if (initialClip != null)
+            {
+                // apply the remembered initial clip, but transform it first
+                graphics.clip(graphics.getTransform().createTransformedShape(initialClip));
+            }
             lastClip = clippingPath;
         }
     }
@@ -669,7 +681,7 @@ public class PageDrawer extends PDFGraph
                 }
             }
         }
-        int lineCap = Math.min(2, Math.max(0, state.getLineCap()));
+        int lineCap = Math.min(2, Math.max(0, state.getLineCap())); // legal values 0..2
         int lineJoin = Math.min(2, Math.max(0, state.getLineJoin()));
         return new BasicStroke(lineWidth, lineCap, lineJoin,
                                state.getMiterLimit(), dashArray, phaseStart);
@@ -1413,6 +1425,7 @@ public class PageDrawer extends PDFGraph
         {
             Graphics2D g2dOriginal = graphics;
             Area lastClipOriginal = lastClip;
+            Shape oldInitialClip = initialClip;
 
             // get the CTM x Form Matrix transform
             Matrix transform = Matrix.concatenate(ctm, form.getMatrix());
@@ -1556,6 +1569,7 @@ public class PageDrawer extends PDFGraph
                 lastClip = lastClipOriginal;
                 graphics.dispose();
                 graphics = g2dOriginal;
+                initialClip = oldInitialClip;
                 clipWindingRule = clipWindingRuleOriginal;
                 linePath = linePathOriginal;
                 pageSize = pageSizeOriginal;