Author: tilman
Date: Tue May  5 16:15:18 2015
New Revision: 1677851

URL: http://svn.apache.org/r1677851
Log:
PDFBOX-2576: refactor, make some more fields private, use accessors, remove 
unused constructor param, organize imports

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/AxialShadingPaint.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/PDShading.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType2.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType3.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType4.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType5.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType6.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType7.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDTriangleBasedShadingType.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/RadialShadingPaint.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/TriangleBasedShadingContext.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/Type1ShadingPaint.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/Type4ShadingPaint.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/Type5ShadingPaint.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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -1,303 +1,298 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.pdfbox.pdmodel.graphics.shading;
-
-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;
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.pdfbox.cos.COSArray;
-import org.apache.pdfbox.cos.COSBoolean;
-import org.apache.pdfbox.pdmodel.common.function.PDFunction;
-import org.apache.pdfbox.util.Matrix;
-
-/**
- * AWT PaintContext for axial shading.
- *
- * Performance improvement done as part of GSoC2014, Tilman Hausherr is the 
mentor.
- *
- * @author Shaola Ren
- */
-public class AxialShadingContext extends ShadingContext implements PaintContext
-{
-    private static final Log LOG = 
LogFactory.getLog(AxialShadingContext.class);
-
-    private PDShadingType2 axialShadingType;
-
-    private final float[] coords;
-    private final float[] domain;
-    private final boolean[] extend;
-    private final double x1x0;
-    private final double y1y0;
-    private final float d1d0;
-    private double denom;
-
-    private final int factor;
-    private final int[] colorTable;
-
-    private AffineTransform rat;
-
-    /**
-     * Constructor creates an instance to be used for fill operations.
-     *
-     * @param shading the shading type to be used
-     * @param colorModel the color model to be used
-     * @param xform transformation for user to device space
-     * @param matrix the pattern matrix concatenated with that of the parent 
content stream
-     * @param deviceBounds device bounds
-     * @throws java.io.IOException if there is an error getting the color 
space or doing color conversion.
-     */
-    public AxialShadingContext(PDShadingType2 shading, ColorModel colorModel, 
AffineTransform xform,
-                               Matrix matrix, Rectangle deviceBounds) throws 
IOException
-    {
-        super(shading, colorModel, xform, matrix);
-        this.axialShadingType = shading;
-        coords = shading.getCoords().toFloatArray();
-
-        // domain values
-        if (shading.getDomain() != null)
-        {
-            domain = shading.getDomain().toFloatArray();
-        }
-        else
-        {
-            // set default values
-            domain = new float[] { 0, 1 };
-        }
-        // extend values
-        COSArray extendValues = shading.getExtend();
-        if (shading.getExtend() != null)
-        {
-            extend = new boolean[2];
-            extend[0] = ((COSBoolean) extendValues.get(0)).getValue();
-            extend[1] = ((COSBoolean) extendValues.get(1)).getValue();
-        }
-        else
-        {
-            // set default values
-            extend = new boolean[] { false, false };
-        }
-        // calculate some constants to be used in getRaster
-        x1x0 = coords[2] - coords[0];
-        y1y0 = coords[3] - coords[1];
-        d1d0 = domain[1] - domain[0];
-        denom = Math.pow(x1x0, 2) + Math.pow(y1y0, 2);
-        double longestDistance = Math.sqrt(denom);
-
-        try
-        {
-            // get inverse transform to be independent of current user / 
device space 
-            // when handling actual pixels in getRaster()
-            rat = matrix.createAffineTransform().createInverse();
-            rat.concatenate(xform.createInverse());
-        }
-        catch (NoninvertibleTransformException ex)
-        {
-            LOG.error(ex, ex);
-        }
-
-        // transform the distance to actual pixel space
-        // use transform, because xform.getScaleX() does not return correct 
scaling on 90° rotated matrix
-        Point2D point = new Point2D.Double(longestDistance, longestDistance);
-        matrix.transform(point);
-        xform.transform(point, point);
-        factor = (int) Math.max(Math.abs(point.getX()), 
Math.abs(point.getY()));
-        colorTable = calcColorTable();
-    }
-
-    /**
-     * Calculate the color on the axial line and store them in an array.
-     *
-     * @return an array, index denotes the relative position, the corresponding
-     * value is the color on the axial line
-     * @throws IOException if the color conversion fails.
-     */
-    private int[] calcColorTable() throws IOException
-    {
-        int[] map = new int[factor + 1];
-        if (factor == 0 || d1d0 == 0)
-        {
-            float[] values = axialShadingType.evalFunction(domain[0]);
-            map[0] = convertToRGB(values);
-        }
-        else
-        {
-            for (int i = 0; i <= factor; i++)
-            {
-                float t = domain[0] + d1d0 * i / factor;
-                float[] values = axialShadingType.evalFunction(t);
-                map[i] = convertToRGB(values);
-            }
-        }
-        return map;
-    }
-
-    @Override
-    public void dispose()
-    {
-        outputColorModel = null;
-        shadingColorSpace = null;
-        axialShadingType = null;
-    }
-
-    @Override
-    public ColorModel getColorModel()
-    {
-        return outputColorModel;
-    }
-
-    @Override
-    public Raster getRaster(int x, int y, int w, int h)
-    {
-        // create writable raster
-        WritableRaster raster = 
getColorModel().createCompatibleWritableRaster(w, h);
-        boolean useBackground;
-        int[] data = new int[w * h * 4];
-        for (int j = 0; j < h; j++)
-        {
-            double currentY = y + j;
-            if (bboxRect != null && (currentY < minBBoxY || currentY > 
maxBBoxY))
-            {
-                continue;
-            }
-            for (int i = 0; i < w; i++)
-            {
-                double currentX = x + i;
-                if (bboxRect != null && (currentX < minBBoxX || currentX > 
maxBBoxX))
-                {
-                    continue;
-                }
-                useBackground = false;
-                float[] values = new float[] { x + i, y + j };
-                rat.transform(values, 0, values, 0, 1);
-                currentX = values[0];
-                currentY = values[1];
-                double inputValue = x1x0 * (currentX - coords[0]);
-                inputValue += y1y0 * (currentY - coords[1]);
-                // TODO this happens if start == end, see PDFBOX-1442
-                if (denom == 0)
-                {
-                    if (background == null)
-                    {
-                        continue;
-                    }
-                    useBackground = true;
-                }
-                else
-                {
-                    inputValue /= denom;
-                }
-                // input value is out of range
-                if (inputValue < 0)
-                {
-                    // the shading has to be extended if extend[0] == true
-                    if (extend[0])
-                    {
-                        inputValue = 0;
-                    }
-                    else
-                    {
-                        if (background == null)
-                        {
-                            continue;
-                        }
-                        useBackground = true;
-                    }
-                }
-                // input value is out of range
-                else if (inputValue > 1)
-                {
-                    // the shading has to be extended if extend[1] == true
-                    if (extend[1])
-                    {
-                        inputValue = 1;
-                    }
-                    else
-                    {
-                        if (background == null)
-                        {
-                            continue;
-                        }
-                        useBackground = true;
-                    }
-                }
-                int value;
-                if (useBackground)
-                {
-                    // use the given backgound color values
-                    value = rgbBackground;
-                }
-                else
-                {
-                    int key = (int) (inputValue * factor);
-                    value = colorTable[key];
-                }
-                int index = (j * w + i) * 4;
-                data[index] = value & 255;
-                value >>= 8;
-                data[index + 1] = value & 255;
-                value >>= 8;
-                data[index + 2] = value & 255;
-                data[index + 3] = 255;
-            }
-        }
-        raster.setPixels(0, 0, w, h, data);
-        return raster;
-    }
-
-    /**
-     * Returns the coords values.
-     */
-    public float[] getCoords()
-    {
-        return coords;
-    }
-
-    /**
-     * Returns the domain values.
-     */
-    public float[] getDomain()
-    {
-        return domain;
-    }
-
-    /**
-     * Returns the extend values.
-     */
-    public boolean[] getExtend()
-    {
-        return extend;
-    }
-
-    /**
-     * Returns the function.
-     *
-     * @throws java.io.IOException if we were not able to create the function.
-     */
-    public PDFunction getFunction() throws IOException
-    {
-        return axialShadingType.getFunction();
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.pdmodel.graphics.shading;
+
+import java.awt.PaintContext;
+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;
+import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSBoolean;
+import org.apache.pdfbox.pdmodel.common.function.PDFunction;
+import org.apache.pdfbox.util.Matrix;
+
+/**
+ * AWT PaintContext for axial shading.
+ *
+ * Performance improvement done as part of GSoC2014, Tilman Hausherr is the 
mentor.
+ *
+ * @author Shaola Ren
+ */
+public class AxialShadingContext extends ShadingContext implements PaintContext
+{
+    private static final Log LOG = 
LogFactory.getLog(AxialShadingContext.class);
+
+    private PDShadingType2 axialShadingType;
+
+    private final float[] coords;
+    private final float[] domain;
+    private final boolean[] extend;
+    private final double x1x0;
+    private final double y1y0;
+    private final float d1d0;
+    private double denom;
+
+    private final int factor;
+    private final int[] colorTable;
+
+    private AffineTransform rat;
+
+    /**
+     * Constructor creates an instance to be used for fill operations.
+     *
+     * @param shading the shading type to be used
+     * @param colorModel the color model to be used
+     * @param xform transformation for user to device space
+     * @param matrix the pattern matrix concatenated with that of the parent 
content stream
+     * @throws java.io.IOException if there is an error getting the color 
space or doing color conversion.
+     */
+    public AxialShadingContext(PDShadingType2 shading, ColorModel colorModel, 
AffineTransform xform,
+                               Matrix matrix) throws IOException
+    {
+        super(shading, colorModel, xform, matrix);
+        this.axialShadingType = shading;
+        coords = shading.getCoords().toFloatArray();
+
+        // domain values
+        if (shading.getDomain() != null)
+        {
+            domain = shading.getDomain().toFloatArray();
+        }
+        else
+        {
+            // set default values
+            domain = new float[] { 0, 1 };
+        }
+        // extend values
+        COSArray extendValues = shading.getExtend();
+        if (shading.getExtend() != null)
+        {
+            extend = new boolean[2];
+            extend[0] = ((COSBoolean) extendValues.get(0)).getValue();
+            extend[1] = ((COSBoolean) extendValues.get(1)).getValue();
+        }
+        else
+        {
+            // set default values
+            extend = new boolean[] { false, false };
+        }
+        // calculate some constants to be used in getRaster
+        x1x0 = coords[2] - coords[0];
+        y1y0 = coords[3] - coords[1];
+        d1d0 = domain[1] - domain[0];
+        denom = Math.pow(x1x0, 2) + Math.pow(y1y0, 2);
+        double longestDistance = Math.sqrt(denom);
+
+        try
+        {
+            // get inverse transform to be independent of current user / 
device space 
+            // when handling actual pixels in getRaster()
+            rat = matrix.createAffineTransform().createInverse();
+            rat.concatenate(xform.createInverse());
+        }
+        catch (NoninvertibleTransformException ex)
+        {
+            LOG.error(ex, ex);
+        }
+
+        // transform the distance to actual pixel space
+        // use transform, because xform.getScaleX() does not return correct 
scaling on 90° rotated matrix
+        Point2D point = new Point2D.Double(longestDistance, longestDistance);
+        matrix.transform(point);
+        xform.transform(point, point);
+        factor = (int) Math.max(Math.abs(point.getX()), 
Math.abs(point.getY()));
+        colorTable = calcColorTable();
+    }
+
+    /**
+     * Calculate the color on the axial line and store them in an array.
+     *
+     * @return an array, index denotes the relative position, the corresponding
+     * value is the color on the axial line
+     * @throws IOException if the color conversion fails.
+     */
+    private int[] calcColorTable() throws IOException
+    {
+        int[] map = new int[factor + 1];
+        if (factor == 0 || d1d0 == 0)
+        {
+            float[] values = axialShadingType.evalFunction(domain[0]);
+            map[0] = convertToRGB(values);
+        }
+        else
+        {
+            for (int i = 0; i <= factor; i++)
+            {
+                float t = domain[0] + d1d0 * i / factor;
+                float[] values = axialShadingType.evalFunction(t);
+                map[i] = convertToRGB(values);
+            }
+        }
+        return map;
+    }
+
+    @Override
+    public void dispose()
+    {
+        super.dispose();
+        axialShadingType = null;
+    }
+
+    @Override
+    public ColorModel getColorModel()
+    {
+        return super.getColorModel();
+    }
+
+    @Override
+    public Raster getRaster(int x, int y, int w, int h)
+    {
+        // create writable raster
+        WritableRaster raster = 
getColorModel().createCompatibleWritableRaster(w, h);
+        boolean useBackground;
+        int[] data = new int[w * h * 4];
+        for (int j = 0; j < h; j++)
+        {
+            double currentY = y + j;
+            if (bboxRect != null && (currentY < minBBoxY || currentY > 
maxBBoxY))
+            {
+                continue;
+            }
+            for (int i = 0; i < w; i++)
+            {
+                double currentX = x + i;
+                if (bboxRect != null && (currentX < minBBoxX || currentX > 
maxBBoxX))
+                {
+                    continue;
+                }
+                useBackground = false;
+                float[] values = new float[] { x + i, y + j };
+                rat.transform(values, 0, values, 0, 1);
+                currentX = values[0];
+                currentY = values[1];
+                double inputValue = x1x0 * (currentX - coords[0]) + y1y0 * 
(currentY - coords[1]);
+                // TODO this happens if start == end, see PDFBOX-1442
+                if (denom == 0)
+                {
+                    if (getBackground() == null)
+                    {
+                        continue;
+                    }
+                    useBackground = true;
+                }
+                else
+                {
+                    inputValue /= denom;
+                }
+                // input value is out of range
+                if (inputValue < 0)
+                {
+                    // the shading has to be extended if extend[0] == true
+                    if (extend[0])
+                    {
+                        inputValue = 0;
+                    }
+                    else
+                    {
+                        if (getBackground() == null)
+                        {
+                            continue;
+                        }
+                        useBackground = true;
+                    }
+                }
+                // input value is out of range
+                else if (inputValue > 1)
+                {
+                    // the shading has to be extended if extend[1] == true
+                    if (extend[1])
+                    {
+                        inputValue = 1;
+                    }
+                    else
+                    {
+                        if (getBackground() == null)
+                        {
+                            continue;
+                        }
+                        useBackground = true;
+                    }
+                }
+                int value;
+                if (useBackground)
+                {
+                    // use the given backgound color values
+                    value = getRgbBackground();
+                }
+                else
+                {
+                    int key = (int) (inputValue * factor);
+                    value = colorTable[key];
+                }
+                int index = (j * w + i) * 4;
+                data[index] = value & 255;
+                value >>= 8;
+                data[index + 1] = value & 255;
+                value >>= 8;
+                data[index + 2] = value & 255;
+                data[index + 3] = 255;
+            }
+        }
+        raster.setPixels(0, 0, w, h, data);
+        return raster;
+    }
+
+    /**
+     * Returns the coords values.
+     */
+    public float[] getCoords()
+    {
+        return coords;
+    }
+
+    /**
+     * Returns the domain values.
+     */
+    public float[] getDomain()
+    {
+        return domain;
+    }
+
+    /**
+     * Returns the extend values.
+     */
+    public boolean[] getExtend()
+    {
+        return extend;
+    }
+
+    /**
+     * Returns the function.
+     *
+     * @throws java.io.IOException if we were not able to create the function.
+     */
+    public PDFunction getFunction() throws IOException
+    {
+        return axialShadingType.getFunction();
+    }
+}

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/AxialShadingPaint.java
 Tue May  5 16:15:18 2015
@@ -1,76 +1,75 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.pdfbox.pdmodel.graphics.shading;
-
-import java.awt.Color;
-import java.awt.Paint;
-import java.awt.PaintContext;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.ColorModel;
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.pdfbox.util.Matrix;
-
-/**
- * AWT Paint for axial shading.
- *
- */
-public class AxialShadingPaint implements Paint
-{
-    private static final Log LOG = LogFactory.getLog(AxialShadingPaint.class);
-
-    private final PDShadingType2 shading;
-    private final Matrix matrix;
-
-    /**
-     * Constructor.
-     *
-     * @param shadingType2 the shading resources
-     * @param matrix the pattern matrix concatenated with that of the parent 
content stream
-     */
-    AxialShadingPaint(PDShadingType2 shadingType2, Matrix matrix)
-    {
-        shading = shadingType2;
-        this.matrix = matrix;
-    }
-
-    @Override
-    public int getTransparency()
-    {
-        return 0;
-    }
-
-    @Override
-    public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, 
Rectangle2D userBounds,
-                                      AffineTransform xform, RenderingHints 
hints)
-    {
-        try
-        {
-            return new AxialShadingContext(shading, cm, xform, matrix, 
deviceBounds);
-        }
-        catch (IOException e)
-        {
-            LOG.error("An error occurred while painting", e);
-            return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, 
userBounds, xform, hints);
-        }
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.pdmodel.graphics.shading;
+
+import java.awt.Color;
+import java.awt.Paint;
+import java.awt.PaintContext;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.ColorModel;
+import java.io.IOException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.util.Matrix;
+
+/**
+ * AWT Paint for axial shading.
+ *
+ */
+public class AxialShadingPaint implements Paint
+{
+    private static final Log LOG = LogFactory.getLog(AxialShadingPaint.class);
+
+    private final PDShadingType2 shading;
+    private final Matrix matrix;
+
+    /**
+     * Constructor.
+     *
+     * @param shadingType2 the shading resources
+     * @param matrix the pattern matrix concatenated with that of the parent 
content stream
+     */
+    AxialShadingPaint(PDShadingType2 shadingType2, Matrix matrix)
+    {
+        shading = shadingType2;
+        this.matrix = matrix;
+    }
+
+    @Override
+    public int getTransparency()
+    {
+        return 0;
+    }
+
+    @Override
+    public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, 
Rectangle2D userBounds,
+                                      AffineTransform xform, RenderingHints 
hints)
+    {
+        try
+        {
+            return new AxialShadingContext(shading, cm, xform, matrix);
+        }
+        catch (IOException e)
+        {
+            LOG.error("An error occurred while painting", e);
+            return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, 
userBounds, xform, hints);
+        }
+    }
+}

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -45,7 +45,7 @@ abstract class GouraudShadingContext ext
     /**
      * triangle list.
      */
-    protected List<ShadedTriangle> triangleList;
+    private List<ShadedTriangle> triangleList = new 
ArrayList<ShadedTriangle>();
 
     /**
      * Constructor creates an instance to be used for fill operations.
@@ -60,7 +60,6 @@ abstract class GouraudShadingContext ext
                                     Matrix matrix) throws IOException
     {
         super(shading, colorModel, xform, matrix);
-        triangleList = new ArrayList<ShadedTriangle>();
     }
 
     /**
@@ -100,6 +99,11 @@ abstract class GouraudShadingContext ext
         return new Vertex(p, colorComponentTab);
     }
 
+    void setTriangleList(List<ShadedTriangle> triangleList)
+    {
+        this.triangleList = triangleList;
+    }
+
     @Override
     protected Map<Point, Integer> calcPixelTable(Rectangle deviceBounds) 
throws IOException
     {

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShading.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShading.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShading.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShading.java
 Tue May  5 16:15:18 2015
@@ -18,7 +18,6 @@ package org.apache.pdfbox.pdmodel.graphi
 
 import java.awt.Paint;
 import java.io.IOException;
-
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType2.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType2.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType2.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType2.java
 Tue May  5 16:15:18 2015
@@ -16,13 +16,13 @@
  */
 package org.apache.pdfbox.pdmodel.graphics.shading;
 
+import java.awt.Paint;
+
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.util.Matrix;
 
-import java.awt.Paint;
-
 /**
  * Resources for an axial shading.
  */

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType3.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType3.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType3.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType3.java
 Tue May  5 16:15:18 2015
@@ -16,11 +16,11 @@
  */
 package org.apache.pdfbox.pdmodel.graphics.shading;
 
+import java.awt.Paint;
+
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.util.Matrix;
 
-import java.awt.Paint;
-
 /**
  * Resources for a radial shading.
  */

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType4.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType4.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType4.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType4.java
 Tue May  5 16:15:18 2015
@@ -1,72 +1,72 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.pdfbox.pdmodel.graphics.shading;
-
-import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.util.Matrix;
-
-import java.awt.Paint;
-
-/**
- * Resources for a shading type 4 (Free-Form Gouraud-Shaded Triangle Mesh).
- */
-public class PDShadingType4 extends PDTriangleBasedShadingType
-{
-    /**
-     * Constructor using the given shading dictionary.
-     *
-     * @param shadingDictionary the dictionary for this shading
-     */
-    public PDShadingType4(COSDictionary shadingDictionary)
-    {
-        super(shadingDictionary);
-    }
-
-    @Override
-    public int getShadingType()
-    {
-        return PDShading.SHADING_TYPE4;
-    }
-
-    /**
-     * The bits per flag of this shading. This will return -1 if one has not
-     * been set.
-     *
-     * @return The number of bits per flag.
-     */
-    public int getBitsPerFlag()
-    {
-        return getCOSObject().getInt(COSName.BITS_PER_FLAG, -1);
-    }
-
-    /**
-     * Set the number of bits per flag.
-     *
-     * @param bitsPerFlag the number of bits per flag
-     */
-    public void setBitsPerFlag(int bitsPerFlag)
-    {
-        getCOSObject().setInt(COSName.BITS_PER_FLAG, bitsPerFlag);
-    }
-
-    @Override
-    public Paint toPaint(Matrix matrix)
-    {
-        return new Type4ShadingPaint(this, matrix);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.pdmodel.graphics.shading;
+
+import java.awt.Paint;
+
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.util.Matrix;
+
+/**
+ * Resources for a shading type 4 (Free-Form Gouraud-Shaded Triangle Mesh).
+ */
+public class PDShadingType4 extends PDTriangleBasedShadingType
+{
+    /**
+     * Constructor using the given shading dictionary.
+     *
+     * @param shadingDictionary the dictionary for this shading
+     */
+    public PDShadingType4(COSDictionary shadingDictionary)
+    {
+        super(shadingDictionary);
+    }
+
+    @Override
+    public int getShadingType()
+    {
+        return PDShading.SHADING_TYPE4;
+    }
+
+    /**
+     * The bits per flag of this shading. This will return -1 if one has not
+     * been set.
+     *
+     * @return The number of bits per flag.
+     */
+    public int getBitsPerFlag()
+    {
+        return getCOSObject().getInt(COSName.BITS_PER_FLAG, -1);
+    }
+
+    /**
+     * Set the number of bits per flag.
+     *
+     * @param bitsPerFlag the number of bits per flag
+     */
+    public void setBitsPerFlag(int bitsPerFlag)
+    {
+        getCOSObject().setInt(COSName.BITS_PER_FLAG, bitsPerFlag);
+    }
+
+    @Override
+    public Paint toPaint(Matrix matrix)
+    {
+        return new Type4ShadingPaint(this, matrix);
+    }
+}

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType5.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType5.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType5.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType5.java
 Tue May  5 16:15:18 2015
@@ -16,12 +16,12 @@
  */
 package org.apache.pdfbox.pdmodel.graphics.shading;
 
+import java.awt.Paint;
+
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.util.Matrix;
 
-import java.awt.Paint;
-
 /**
  * Resources for a shading type 5 (Lattice-Form Gouraud-Shade Triangle Mesh).
  */

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType6.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType6.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType6.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType6.java
 Tue May  5 16:15:18 2015
@@ -1,50 +1,50 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.pdfbox.pdmodel.graphics.shading;
-
-import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.util.Matrix;
-
-import java.awt.Paint;
-
-/**
- * Resources for a shading type 6 (Coons Patch Mesh).
- */
-public class PDShadingType6 extends PDShadingType4
-{
-    /**
-     * Constructor using the given shading dictionary.
-     *
-     * @param shadingDictionary the dictionary for this shading
-     */
-    public PDShadingType6(COSDictionary shadingDictionary)
-    {
-        super(shadingDictionary);
-    }
-
-    @Override
-    public int getShadingType()
-    {
-        return PDShading.SHADING_TYPE6;
-    }
-
-    @Override
-    public Paint toPaint(Matrix matrix)
-    {
-        return new Type6ShadingPaint(this, matrix);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.pdmodel.graphics.shading;
+
+import java.awt.Paint;
+
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.util.Matrix;
+
+/**
+ * Resources for a shading type 6 (Coons Patch Mesh).
+ */
+public class PDShadingType6 extends PDShadingType4
+{
+    /**
+     * Constructor using the given shading dictionary.
+     *
+     * @param shadingDictionary the dictionary for this shading
+     */
+    public PDShadingType6(COSDictionary shadingDictionary)
+    {
+        super(shadingDictionary);
+    }
+
+    @Override
+    public int getShadingType()
+    {
+        return PDShading.SHADING_TYPE6;
+    }
+
+    @Override
+    public Paint toPaint(Matrix matrix)
+    {
+        return new Type6ShadingPaint(this, matrix);
+    }
+}

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType7.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType7.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType7.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDShadingType7.java
 Tue May  5 16:15:18 2015
@@ -1,50 +1,50 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.pdfbox.pdmodel.graphics.shading;
-
-import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.util.Matrix;
-
-import java.awt.Paint;
-
-/**
- * Resources for a shading type 7 (Tensor-Product Patch Mesh).
- */
-public class PDShadingType7 extends PDShadingType6
-{
-    /**
-     * Constructor using the given shading dictionary.
-     *
-     * @param shadingDictionary the dictionary for this shading
-     */
-    public PDShadingType7(COSDictionary shadingDictionary)
-    {
-        super(shadingDictionary);
-    }
-
-    @Override
-    public int getShadingType()
-    {
-        return PDShading.SHADING_TYPE7;
-    }
-
-    @Override
-    public Paint toPaint(Matrix matrix)
-    {
-        return new Type7ShadingPaint(this, matrix);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.pdmodel.graphics.shading;
+
+import java.awt.Paint;
+
+import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.util.Matrix;
+
+/**
+ * Resources for a shading type 7 (Tensor-Product Patch Mesh).
+ */
+public class PDShadingType7 extends PDShadingType6
+{
+    /**
+     * Constructor using the given shading dictionary.
+     *
+     * @param shadingDictionary the dictionary for this shading
+     */
+    public PDShadingType7(COSDictionary shadingDictionary)
+    {
+        super(shadingDictionary);
+    }
+
+    @Override
+    public int getShadingType()
+    {
+        return PDShading.SHADING_TYPE7;
+    }
+
+    @Override
+    public Paint toPaint(Matrix matrix)
+    {
+        return new Type7ShadingPaint(this, matrix);
+    }
+}

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDTriangleBasedShadingType.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDTriangleBasedShadingType.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDTriangleBasedShadingType.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/PDTriangleBasedShadingType.java
 Tue May  5 16:15:18 2015
@@ -16,9 +16,9 @@
 package org.apache.pdfbox.pdmodel.graphics.shading;
 
 import org.apache.pdfbox.cos.COSArray;
+import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.pdmodel.common.PDRange;
-import org.apache.pdfbox.cos.COSDictionary;
 
 /**
  * Common resources for shading types 4,5,6 and 7

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -45,10 +45,11 @@ abstract class PatchMeshesShadingContext
 {
     private static final Log LOG = 
LogFactory.getLog(PatchMeshesShadingContext.class);
 
-    protected final PDShading patchMeshesShadingType;
-    protected List<Patch> patchList; // patch list
-    protected int bitsPerFlag; // bits per flag
-
+    /**
+     * patch list
+     */
+    private List<Patch> patchList = new ArrayList<Patch>();
+    
     /**
      * Constructor creates an instance to be used for fill operations.
      *
@@ -56,36 +57,42 @@ abstract class PatchMeshesShadingContext
      * @param colorModel the color model to be used
      * @param xform transformation for user to device space
      * @param matrix the pattern matrix concatenated with that of the parent 
content stream
+     * @param deviceBounds device bounds
+     * @param controlPoints number of control points, 12 for type 6 shading 
and 16 for type 7 shading
      * @throws IOException if something went wrong
      */
-    protected PatchMeshesShadingContext(PDShading shading, ColorModel 
colorModel,
-                                        AffineTransform xform, Matrix matrix)
-                                        throws IOException
+    protected PatchMeshesShadingContext(PDShadingType6 shading, ColorModel 
colorModel,
+            AffineTransform xform, Matrix matrix, Rectangle deviceBounds,
+            int controlPoints) throws IOException
     {
         super(shading, colorModel, xform, matrix);
-        patchMeshesShadingType = shading;
-        bitsPerFlag = ((PDShadingType4) shading).getBitsPerFlag();
-        patchList = new ArrayList<Patch>();
+        patchList = collectPatches(shading, xform, matrix, controlPoints);
+        createPixelTable(deviceBounds);
     }
 
     /**
      * Create a patch list from a data stream, the returned list contains all 
the patches contained
      * in the data stream.
      *
+     * @param shadingType the shading type
      * @param xform transformation for user to device space
      * @param matrix the pattern matrix concatenated with that of the parent 
content stream
-     * @param dict dictionary object to give the image information
-     * @param rangeX range for coordinate x
-     * @param rangeY range for coordinate y
-     * @param colRange range for color
-     * @param numP number of control points, 12 for type 6 shading and 16 for 
type 7 shading
+     * @param controlPoints number of control points, 12 for type 6 shading 
and 16 for type 7 shading
      * @return the obtained patch list
      * @throws IOException when something went wrong
      */
-    protected List<Patch> getPatchList(AffineTransform xform, Matrix matrix, 
COSDictionary dict,
-                                       PDRange rangeX, PDRange rangeY, 
PDRange[] colRange, int numP)
-                                       throws IOException
+    final List<Patch> collectPatches(PDShadingType6 shadingType, 
AffineTransform xform,
+            Matrix matrix, int controlPoints) throws IOException
     {
+        COSDictionary dict = shadingType.getCOSObject();
+        int bitsPerFlag = shadingType.getBitsPerFlag();
+        PDRange rangeX = shadingType.getDecodeForParameter(0);
+        PDRange rangeY = shadingType.getDecodeForParameter(1);
+        PDRange[] colRange = new PDRange[numberOfColorComponents];
+        for (int i = 0; i < numberOfColorComponents; ++i)
+        {
+            colRange[i] = shadingType.getDecodeForParameter(2 + i);
+        }
         List<Patch> list = new ArrayList<Patch>();
         long maxSrcCoord = (long) Math.pow(2, bitsPerCoordinate) - 1;
         long maxSrcColor = (long) Math.pow(2, bitsPerColorComponent) - 1;
@@ -96,8 +103,7 @@ abstract class PatchMeshesShadingContext
         {
             Point2D[] implicitEdge = new Point2D[4];
             float[][] implicitCornerColor = new 
float[2][numberOfColorComponents];
-
-            byte flag = (byte) 0;
+            byte flag = 0;
 
             try
             {
@@ -114,7 +120,7 @@ abstract class PatchMeshesShadingContext
                 {
                     boolean isFree = (flag == 0);
                     Patch current = readPatch(mciis, isFree, implicitEdge, 
implicitCornerColor,
-                            maxSrcCoord, maxSrcColor, rangeX, rangeY, 
colRange, matrix, xform, numP);
+                            maxSrcCoord, maxSrcColor, rangeX, rangeY, 
colRange, matrix, xform, controlPoints);
                     if (current == null)
                     {
                         break;
@@ -170,17 +176,17 @@ abstract class PatchMeshesShadingContext
      * @param colRange range for color
      * @param matrix the pattern matrix concatenated with that of the parent 
content stream
      * @param xform transformation for user to device space
-     * @param numP number of control points, 12 for type 6 shading and 16 for 
type 7 shading
+     * @param controlPoints number of control points, 12 for type 6 shading 
and 16 for type 7 shading
      * @return a single patch
      * @throws IOException when something went wrong
      */
     protected Patch readPatch(ImageInputStream input, boolean isFree, 
Point2D[] implicitEdge,
                               float[][] implicitCornerColor, long maxSrcCoord, 
long maxSrcColor,
                               PDRange rangeX, PDRange rangeY, PDRange[] 
colRange, Matrix matrix,
-                              AffineTransform xform, int numP) throws 
IOException
+                              AffineTransform xform, int controlPoints) throws 
IOException
     {
         float[][] color = new float[4][numberOfColorComponents];
-        Point2D[] points = new Point2D[numP];
+        Point2D[] points = new Point2D[controlPoints];
         int pStart = 4, cStart = 2;
         if (isFree)
         {
@@ -203,7 +209,7 @@ abstract class PatchMeshesShadingContext
 
         try
         {
-            for (int i = pStart; i < numP; i++)
+            for (int i = pStart; i < controlPoints; i++)
             {
                 long x = input.readBits(bitsPerCoordinate);
                 long y = input.readBits(bitsPerCoordinate);

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -17,7 +17,6 @@
 package org.apache.pdfbox.pdmodel.graphics.shading;
 
 import java.awt.PaintContext;
-import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.NoninvertibleTransformException;
 import java.awt.geom.Point2D;
@@ -25,7 +24,6 @@ import java.awt.image.ColorModel;
 import java.awt.image.Raster;
 import java.awt.image.WritableRaster;
 import java.io.IOException;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.cos.COSArray;
@@ -70,11 +68,10 @@ public class RadialShadingContext extend
      * @param colorModel the color model to be used
      * @param xform transformation for user to device space
      * @param matrix the pattern matrix concatenated with that of the parent 
content stream
-     * @param deviceBounds device bounds
      * @throws java.io.IOException if there is an error getting the color 
space or doing color conversion.
      */
     public RadialShadingContext(PDShadingType3 shading, ColorModel colorModel,
-                                AffineTransform xform, Matrix matrix, 
Rectangle deviceBounds)
+                                AffineTransform xform, Matrix matrix)
                                 throws IOException
     {
         super(shading, colorModel, xform, matrix);
@@ -191,15 +188,14 @@ public class RadialShadingContext extend
     @Override
     public void dispose()
     {
-        outputColorModel = null;
+        super.dispose();
         radialShadingType = null;
-        shadingColorSpace = null;
     }
 
     @Override
     public ColorModel getColorModel()
     {
-        return outputColorModel;
+        return super.getColorModel();
     }
 
     @Override
@@ -234,7 +230,7 @@ public class RadialShadingContext extend
                 float[] inputValues = calculateInputValues(currentX, currentY);
                 if (Float.isNaN(inputValues[0]) && Float.isNaN(inputValues[1]))
                 {
-                    if (background == null)
+                    if (getBackground() == null)
                     {
                         continue;
                     }
@@ -279,7 +275,7 @@ public class RadialShadingContext extend
                             {
                                 inputValue = inputValues[1];
                             }
-                            else if (background != null)
+                            else if (getBackground() != null)
                             {
                                 useBackground = true;
                             }
@@ -299,7 +295,7 @@ public class RadialShadingContext extend
                         }
                         else
                         {
-                            if (background == null)
+                            if (getBackground() == null)
                             {
                                 continue;
                             }
@@ -316,7 +312,7 @@ public class RadialShadingContext extend
                         }
                         else
                         {
-                            if (background == null)
+                            if (getBackground() == null)
                             {
                                 continue;
                             }
@@ -328,7 +324,7 @@ public class RadialShadingContext extend
                 if (useBackground)
                 {
                     // use the given backgound color values
-                    value = rgbBackground;
+                    value = getRgbBackground();
                 }
                 else
                 {

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/RadialShadingPaint.java
 Tue May  5 16:15:18 2015
@@ -65,7 +65,7 @@ public class RadialShadingPaint implemen
     {
         try
         {
-            return new RadialShadingContext(shading, cm, xform, matrix, 
deviceBounds);
+            return new RadialShadingContext(shading, cm, xform, matrix);
         }
         catch (IOException e)
         {

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -15,7 +15,6 @@
  */
 package org.apache.pdfbox.pdmodel.graphics.shading;
 
-import java.awt.Rectangle;
 import java.awt.Transparency;
 import java.awt.color.ColorSpace;
 import java.awt.geom.AffineTransform;
@@ -40,13 +39,14 @@ public abstract class ShadingContext
 {
     private static final Log LOG = LogFactory.getLog(ShadingContext.class);
 
-    protected final PDShading shading;
-    protected PDColorSpace shadingColorSpace;
     protected PDRectangle bboxRect;
     protected float minBBoxX, minBBoxY, maxBBoxX, maxBBoxY;
-    protected ColorModel outputColorModel;
-    protected float[] background;
-    protected int rgbBackground;
+
+    private float[] background;
+    private int rgbBackground;
+    final private PDShading shading;
+    private ColorModel outputColorModel;
+    private PDColorSpace shadingColorSpace;
 
     /**
      * Constructor.
@@ -84,6 +84,26 @@ public abstract class ShadingContext
         }
     }
 
+    PDColorSpace getShadingColorSpace()
+    {
+        return shadingColorSpace;
+    }
+
+    PDShading getShading()
+    {
+        return shading;
+    }
+
+    float[] getBackground()
+    {
+        return background;
+    }
+
+    int getRgbBackground()
+    {
+        return rgbBackground;
+    }
+    
     private void transformBBox(Matrix matrix, AffineTransform xform)
     {
         float[] bboxTab = new float[4];
@@ -115,7 +135,7 @@ public abstract class ShadingContext
      * @return RGB values encoded in an integer.
      * @throws java.io.IOException if the color conversion fails.
      */
-    protected final int convertToRGB(float[] values) throws IOException
+    final int convertToRGB(float[] values) throws IOException
     {
         int normRGBValues;
 
@@ -126,4 +146,16 @@ public abstract class ShadingContext
 
         return normRGBValues;
     }
+    
+    ColorModel getColorModel()
+    {
+        return outputColorModel;
+    }
+
+    void dispose()
+    {
+        outputColorModel = null;
+        shadingColorSpace = null;
+    }
+
 }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/TriangleBasedShadingContext.java
 Tue May  5 16:15:18 2015
@@ -67,7 +67,7 @@ abstract class TriangleBasedShadingConte
         LOG.debug("bitsPerCoordinate: " + (Math.pow(2, bitsPerCoordinate) - 
1));
         bitsPerColorComponent = triangleBasedShadingType.getBitsPerComponent();
         LOG.debug("bitsPerColorComponent: " + bitsPerColorComponent);
-        numberOfColorComponents = hasFunction ? 1 : 
shadingColorSpace.getNumberOfComponents();
+        numberOfColorComponents = hasFunction ? 1 : 
getShadingColorSpace().getNumberOfComponents();
         LOG.debug("numberOfColorComponents: " + numberOfColorComponents);
     }
 
@@ -133,7 +133,7 @@ abstract class TriangleBasedShadingConte
     {
         if (hasFunction)
         {
-            values = shading.evalFunction(values);
+            values = getShading().evalFunction(values);
         }
         return convertToRGB(values);
     }
@@ -146,14 +146,13 @@ abstract class TriangleBasedShadingConte
     @Override
     public final ColorModel getColorModel()
     {
-        return outputColorModel;
+        return super.getColorModel();
     }
 
     @Override
     public void dispose()
     {
-        outputColorModel = null;
-        shadingColorSpace = null;
+        super.dispose();
     }
 
     @Override
@@ -161,7 +160,7 @@ abstract class TriangleBasedShadingConte
     {
         WritableRaster raster = 
getColorModel().createCompatibleWritableRaster(w, h);
         int[] data = new int[w * h * 4];
-        if (!isDataEmpty() || background != null)
+        if (!isDataEmpty() || getBackground() != null)
         {
             for (int row = 0; row < h; row++)
             {
@@ -185,11 +184,11 @@ abstract class TriangleBasedShadingConte
                     }
                     else
                     {
-                        if (background == null)
+                        if (getBackground() == null)
                         {
                             continue;
                         }
-                        value = rgbBackground;
+                        value = getRgbBackground();
                     }
                     int index = (row * w + col) * 4;
                     data[index] = value & 255;

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -16,7 +16,6 @@
 package org.apache.pdfbox.pdmodel.graphics.shading;
 
 import java.awt.PaintContext;
-import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.NoninvertibleTransformException;
 import java.awt.image.ColorModel;
@@ -25,6 +24,7 @@ import java.awt.image.WritableRaster;
 import java.io.IOException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
 import org.apache.pdfbox.util.Matrix;
 
 /**
@@ -47,10 +47,9 @@ class Type1ShadingContext extends Shadin
      * @param colorModel the color model to be used
      * @param xform transformation for user to device space
      * @param matrix the pattern matrix concatenated with that of the parent 
content stream
-     * @param deviceBounds device bounds
      */
     Type1ShadingContext(PDShadingType1 shading, ColorModel colorModel, 
AffineTransform xform,
-                               Matrix matrix, Rectangle deviceBounds) throws 
IOException
+                               Matrix matrix) throws IOException
     {
         super(shading, colorModel, xform, matrix);
         this.type1ShadingType = shading;
@@ -85,15 +84,15 @@ class Type1ShadingContext extends Shadin
     @Override
     public void dispose()
     {
-        outputColorModel = null;
-        shadingColorSpace = null;
+        super.dispose();
+        
         type1ShadingType = null;
     }
 
     @Override
     public ColorModel getColorModel()
     {
-        return outputColorModel;
+        return super.getColorModel();
     }
 
     @Override
@@ -124,7 +123,7 @@ class Type1ShadingContext extends Shadin
                 if (values[0] < domain[0] || values[0] > domain[1] ||
                     values[1] < domain[2] || values[1] > domain[3])
                 {
-                    if (background == null)
+                    if (getBackground() == null)
                     {
                         continue;
                     }
@@ -134,7 +133,7 @@ class Type1ShadingContext extends Shadin
                 // evaluate function
                 if (useBackground)
                 {
-                    values = background;
+                    values = getBackground();
                 }
                 else
                 {
@@ -149,6 +148,7 @@ class Type1ShadingContext extends Shadin
                 }
 
                 // convert color values from shading color space to RGB
+                PDColorSpace shadingColorSpace = getShadingColorSpace();
                 if (shadingColorSpace != null)
                 {
                     try

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingPaint.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingPaint.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingPaint.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type1ShadingPaint.java
 Tue May  5 16:15:18 2015
@@ -25,7 +25,6 @@ import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.ColorModel;
 import java.io.IOException;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.util.Matrix;
@@ -64,7 +63,7 @@ class Type1ShadingPaint implements Paint
     {
         try
         {
-            return new Type1ShadingContext(shading, cm, xform, matrix, 
deviceBounds);
+            return new Type1ShadingContext(shading, cm, xform, matrix);
         }
         catch (IOException e)
         {

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -61,14 +61,13 @@ class Type4ShadingContext extends Gourau
         bitsPerFlag = shading.getBitsPerFlag();
         //TODO handle cases where bitperflag isn't 8
         LOG.debug("bitsPerFlag: " + bitsPerFlag);
-        triangleList = getTriangleList(xform, matrix);
+        setTriangleList(collectTriangles(shading, xform, matrix));
         createPixelTable(deviceBounds);
     }
 
-    private List<ShadedTriangle> getTriangleList(AffineTransform xform, Matrix 
matrix)
+    private List<ShadedTriangle> collectTriangles(PDShadingType4 
freeTriangleShadingType, AffineTransform xform, Matrix matrix)
             throws IOException
     {
-        PDShadingType4 freeTriangleShadingType = (PDShadingType4) shading;
         COSDictionary dict = freeTriangleShadingType.getCOSObject();
         PDRange rangeX = freeTriangleShadingType.getDecodeForParameter(0);
         PDRange rangeY = freeTriangleShadingType.getDecodeForParameter(1);

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingPaint.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingPaint.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingPaint.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type4ShadingPaint.java
 Tue May  5 16:15:18 2015
@@ -25,7 +25,6 @@ import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.ColorModel;
 import java.io.IOException;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.util.Matrix;

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -59,15 +59,13 @@ class Type5ShadingContext extends Gourau
 
         LOG.debug("Type5ShadingContext");
 
-        triangleList = getTriangleList(xform, matrix);
+        setTriangleList(collectTriangles(shading, xform, matrix));
         createPixelTable(deviceBounds);
     }
 
-    private List<ShadedTriangle> getTriangleList(AffineTransform xform, Matrix 
matrix)
-            throws IOException
+    private List<ShadedTriangle> collectTriangles(PDShadingType5 
latticeTriangleShadingType,
+            AffineTransform xform, Matrix matrix) throws IOException
     {
-        List<ShadedTriangle> list = new ArrayList<ShadedTriangle>();
-        PDShadingType5 latticeTriangleShadingType = (PDShadingType5) shading;
         COSDictionary cosDictionary = 
latticeTriangleShadingType.getCOSObject();
         PDRange rangeX = latticeTriangleShadingType.getDecodeForParameter(0);
         PDRange rangeY = latticeTriangleShadingType.getDecodeForParameter(1);
@@ -105,9 +103,11 @@ class Type5ShadingContext extends Gourau
         }
         int sz = vlist.size(), rowNum = sz / numPerRow;
         Vertex[][] latticeArray = new Vertex[rowNum][numPerRow];
+        List<ShadedTriangle> list = new ArrayList<ShadedTriangle>();
         if (rowNum < 2)
         {
-            return triangleList;
+            // must have at least two rows; if not, return empty list
+            return list;
         }
         for (int i = 0; i < rowNum; i++)
         {

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingPaint.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingPaint.java?rev=1677851&r1=1677850&r2=1677851&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingPaint.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/Type5ShadingPaint.java
 Tue May  5 16:15:18 2015
@@ -25,7 +25,6 @@ import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.ColorModel;
 import java.io.IOException;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.util.Matrix;

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -20,9 +20,6 @@ import java.awt.geom.AffineTransform;
 import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
 import java.io.IOException;
-import java.util.List;
-import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.pdmodel.common.PDRange;
 import org.apache.pdfbox.util.Matrix;
 
 /**
@@ -46,24 +43,7 @@ class Type6ShadingContext extends PatchM
     Type6ShadingContext(PDShadingType6 shading, ColorModel colorModel, 
AffineTransform xform,
                                Matrix matrix, Rectangle deviceBounds) throws 
IOException
     {
-        super(shading, colorModel, xform, matrix);
-        patchList = getCoonsPatchList(xform, matrix);
-        createPixelTable(deviceBounds);
-    }
-
-    // get the patch list which forms the type 6 shading image from data stream
-    private List<Patch> getCoonsPatchList(AffineTransform xform, Matrix 
matrix) throws IOException
-    {
-        PDShadingType6 coonsShadingType = (PDShadingType6) 
patchMeshesShadingType;
-        COSDictionary dict = coonsShadingType.getCOSObject();
-        PDRange rangeX = coonsShadingType.getDecodeForParameter(0);
-        PDRange rangeY = coonsShadingType.getDecodeForParameter(1);
-        PDRange[] colRange = new PDRange[numberOfColorComponents];
-        for (int i = 0; i < numberOfColorComponents; ++i)
-        {
-            colRange[i] = coonsShadingType.getDecodeForParameter(2 + i);
-        }
-        return getPatchList(xform, matrix, dict, rangeX, rangeY, colRange, 12);
+        super(shading, colorModel, xform, matrix, deviceBounds, 12);
     }
 
     @Override

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=1677851&r1=1677850&r2=1677851&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
 Tue May  5 16:15:18 2015
@@ -20,9 +20,6 @@ import java.awt.geom.AffineTransform;
 import java.awt.geom.Point2D;
 import java.awt.image.ColorModel;
 import java.io.IOException;
-import java.util.List;
-import org.apache.pdfbox.cos.COSDictionary;
-import org.apache.pdfbox.pdmodel.common.PDRange;
 import org.apache.pdfbox.util.Matrix;
 
 /**
@@ -46,24 +43,7 @@ class Type7ShadingContext extends PatchM
     Type7ShadingContext(PDShadingType7 shading, ColorModel colorModel, 
AffineTransform xform,
                                Matrix matrix, Rectangle deviceBounds) throws 
IOException
     {
-        super(shading, colorModel, xform, matrix);
-        patchList = getTensorPatchList(xform, matrix);
-        createPixelTable(deviceBounds);
-    }
-
-    // get the patch list which forms the type 7 shading image from data stream
-    private List<Patch> getTensorPatchList(AffineTransform xform, Matrix 
matrix) throws IOException
-    {
-        PDShadingType7 tensorShadingType = (PDShadingType7) 
patchMeshesShadingType;
-        COSDictionary dict = tensorShadingType.getCOSObject();
-        PDRange rangeX = tensorShadingType.getDecodeForParameter(0);
-        PDRange rangeY = tensorShadingType.getDecodeForParameter(1);
-        PDRange[] colRange = new PDRange[numberOfColorComponents];
-        for (int i = 0; i < numberOfColorComponents; ++i)
-        {
-            colRange[i] = tensorShadingType.getDecodeForParameter(2 + i);
-        }
-        return getPatchList(xform, matrix, dict, rangeX, rangeY, colRange, 16);
+        super(shading, colorModel, xform, matrix, deviceBounds, 16);
     }
 
     @Override


Reply via email to