Author: jahewson
Date: Fri Jul 17 00:42:12 2015
New Revision: 1691467

URL: http://svn.apache.org/r1691467
Log:
PDFBOX-2881: Simplistic computation of axial shading bounds

Modified:
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java?rev=1691467&r1=1691466&r2=1691467&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
 Fri Jul 17 00:42:12 2015
@@ -20,7 +20,6 @@ import java.awt.PaintContext;
 import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.NoninvertibleTransformException;
-import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
@@ -119,15 +118,11 @@ public class AxialShadingContext extends
         // shading space -> device space
         AffineTransform shadingToDevice = (AffineTransform)xform.clone();
         shadingToDevice.concatenate(matrix.createAffineTransform());
-        
-        // convert the start and end coordinates to device space
-        Point2D p0 = new Point2D.Double(coords[0], coords[1]);
-        Point2D p1 = new Point2D.Double(coords[2], coords[3]);
-        shadingToDevice.transform(p0, p0);
-        shadingToDevice.transform(p1, p1);
-        
-        // the distance between them is number of steps
-        factor = (int)Math.round(p0.distance(p1));
+
+        // worst case for the number of steps is opposite diagonal corners, so 
use that
+        double dist = Math.sqrt(Math.pow(deviceBounds.getMaxX() - 
deviceBounds.getMinX(), 2) +
+                                Math.pow(deviceBounds.getMaxY() - 
deviceBounds.getMinX(), 2));
+        factor = (int) Math.ceil(dist);
         
         // build the color table for the given number of steps
         colorTable = calcColorTable();


Reply via email to