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 je...@apache.org on 2011/04/22 10:25:30 UTC
svn commit: r1095887 -
/xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/PDFGraphics2D.java
Author: jeremias
Date: Fri Apr 22 08:25:30 2011
New Revision: 1095887
URL: http://svn.apache.org/viewvc?rev=1095887&view=rev
Log:
Update graphics state when applying color.
Optimize painting of rectangles where possible to reduce file sizes.
Some generics and FindBugs fixes.
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/PDFGraphics2D.java
Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/PDFGraphics2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/PDFGraphics2D.java?rev=1095887&r1=1095886&r2=1095887&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/PDFGraphics2D.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/PDFGraphics2D.java Fri Apr 22 08:25:30 2011
@@ -243,6 +243,7 @@ public class PDFGraphics2D extends Abstr
* @return a new graphics context that is a copy of
* this graphics context.
*/
+ @Override
public Graphics create() {
return new PDFGraphics2D(this);
}
@@ -486,6 +487,7 @@ public class PDFGraphics2D extends Abstr
* @see java.awt.image.ImageObserver
* @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int)
*/
+ @Override
public boolean drawImage(Image img, int x, int y,
ImageObserver observer) {
preparePainting();
@@ -506,6 +508,7 @@ public class PDFGraphics2D extends Abstr
}
/** {@inheritDoc} */
+ @Override
public boolean drawImage(Image img, int x, int y, int width, int height,
ImageObserver observer) {
preparePainting();
@@ -576,6 +579,7 @@ public class PDFGraphics2D extends Abstr
* @see java.awt.Component#getGraphics
* @see java.awt.Graphics#create
*/
+ @Override
public void dispose() {
pdfDoc = null;
fontInfo = null;
@@ -599,6 +603,7 @@ public class PDFGraphics2D extends Abstr
* @see #setClip
* @see #setComposite
*/
+ @Override
public void draw(Shape s) {
preparePainting();
@@ -748,9 +753,17 @@ public class PDFGraphics2D extends Abstr
}
}
- StringBuffer sb = new StringBuffer();
- colorHandler.establishColor(sb, col, fill);
- currentStream.write(sb.toString());
+ boolean doWrite = false;
+ if (fill && paintingState.setBackColor(col)) {
+ doWrite = true;
+ } else if (paintingState.setColor(col)) {
+ doWrite = true;
+ }
+ if (doWrite) {
+ StringBuffer sb = new StringBuffer();
+ colorHandler.establishColor(sb, col, fill);
+ currentStream.write(sb.toString());
+ }
}
/**
@@ -805,7 +818,7 @@ public class PDFGraphics2D extends Abstr
transform.concatenate(getTransform());
transform.concatenate(gp.getTransform());
- List theMatrix = new java.util.ArrayList();
+ List<Double> theMatrix = new java.util.ArrayList<Double>();
double [] mat = new double[6];
transform.getMatrix(mat);
for (int idx = 0; idx < mat.length; idx++) {
@@ -814,29 +827,29 @@ public class PDFGraphics2D extends Abstr
Point2D p1 = gp.getStartPoint();
Point2D p2 = gp.getEndPoint();
- List theCoords = new java.util.ArrayList();
+ List<Double> theCoords = new java.util.ArrayList<Double>();
theCoords.add(new Double(p1.getX()));
theCoords.add(new Double(p1.getY()));
theCoords.add(new Double(p2.getX()));
theCoords.add(new Double(p2.getY()));
- List theExtend = new java.util.ArrayList();
- theExtend.add(new Boolean(true));
- theExtend.add(new Boolean(true));
+ List<Boolean> theExtend = new java.util.ArrayList<Boolean>();
+ theExtend.add(Boolean.TRUE);
+ theExtend.add(Boolean.TRUE);
- List theDomain = new java.util.ArrayList();
+ List<Double> theDomain = new java.util.ArrayList<Double>();
theDomain.add(new Double(0));
theDomain.add(new Double(1));
- List theEncode = new java.util.ArrayList();
+ List<Double> theEncode = new java.util.ArrayList<Double>();
theEncode.add(new Double(0));
theEncode.add(new Double(1));
theEncode.add(new Double(0));
theEncode.add(new Double(1));
- List theBounds = new java.util.ArrayList();
+ List<Double> theBounds = new java.util.ArrayList<Double>();
- List someColors = new java.util.ArrayList();
+ List<Color> someColors = new java.util.ArrayList<Color>();
for (int count = 0; count < cols.length; count++) {
Color c1 = cols[count];
@@ -882,7 +895,7 @@ public class PDFGraphics2D extends Abstr
transform.concatenate(getTransform());
transform.concatenate(rgp.getTransform());
- List theMatrix = new java.util.ArrayList();
+ List<Double> theMatrix = new java.util.ArrayList<Double>();
double [] mat = new double[6];
transform.getMatrix(mat);
for (int idx = 0; idx < mat.length; idx++) {
@@ -893,7 +906,7 @@ public class PDFGraphics2D extends Abstr
Point2D ac = rgp.getCenterPoint();
Point2D af = rgp.getFocusPoint();
- List theCoords = new java.util.ArrayList();
+ List<Double> theCoords = new java.util.ArrayList<Double>();
double dx = af.getX() - ac.getX();
double dy = af.getY() - ac.getY();
double d = Math.sqrt(dx * dx + dy * dy);
@@ -913,7 +926,7 @@ public class PDFGraphics2D extends Abstr
theCoords.add(new Double(ar));
Color[] cols = rgp.getColors();
- List someColors = new java.util.ArrayList();
+ List<Color> someColors = new java.util.ArrayList<Color>();
for (int count = 0; count < cols.length; count++) {
Color cc = cols[count];
if (cc.getAlpha() != 255) {
@@ -924,7 +937,7 @@ public class PDFGraphics2D extends Abstr
}
float[] fractions = rgp.getFractions();
- List theBounds = new java.util.ArrayList();
+ List<Double> theBounds = new java.util.ArrayList<Double>();
for (int count = 1; count < fractions.length - 1; count++) {
float offset = fractions[count];
theBounds.add(new Double(offset));
@@ -964,7 +977,7 @@ public class PDFGraphics2D extends Abstr
pattGraphic.setOutputStream(outputStream);
GraphicsNode gn = pp.getGraphicsNode();
- Rectangle2D gnBBox = gn.getBounds();
+ //Rectangle2D gnBBox = gn.getBounds();
Rectangle2D rect = pp.getPatternRect();
// if (!pp.getOverflow()) {
@@ -1000,7 +1013,7 @@ public class PDFGraphics2D extends Abstr
// }
// }
- List bbox = new java.util.ArrayList();
+ List<Double> bbox = new java.util.ArrayList<Double>();
bbox.add(new Double(rect.getX()));
bbox.add(new Double(rect.getHeight() + rect.getY()));
bbox.add(new Double(rect.getWidth() + rect.getX()));
@@ -1011,7 +1024,7 @@ public class PDFGraphics2D extends Abstr
transform.concatenate(getTransform());
transform.concatenate(pp.getPatternTransform());
- List theMatrix = new java.util.ArrayList();
+ List<Double> theMatrix = new java.util.ArrayList<Double>();
double [] mat = new double[6];
transform.getMatrix(mat);
for (int idx = 0; idx < mat.length; idx++) {
@@ -1219,6 +1232,7 @@ public class PDFGraphics2D extends Abstr
}
/** {@inheritDoc} */
+ @Override
public void drawRenderedImage(RenderedImage img, AffineTransform xform) {
String key = "TempImage:" + img.toString();
drawInnerRenderedImage(key, img, xform);
@@ -1268,6 +1282,7 @@ public class PDFGraphics2D extends Abstr
}
/** {@inheritDoc} */
+ @Override
public void drawRenderableImage(RenderableImage img,
AffineTransform xform) {
//TODO Check if this is good enough
@@ -1298,6 +1313,7 @@ public class PDFGraphics2D extends Abstr
* @see #setComposite
* @see #setClip
*/
+ @Override
public void drawString(String s, float x, float y) {
preparePainting();
@@ -1321,7 +1337,7 @@ public class PDFGraphics2D extends Abstr
applyPaint(getPaint(), true);
applyAlpha(c.getAlpha(), OPAQUE);
- Map kerning = fontState.getKerning();
+ Map<Integer, Map<Integer, Integer>> kerning = fontState.getKerning();
boolean kerningAvailable = (kerning != null && !kerning.isEmpty());
boolean useMultiByte = isMultiByteFont(currentFontName);
@@ -1379,8 +1395,8 @@ public class PDFGraphics2D extends Abstr
}
if (kerningAvailable && (i + 1) < l) {
- addKerning(currentStream, (new Integer(ch)),
- (new Integer(fontState.mapChar(s.charAt(i + 1)))),
+ addKerning(currentStream, (Integer.valueOf(ch)),
+ (Integer.valueOf(fontState.mapChar(s.charAt(i + 1)))),
kerning, startText, endText);
}
@@ -1400,7 +1416,7 @@ public class PDFGraphics2D extends Abstr
protected void applyAlpha(int fillAlpha, int strokeAlpha) {
if (fillAlpha != OPAQUE || strokeAlpha != OPAQUE) {
checkTransparencyAllowed();
- Map vals = new java.util.HashMap();
+ Map<String, Float> vals = new java.util.HashMap<String, Float>();
if (fillAlpha != OPAQUE) {
vals.put(PDFGState.GSTATE_ALPHA_NONSTROKE, new Float(fillAlpha / 255f));
}
@@ -1437,6 +1453,7 @@ public class PDFGraphics2D extends Abstr
* @return the internal Font
* @deprecated use FontInfo.getFontInstanceForAWTFont(java.awt.Font awtFont) instead
*/
+ @Deprecated
protected Font getInternalFontForAWTFont(java.awt.Font awtFont) {
return fontInfo.getFontInstanceForAWTFont(awtFont);
}
@@ -1449,18 +1466,18 @@ public class PDFGraphics2D extends Abstr
protected boolean isMultiByteFont(String name) {
// This assumes that *all* CIDFonts use a /ToUnicode mapping
org.apache.fop.fonts.Typeface f
- = (org.apache.fop.fonts.Typeface)fontInfo.getFonts().get(name);
+ = fontInfo.getFonts().get(name);
return f.isMultiByte();
}
private void addKerning(StringWriter buf, Integer ch1, Integer ch2,
- Map kerning, String startText,
+ Map<Integer, Map<Integer, Integer>> kerning, String startText,
String endText) {
preparePainting();
- Map kernPair = (Map)kerning.get(ch1);
+ Map<Integer, Integer> kernPair = kerning.get(ch1);
if (kernPair != null) {
- Integer width = (Integer)kernPair.get(ch2);
+ Integer width = kernPair.get(ch2);
if (width != null) {
currentStream.write(endText + (-width.intValue()) + " " + startText);
}
@@ -1572,6 +1589,7 @@ public class PDFGraphics2D extends Abstr
* @see #clip
* @see #setClip
*/
+ @Override
public void fill(Shape s) {
preparePainting();
@@ -1626,11 +1644,19 @@ public class PDFGraphics2D extends Abstr
}
}
- //PathIterator iter = s.getPathIterator(getTransform());
- PathIterator iter = s.getPathIterator(IDENTITY_TRANSFORM);
- processPathIterator(iter);
- doDrawing(true, false,
- iter.getWindingRule() == PathIterator.WIND_EVEN_ODD);
+ if (s instanceof Rectangle2D) {
+ Rectangle2D rect = (Rectangle2D)s;
+ currentStream.write(PDFNumber.doubleOut(rect.getMinX(), DEC) + " "
+ + PDFNumber.doubleOut(rect.getMinY(), DEC) + " ");
+ currentStream.write(PDFNumber.doubleOut(rect.getWidth(), DEC) + " "
+ + PDFNumber.doubleOut(rect.getHeight(), DEC) + " re ");
+ doDrawing(true, false, false);
+ } else {
+ PathIterator iter = s.getPathIterator(IDENTITY_TRANSFORM);
+ processPathIterator(iter);
+ doDrawing(true, false,
+ iter.getWindingRule() == PathIterator.WIND_EVEN_ODD);
+ }
if (newClip || newTransform) {
currentStream.write("Q\n");
paintingState.restore();
@@ -1720,6 +1746,7 @@ public class PDFGraphics2D extends Abstr
*
* @return the PDF graphics configuration
*/
+ @Override
public GraphicsConfiguration getDeviceConfiguration() {
return new PDFGraphicsConfiguration();
}
@@ -1744,6 +1771,7 @@ public class PDFGraphics2D extends Abstr
* @see java.awt.FontMetrics
* @see java.awt.Graphics#getFontMetrics()
*/
+ @Override
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
return fmg.getFontMetrics(f);
}
@@ -1763,6 +1791,7 @@ public class PDFGraphics2D extends Abstr
* drawn twice, then all pixels are restored to their original values.
* @param c1 the XOR alternation color
*/
+ @Override
public void setXORMode(Color c1) {
//NYI
}
@@ -1787,6 +1816,7 @@ public class PDFGraphics2D extends Abstr
* @param dx the horizontal distance to copy the pixels.
* @param dy the vertical distance to copy the pixels.
*/
+ @Override
public void copyArea(int x, int y, int width, int height, int dx,
int dy) {
//NYI
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org