You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/03/22 20:39:09 UTC

svn commit: r1580297 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java

Author: jahewson
Date: Sat Mar 22 19:39:08 2014
New Revision: 1580297

URL: http://svn.apache.org/r1580297
Log:
PDFBOX-1094: add support for xStep and yStep in patterns

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java?rev=1580297&r1=1580296&r2=1580297&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/pattern/TilingPaint.java Sat Mar 22 19:39:08 2014
@@ -67,14 +67,29 @@ public class TilingPaint extends Texture
     //  gets rect in parent content stream coordinates
     private static Rectangle getTransformedRect(PDTilingPattern pattern)
     {
+        int x = (int)pattern.getBBox().getLowerLeftX();
+        int y = (int)pattern.getBBox().getLowerLeftY();
+        int width = (int)pattern.getBBox().getWidth();
+        int height = (int)pattern.getBBox().getHeight();
+
+        // xStep and yStep
+        if (pattern.getXStep() != 0)
+        {
+            width = pattern.getXStep();
+        }
+        if (pattern.getYStep() != 0)
+        {
+            height = pattern.getXStep();
+        }
+
         if (pattern.getMatrix() == null)
         {
-            return new Rectangle(pattern.getBBox().createDimension());
+            return new Rectangle(x, y, width, height);
         }
         else
         {
             AffineTransform at = pattern.getMatrix().createAffineTransform();
-            Rectangle rect = new Rectangle(pattern.getBBox().createDimension());
+            Rectangle rect = new Rectangle(x, y, width, height);
             return at.createTransformedShape(rect).getBounds();
         }
     }
@@ -95,7 +110,9 @@ public class TilingPaint extends Texture
         WritableRaster raster = cm.createCompatibleWritableRaster(width, height);
         BufferedImage image = new BufferedImage(cm, raster, false, null);
 
-        // TODO xStep and yStep
+        // TODO the pattern matrix needs to map onto the parent stream's initial space, not the CTM
+        //      so the transformation below is not correct, because TilingPaint needs more
+        //      information to perform the transformation correctly, see PDF 32000, p174.
 
         // matrix
         Matrix matrix;
@@ -112,9 +129,6 @@ public class TilingPaint extends Texture
             matrix.setValue(2, 1, matrix.getValue(2, 1) - (float)rect.getY()); // ty
         }
 
-        // TODO shouldn't create PageDrawer here, the class needs to be overridable
-        // can we re-use the existing PageDrawer somehow and just push/pop its graphics state?
-
         PageDrawer drawer = new PageDrawer(renderer);
         PDRectangle pdRect = new PDRectangle(0, 0, width, height);