You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by vh...@apache.org on 2014/07/14 23:21:35 UTC
svn commit: r1610532 - in
/xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop:
pdf/ render/pdf/svg/ render/ps/svg/ render/shading/ svg/
Author: vhennebert
Date: Mon Jul 14 21:21:35 2014
New Revision: 1610532
URL: http://svn.apache.org/r1610532
Log:
Moved stuff that is common to PDF and PS to Pattern
Removed PSPattern class and no longer necessary PDF and PS sub-classes of GradientMaker
Removed:
xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/pdf/svg/
xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/ps/svg/PSGradientMaker.java
xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/ps/svg/PSPattern.java
Modified:
xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/pdf/PDFPattern.java
xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/ps/svg/PSSVGGraphics2D.java
xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/GradientMaker.java
xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/Pattern.java
xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/svg/PDFGraphics2D.java
Modified: xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/pdf/PDFPattern.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/pdf/PDFPattern.java?rev=1610532&r1=1610531&r2=1610532&view=diff
==============================================================================
--- xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/pdf/PDFPattern.java (original)
+++ xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/pdf/PDFPattern.java Mon Jul 14 21:21:35 2014
@@ -23,8 +23,6 @@ import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
-import org.apache.fop.render.shading.Pattern;
-
/**
* class representing a PDF Function.
*
@@ -35,7 +33,7 @@ import org.apache.fop.render.shading.Pat
*
* All PDF Functions have a FunctionType (0,2,3, or 4), a Domain, and a Range.
*/
-public class PDFPattern extends PDFPathPaint implements Pattern {
+public class PDFPattern extends PDFPathPaint {
/**
* The resources associated with this pattern
Modified: xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/ps/svg/PSSVGGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/ps/svg/PSSVGGraphics2D.java?rev=1610532&r1=1610531&r2=1610532&view=diff
==============================================================================
--- xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/ps/svg/PSSVGGraphics2D.java (original)
+++ xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/ps/svg/PSSVGGraphics2D.java Mon Jul 14 21:21:35 2014
@@ -23,6 +23,8 @@ import java.awt.Graphics;
import java.awt.Paint;
import java.awt.geom.AffineTransform;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -33,7 +35,10 @@ import org.apache.batik.ext.awt.RadialGr
import org.apache.xmlgraphics.java2d.ps.PSGraphics2D;
import org.apache.xmlgraphics.ps.PSGenerator;
+import org.apache.fop.render.shading.Function;
+import org.apache.fop.render.shading.GradientMaker;
import org.apache.fop.render.shading.Pattern;
+import org.apache.fop.render.shading.Shading;
public class PSSVGGraphics2D extends PSGraphics2D {
@@ -70,24 +75,76 @@ public class PSSVGGraphics2D extends PSG
protected void applyPaint(Paint paint, boolean fill) {
super.applyPaint(paint, fill);
if (paint instanceof LinearGradientPaint) {
- Pattern pattern = new PSGradientMaker()
- .makeLinearGradient((LinearGradientPaint) paint, getBaseTransform(), getTransform());
+ Pattern pattern = GradientMaker.makeLinearGradient((LinearGradientPaint) paint,
+ getBaseTransform(), getTransform());
try {
- gen.write(pattern.toString());
+ gen.write(toString(pattern));
} catch (IOException ioe) {
handleIOException(ioe);
}
} else if (paint instanceof RadialGradientPaint) {
- Pattern pattern = new PSGradientMaker()
- .makeRadialGradient((RadialGradientPaint) paint, getBaseTransform(), getTransform());
+ Pattern pattern = GradientMaker.makeRadialGradient((RadialGradientPaint) paint,
+ getBaseTransform(), getTransform());
try {
- gen.write(pattern.toString());
+ gen.write(toString(pattern));
} catch (IOException ioe) {
handleIOException(ioe);
}
}
}
+ /**
+ * Outputs the radial or axial pattern as a string dictionary to insert
+ * into a postscript document.
+ * @param pattern
+ */
+ private String toString(Pattern pattern) {
+ StringBuilder p = new StringBuilder(64);
+ p.append("/Pattern setcolorspace\n");
+ p.append("<< \n/Type /Pattern \n");
+
+ p.append("/PatternType " + pattern.getPatternType() + " \n");
+
+ if (pattern.getShading() != null) {
+ p.append("/Shading ");
+ outputShading(p, pattern.getShading());
+ p.append(" \n");
+ }
+ p.append(">> \n");
+ p.append("[ ");
+ for (double m : pattern.getMatrix()) {
+ p.append(Double.toString(m)); // TODO refactor so that PSGenerator.formatDouble can be used
+ p.append(" ");
+ }
+ p.append("] ");
+ p.append("makepattern setcolor\n");
+
+ return p.toString();
+ }
+
+ private void outputShading(StringBuilder p, Shading shading) {
+ final Function function = shading.getFunction();
+ Shading.FunctionRenderer functionRenderer = new Shading.FunctionRenderer() {
+
+ public void outputFunction(StringBuilder out) {
+ List<String> functionsStrings = new ArrayList<String>(function.getFunctions().size());
+ for (Function f : function.getFunctions()) {
+ functionsStrings.add(functionToString(f));
+ }
+ out.append(function.toWriteableString(functionsStrings));
+ }
+ };
+ shading.output(p, functionRenderer);
+ }
+
+ private String functionToString(Function function) {
+ List<String> functionsStrings = new ArrayList<String>(function.getFunctions().size());
+ for (Function f : function.getFunctions()) {
+ functionsStrings.add(functionToString(f));
+ }
+ return function.toWriteableString(functionsStrings);
+ }
+
protected AffineTransform getBaseTransform() {
AffineTransform at = new AffineTransform(this.getTransform());
return at;
Modified: xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/GradientMaker.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/GradientMaker.java?rev=1610532&r1=1610531&r2=1610532&view=diff
==============================================================================
--- xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/GradientMaker.java (original)
+++ xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/GradientMaker.java Mon Jul 14 21:21:35 2014
@@ -33,9 +33,11 @@ import org.apache.xmlgraphics.java2d.col
import org.apache.fop.pdf.PDFDeviceColorSpace;
-public abstract class GradientMaker<P extends Pattern> {
+public final class GradientMaker {
- public P makeLinearGradient(LinearGradientPaint gp,
+ private GradientMaker() { }
+
+ public static Pattern makeLinearGradient(LinearGradientPaint gp,
AffineTransform baseTransform, AffineTransform transform) {
Point2D startPoint = gp.getStartPoint();
Point2D endPoint = gp.getEndPoint();
@@ -47,7 +49,7 @@ public abstract class GradientMaker<P ex
return makeGradient(gp, coords, baseTransform, transform);
}
- public P makeRadialGradient(RadialGradientPaint gradient,
+ public static Pattern makeRadialGradient(RadialGradientPaint gradient,
AffineTransform baseTransform, AffineTransform transform) {
double radius = gradient.getRadius();
Point2D center = gradient.getCenterPoint();
@@ -72,7 +74,7 @@ public abstract class GradientMaker<P ex
return makeGradient(gradient, coords, baseTransform, transform);
}
- private P makeGradient(MultipleGradientPaint gradient, List<Double> coords,
+ private static Pattern makeGradient(MultipleGradientPaint gradient, List<Double> coords,
AffineTransform baseTransform, AffineTransform transform) {
List<Double> matrix = makeTransform(gradient, baseTransform, transform);
List<Double> bounds = makeBounds(gradient);
@@ -82,10 +84,10 @@ public abstract class GradientMaker<P ex
Function function = new Function(3, null, null, functions, bounds, null);
int shadingType = gradient instanceof LinearGradientPaint ? 2 : 3;
Shading shading = new Shading(shadingType, colorSpace, coords, function);
- return makePattern(2, shading, matrix);
+ return new Pattern(2, shading, matrix);
}
- private List<Double> makeTransform(MultipleGradientPaint gradient,
+ private static List<Double> makeTransform(MultipleGradientPaint gradient,
AffineTransform baseTransform, AffineTransform transform) {
AffineTransform gradientTransform = new AffineTransform(baseTransform);
gradientTransform.concatenate(transform);
@@ -99,13 +101,13 @@ public abstract class GradientMaker<P ex
return matrix;
}
- private Color getsRGBColor(Color c) {
+ private static Color getsRGBColor(Color c) {
// Color space must be consistent, so convert to sRGB if necessary
// TODO really?
return c.getColorSpace().isCS_sRGB() ? c : ColorUtil.toSRGBColor(c);
}
- private List<Double> makeBounds(MultipleGradientPaint gradient) {
+ private static List<Double> makeBounds(MultipleGradientPaint gradient) {
// TODO is the conversion to double necessary?
float[] fractions = gradient.getFractions();
List<Double> bounds = new java.util.ArrayList<Double>(fractions.length);
@@ -117,7 +119,7 @@ public abstract class GradientMaker<P ex
return bounds;
}
- private List<Function> makeFunctions(MultipleGradientPaint gradient) {
+ private static List<Function> makeFunctions(MultipleGradientPaint gradient) {
List<Color> colors = makeColors(gradient);
List<Function> functions = new ArrayList<Function>();
for (int currentPosition = 0, lastPosition = colors.size() - 1;
@@ -133,7 +135,7 @@ public abstract class GradientMaker<P ex
return functions;
}
- private List<Color> makeColors(MultipleGradientPaint gradient) {
+ private static List<Color> makeColors(MultipleGradientPaint gradient) {
Color[] svgColors = gradient.getColors();
List<Color> gradientColors = new ArrayList<Color>(svgColors.length + 2);
float[] fractions = gradient.getFractions();
@@ -149,6 +151,4 @@ public abstract class GradientMaker<P ex
return gradientColors;
}
- protected abstract P makePattern(int patternType, Shading shading, List<Double> matrix);
-
}
Modified: xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/Pattern.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/Pattern.java?rev=1610532&r1=1610531&r2=1610532&view=diff
==============================================================================
--- xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/Pattern.java (original)
+++ xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/render/shading/Pattern.java Mon Jul 14 21:21:35 2014
@@ -17,6 +17,35 @@
package org.apache.fop.render.shading;
-public interface Pattern {
+import java.util.List;
+
+public class Pattern {
+
+ private final int patternType;
+
+ private final Shading shading;
+
+ private final List<Double> matrix;
+
+ Pattern(int patternType, Shading shading, List<Double> matrix) {
+ this.patternType = patternType;
+ this.shading = shading;
+ this.matrix = matrix;
+ }
+
+ /**
+ * Either one (1) for tiling, or two (2) for shading.
+ */
+ public int getPatternType() {
+ return patternType;
+ }
+
+ public Shading getShading() {
+ return shading;
+ }
+
+ public List<Double> getMatrix() {
+ return matrix;
+ }
}
Modified: xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/svg/PDFGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/svg/PDFGraphics2D.java?rev=1610532&r1=1610531&r2=1610532&view=diff
==============================================================================
--- xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/svg/PDFGraphics2D.java (original)
+++ xmlgraphics/fop/branches/FOP-2393_gradient-rendering/src/java/org/apache/fop/svg/PDFGraphics2D.java Mon Jul 14 21:21:35 2014
@@ -49,6 +49,7 @@ import java.awt.image.renderable.Rendera
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -95,7 +96,10 @@ import org.apache.fop.pdf.PDFXObject;
import org.apache.fop.render.pdf.ImageRawCCITTFaxAdapter;
import org.apache.fop.render.pdf.ImageRawJPEGAdapter;
import org.apache.fop.render.pdf.ImageRenderedAdapter;
-import org.apache.fop.render.pdf.svg.PDFGradientMaker;
+import org.apache.fop.render.shading.Function;
+import org.apache.fop.render.shading.GradientMaker;
+import org.apache.fop.render.shading.Pattern;
+import org.apache.fop.render.shading.Shading;
/**
* <p>PDF Graphics 2D.
@@ -813,15 +817,17 @@ public class PDFGraphics2D extends Abstr
gpaint.isCyclic() ? LinearGradientPaint.REPEAT : LinearGradientPaint.NO_CYCLE);
}
if (paint instanceof LinearGradientPaint && gradientSupported((LinearGradientPaint) paint)) {
- PDFPattern pattern = new PDFGradientMaker(this)
- .makeLinearGradient((LinearGradientPaint) paint, getBaseTransform(), getTransform());
- currentStream.write(pattern.getColorSpaceOut(fill));
+ Pattern pattern = GradientMaker.makeLinearGradient((LinearGradientPaint) paint,
+ getBaseTransform(), getTransform());
+ PDFPattern pdfPattern = createPDFPattern(pattern);
+ currentStream.write(pdfPattern.getColorSpaceOut(fill));
return true;
}
if (paint instanceof RadialGradientPaint && gradientSupported((RadialGradientPaint) paint)) {
- PDFPattern pattern = new PDFGradientMaker(this)
- .makeRadialGradient((RadialGradientPaint) paint, getBaseTransform(), getTransform());
- currentStream.write(pattern.getColorSpaceOut(fill));
+ Pattern pattern = GradientMaker.makeRadialGradient((RadialGradientPaint) paint,
+ getBaseTransform(), getTransform());
+ PDFPattern pdfPattern = createPDFPattern(pattern);
+ currentStream.write(pdfPattern.getColorSpaceOut(fill));
return true;
}
if (paint instanceof PatternPaint) {
@@ -831,6 +837,21 @@ public class PDFGraphics2D extends Abstr
return false; // unknown paint
}
+ PDFPattern createPDFPattern(Pattern pattern) {
+ Shading shading = pattern.getShading();
+ Function function = shading.getFunction();
+ List<PDFFunction> pdfFunctions = new ArrayList<PDFFunction>(function.getFunctions().size());
+ for (Function f : function.getFunctions()) {
+ pdfFunctions.add(registerFunction(new PDFFunction(f)));
+ }
+ PDFFunction pdfFunction = registerFunction(new PDFFunction(function, pdfFunctions));
+ PDFShading pdfShading = new PDFShading(shading.getShadingType(), shading.getColorSpace(), shading.getCoords(),
+ pdfFunction);
+ pdfShading = registerShading(pdfShading);
+ PDFPattern pdfPattern = new PDFPattern(pattern.getPatternType(), pdfShading, null, null, pattern.getMatrix());
+ return registerPattern(pdfPattern);
+ }
+
private boolean gradientSupported(MultipleGradientPaint gradient) {
return !(gradientContainsTransparency(gradient) || gradientIsRepeated(gradient));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org