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/09 08:31:02 UTC

svn commit: r1616918 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/

Author: tilman
Date: Sat Aug  9 06:31:02 2014
New Revision: 1616918

URL: http://svn.apache.org/r1616918
Log:
PDFBOX-1915: simplified BBox handling; more refactoring

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/CoonsTriangle.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingContext.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingContext.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=1616918&r1=1616917&r2=1616918&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 Sat Aug  9 06:31:02 2014
@@ -57,8 +57,6 @@ public class AxialShadingContext extends
     private double y1y0;
     private float d1d0;
     private double denom;
-    private PDRectangle rectBBox;
-    float minBBoxX, minBBoxY, maxBBoxX, maxBBoxY;
     
     private final double axialLength;
     private final int[] colorTable;
@@ -77,32 +75,7 @@ public class AxialShadingContext extends
     {
         super(shading, colorModel, xform, ctm, pageHeight, dBounds);
         this.shading = shading;
-        coords = this.shading.getCoords().toFloatArray();
-        
-        rectBBox = shading.getBBox();
-        if (rectBBox != null)
-        {
-            float[] bboxTab = new float[4];
-            bboxTab[0] = rectBBox.getLowerLeftX();
-            bboxTab[1] = rectBBox.getLowerLeftY();
-            bboxTab[2] = rectBBox.getUpperRightX();
-            bboxTab[3] = rectBBox.getUpperRightY();
-            if (ctm != null)
-            {
-                // transform the coords using the given matrix
-                ctm.createAffineTransform().transform(bboxTab, 0, bboxTab, 0, 2);
-            }
-            xform.transform(bboxTab, 0, bboxTab, 0, 2);
-            minBBoxX = Math.min(bboxTab[0],bboxTab[2]);
-            minBBoxY = Math.min(bboxTab[1],bboxTab[3]);
-            maxBBoxX = Math.max(bboxTab[0],bboxTab[2]);
-            maxBBoxY = Math.max(bboxTab[1],bboxTab[3]);
-            if (minBBoxX == maxBBoxX || minBBoxY == maxBBoxY)
-            {
-                LOG.warn("empty BBox is ignored");
-                rectBBox = null;
-            }
-        }        
+        coords = shading.getCoords().toFloatArray();
 
         if (ctm != null)
         {
@@ -110,10 +83,11 @@ public class AxialShadingContext extends
             ctm.createAffineTransform().transform(coords, 0, coords, 0, 2);
         }
         xform.transform(coords, 0, coords, 0, 2);
+        
         // domain values
-        if (this.shading.getDomain() != null)
+        if (shading.getDomain() != null)
         {
-            domain = this.shading.getDomain().toFloatArray();
+            domain = shading.getDomain().toFloatArray();
         }
         else
         {
@@ -121,8 +95,8 @@ public class AxialShadingContext extends
             domain = new float[] { 0, 1 };
         }
         // extend values
-        COSArray extendValues = this.shading.getExtend();
-        if (this.shading.getExtend() != null)
+        COSArray extendValues = shading.getExtend();
+        if (shading.getExtend() != null)
         {
             extend = new boolean[2];
             extend[0] = ((COSBoolean) extendValues.get(0)).getValue();
@@ -233,18 +207,17 @@ public class AxialShadingContext extends
         for (int j = 0; j < h; j++)
         {
             double currentY = y + j;
-            if (rectBBox != null)
+            if (bboxRect != null)
             {
                 if (currentY < minBBoxY || currentY > maxBBoxY)
                 {
                     continue;
                 }
             }
-            
             for (int i = 0; i < w; i++)
             {
                 double currentX = x + i;
-                if (rectBBox != null)
+                if (bboxRect != null)
                 {
                     if (currentX < minBBoxX || currentX > maxBBoxX)
                     {

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoonsTriangle.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoonsTriangle.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoonsTriangle.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/CoonsTriangle.java Sat Aug  9 06:31:02 2014
@@ -50,7 +50,8 @@ class CoonsTriangle
     private final double v2;
     
     /**
-     * Constructor of CoonsTriangle.
+     * Constructor.
+     *
      * @param p an array of the 3 vertices of a triangle
      * @param c an array of color corresponding the vertex array p
      */

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java Sat Aug  9 06:31:02 2014
@@ -185,7 +185,7 @@ abstract class GouraudShadingContext ext
                 int currentY = y + row;
                 if (bboxRect != null)
                 {
-                    if (currentY < bboxTab[1] || currentY > bboxTab[3])
+                    if (currentY < minBBoxY || currentY > maxBBoxY)
                     {
                         continue;
                     }
@@ -195,7 +195,7 @@ abstract class GouraudShadingContext ext
                     int currentX = x + col;
                     if (bboxRect != null)
                     {
-                        if (currentX < bboxTab[0] || currentX > bboxTab[2])
+                        if (currentX < minBBoxX || currentX > maxBBoxX)
                         {
                             continue;
                         }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PatchMeshesShadingContext.java Sat Aug  9 06:31:02 2014
@@ -304,7 +304,7 @@ abstract class PatchMeshesShadingContext
                 int currentY = y + row;
                 if (bboxRect != null)
                 {
-                    if (currentY < bboxTab[1] || currentY > bboxTab[3])
+                    if (currentY < minBBoxY || currentY > maxBBoxY)
                     {
                         continue;
                     }
@@ -314,7 +314,7 @@ abstract class PatchMeshesShadingContext
                     int currentX = x + col;
                     if (bboxRect != null)
                     {
-                        if (currentX < bboxTab[0] || currentX > bboxTab[2])
+                        if (currentX < minBBoxX || currentX > maxBBoxX)
                         {
                             continue;
                         }

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=1616918&r1=1616917&r2=1616918&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 Sat Aug  9 06:31:02 2014
@@ -61,8 +61,6 @@ public class RadialShadingContext extend
 
     private float d1d0;
     private double denom;
-    private PDRectangle rectBBox;
-    float minBBoxX, minBBoxY, maxBBoxX, maxBBoxY;
 
     private final double longestDistance;
     private int[] colorTable;
@@ -81,33 +79,8 @@ public class RadialShadingContext extend
     {
         super(shading, colorModel, xform, ctm, pageHeight, dBounds);
         this.shading = shading;
-        coords = this.shading.getCoords().toFloatArray();
+        coords = shading.getCoords().toFloatArray();
 
-        rectBBox = shading.getBBox();
-        if (rectBBox != null)
-        {
-            float[] bboxTab = new float[4];
-            bboxTab[0] = rectBBox.getLowerLeftX();
-            bboxTab[1] = rectBBox.getLowerLeftY();
-            bboxTab[2] = rectBBox.getUpperRightX();
-            bboxTab[3] = rectBBox.getUpperRightY();
-            if (ctm != null)
-            {
-                // transform the coords using the given matrix
-                ctm.createAffineTransform().transform(bboxTab, 0, bboxTab, 0, 2);
-            }
-            xform.transform(bboxTab, 0, bboxTab, 0, 2);
-            minBBoxX = Math.min(bboxTab[0],bboxTab[2]);
-            minBBoxY = Math.min(bboxTab[1],bboxTab[3]);
-            maxBBoxX = Math.max(bboxTab[0],bboxTab[2]);
-            maxBBoxY = Math.max(bboxTab[1],bboxTab[3]);
-            if (minBBoxX == maxBBoxX || minBBoxY == maxBBoxY)
-            {
-                LOG.warn("empty BBox is ignored");
-                rectBBox = null;
-            }
-        }        
-        
         if (ctm != null)
         {
             // transform the coords using the given matrix
@@ -127,16 +100,17 @@ public class RadialShadingContext extend
         // domain values
         if (this.shading.getDomain() != null)
         {
-            domain = this.shading.getDomain().toFloatArray();
+            domain = shading.getDomain().toFloatArray();
         }
         else
         {
             // set default values
             domain = new float[] { 0, 1 };
         }
+        
         // extend values
-        COSArray extendValues = this.shading.getExtend();
-        if (this.shading.getExtend() != null)
+        COSArray extendValues = shading.getExtend();
+        if (shading.getExtend() != null)
         {
             extend = new boolean[2];
             extend[0] = ((COSBoolean) extendValues.get(0)).getValue();
@@ -275,7 +249,7 @@ public class RadialShadingContext extend
         for (int j = 0; j < h; j++)
         {
             double currentY = y + j;
-            if (rectBBox != null)
+            if (bboxRect != null)
             {
                 if (currentY < minBBoxY || currentY > maxBBoxY)
                 {
@@ -285,7 +259,7 @@ public class RadialShadingContext extend
             for (int i = 0; i < w; i++)
             {
                 double currentX = x + i;
-                if (rectBBox != null)
+                if (bboxRect != null)
                 {
                     if (currentX < minBBoxX || currentX > maxBBoxX)
                     {

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingContext.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/ShadingContext.java Sat Aug  9 06:31:02 2014
@@ -23,6 +23,8 @@ import java.awt.image.ColorModel;
 import java.awt.image.ComponentColorModel;
 import java.awt.image.DataBuffer;
 import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
 import org.apache.pdfbox.util.Matrix;
@@ -35,10 +37,12 @@ import org.apache.pdfbox.util.Matrix;
  */
 public abstract class ShadingContext
 {
+    private static final Log LOG = LogFactory.getLog(ShadingContext.class);
+
     protected final Rectangle deviceBounds;
     protected PDColorSpace shadingColorSpace;
     protected PDRectangle bboxRect;
-    protected float[] bboxTab = new float[4];
+    protected float minBBoxX, minBBoxY, maxBBoxX, maxBBoxY;
     protected ColorModel outputColorModel;
 
     public ShadingContext(PDShading shading, ColorModel cm, AffineTransform xform,
@@ -57,11 +61,11 @@ public abstract class ShadingContext
         {
             transformBBox(ctm, xform);
         }
-
     }
 
     private void transformBBox(Matrix ctm, AffineTransform xform)
     {
+        float[] bboxTab = new float[4];
         bboxTab[0] = bboxRect.getLowerLeftX();
         bboxTab[1] = bboxRect.getLowerLeftY();
         bboxTab[2] = bboxRect.getUpperRightX();
@@ -72,25 +76,14 @@ public abstract class ShadingContext
             ctm.createAffineTransform().transform(bboxTab, 0, bboxTab, 0, 2);
         }
         xform.transform(bboxTab, 0, bboxTab, 0, 2);
-        reOrder(bboxTab, 0, 2);
-        reOrder(bboxTab, 1, 3);
-        if (bboxTab[0] >= bboxTab[2] || bboxTab[1] >= bboxTab[3])
+        minBBoxX = Math.min(bboxTab[0],bboxTab[2]);
+        minBBoxY = Math.min(bboxTab[1],bboxTab[3]);
+        maxBBoxX = Math.max(bboxTab[0],bboxTab[2]);
+        maxBBoxY = Math.max(bboxTab[1],bboxTab[3]);
+        if (minBBoxX >= maxBBoxX || minBBoxY >= maxBBoxY)
         {
+            LOG.warn("empty BBox is ignored");
             bboxRect = null;
-            //TODO LOG output
-        }
-    }
-
-    // this helper method is used to arrange the array 
-    // to denote the left upper corner and right lower corner of the BBox
-    // i is always < j
-    private void reOrder(float[] array, int i, int j)
-    {
-        if (array[i] > array[j])
-        {
-            float tmp = array[i];
-            array[i] = array[j];
-            array[j] = tmp;
         }
     }
 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingContext.java Sat Aug  9 06:31:02 2014
@@ -126,7 +126,7 @@ class Type1ShadingContext extends Shadin
             int currentY = y + j;
             if (bboxRect != null)
             {
-                if (currentY < bboxTab[1] || currentY > bboxTab[3])
+                if (currentY < minBBoxY || currentY > maxBBoxY)
                 {
                     continue;
                 }
@@ -136,7 +136,7 @@ class Type1ShadingContext extends Shadin
                 int currentX = x + i;
                 if (bboxRect != null)
                 {
-                    if (currentX < bboxTab[0] || currentX > bboxTab[2])
+                    if (currentX < minBBoxX || currentX > maxBBoxX)
                     {
                         continue;
                     }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingContext.java Sat Aug  9 06:31:02 2014
@@ -187,9 +187,4 @@ class Type4ShadingContext extends Gourau
         return list;
     }
 
-    @Override
-    public void dispose()
-    {
-        super.dispose();
-    }
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingContext.java Sat Aug  9 06:31:02 2014
@@ -137,10 +137,5 @@ class Type5ShadingContext extends Gourau
         }
         return list;
     }
-    
-    @Override
-    public void dispose()
-    {
-        super.dispose();
-    }
+
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingContext.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type6ShadingContext.java Sat Aug  9 06:31:02 2014
@@ -78,10 +78,5 @@ class Type6ShadingContext extends PatchM
     {
         return new CoonsPatch(points, color);
     }
-    
-    @Override
-    public void dispose()
-    {
-        super.dispose();
-    }
+
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingContext.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingContext.java?rev=1616918&r1=1616917&r2=1616918&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingContext.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type7ShadingContext.java Sat Aug  9 06:31:02 2014
@@ -78,10 +78,5 @@ class Type7ShadingContext extends PatchM
     {
         return new TensorPatch(points, color);
     }
-    
-    @Override
-    public void dispose()
-    {
-        super.dispose();
-    }
+
 }