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 2015/07/15 22:45:08 UTC

svn commit: r1691272 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading: AxialShadingContext.java RadialShadingContext.java

Author: jahewson
Date: Wed Jul 15 20:45:07 2015
New Revision: 1691272

URL: http://svn.apache.org/r1691272
Log:
PDFBOX-2881: Take into account the angle of the shading

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.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=1691272&r1=1691271&r2=1691272&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 Wed Jul 15 20:45:07 2015
@@ -20,6 +20,7 @@ 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;
@@ -115,14 +116,23 @@ public class AxialShadingContext extends
             LOG.error(ex, ex);
         }
 
-        // get the number of steps
-        factor = (int) Math.max(Math.abs(deviceBounds.getWidth()),
-                                Math.abs(deviceBounds.getHeight()));
+        // 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));
         
         // build the color table for the given number of steps
         colorTable = calcColorTable();
     }
-
+    
     /**
      * Calculate the color on the axial line and store them in an array.
      *

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java?rev=1691272&r1=1691271&r2=1691272&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java Wed Jul 15 20:45:07 2015
@@ -20,6 +20,7 @@ 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;
@@ -121,9 +122,18 @@ public class RadialShadingContext extend
             LOG.error(ex, ex);
         }
 
-        // get the number of steps
-        factor = (int) Math.max(Math.abs(deviceBounds.getWidth()),
-                Math.abs(deviceBounds.getHeight()));
+        // shading space -> device space
+        AffineTransform shadingToDevice = (AffineTransform)xform.clone();
+        shadingToDevice.concatenate(matrix.createAffineTransform());
+
+        // convert connects two circles' centers coordinates to device space
+        Point2D p0 = new Point2D.Double(coords[0], coords[1]);
+        Point2D p1 = new Point2D.Double(coords[3], coords[4]);
+        shadingToDevice.transform(p0, p0);
+        shadingToDevice.transform(p1, p1);
+
+        // the distance between them is number of steps
+        factor = (int)Math.round(p0.distance(p1));
 
         // build the color table for the given number of steps
         colorTable = calcColorTable();