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 2014/08/16 16:34:14 UTC

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

Author: tilman
Date: Sat Aug 16 14:34:14 2014
New Revision: 1618367

URL: http://svn.apache.org/r1618367
Log:
PDFBOX-1094: add cast forgotten in previous commit; replace getBounds2D() that doesn't work for negative values.

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=1618367&r1=1618366&r2=1618367&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 Aug 16 14:34:14 2014
@@ -17,11 +17,11 @@
 package org.apache.pdfbox.pdmodel.graphics.pattern;
 
 import java.awt.Graphics2D;
-import java.awt.Rectangle;
 import java.awt.TexturePaint;
 import java.awt.Transparency;
 import java.awt.color.ColorSpace;
 import java.awt.geom.AffineTransform;
+import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
 import java.awt.image.ColorModel;
@@ -70,10 +70,10 @@ public class TilingPaint extends Texture
     //  gets rect in parent content stream coordinates
     private static Rectangle2D getTransformedRect(PDTilingPattern pattern)
     {
-        float x = (int)pattern.getBBox().getLowerLeftX();
-        float y = (int)pattern.getBBox().getLowerLeftY();
-        float width = (int)pattern.getBBox().getWidth();
-        float height = (int)pattern.getBBox().getHeight();
+        float x = pattern.getBBox().getLowerLeftX();
+        float y = pattern.getBBox().getLowerLeftY();
+        float width = pattern.getBBox().getWidth();
+        float height = pattern.getBBox().getHeight();
 
         // xStep and yStep
         if (pattern.getXStep() != 0)
@@ -85,16 +85,27 @@ public class TilingPaint extends Texture
             height = pattern.getYStep();
         }
 
+        Rectangle2D rectangle;
         if (pattern.getMatrix() == null)
         {
-            return new Rectangle2D.Float(x, y, width, height);
+            rectangle = new Rectangle2D.Float(x, y, width, height);
         }
         else
         {
             AffineTransform at = pattern.getMatrix().createAffineTransform();
-            Rectangle2D rect = new Rectangle.Float(x, y, width, height);
-            return at.createTransformedShape(rect).getBounds2D();
+            Point2D p1 = new Point2D.Float(x,y);
+            Point2D p2 = new Point2D.Float(x+width,y+height);
+            at.transform(p1, p1);
+            at.transform(p2, p2);
+            // at.createTransformedShape(rect).getBounds2D() gets empty rectangle
+            // when negative numbers, so we do it the hard way
+            rectangle = new Rectangle2D.Float(
+                    (float) Math.min(p1.getX(), p2.getX()),
+                    (float) Math.min(p1.getY(), p2.getY()),
+                    (float) Math.abs(p2.getX() - p1.getX()),
+                    (float) Math.abs(p2.getY() - p1.getY()));
         }
+        return rectangle;
     }
 
     // gets image in parent stream coordinates