You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ju...@apache.org on 2009/09/14 12:24:35 UTC
svn commit: r814563 - in
/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox:
pdfviewer/PageDrawer.java pdmodel/graphics/color/PDColorState.java
Author: jukka
Date: Mon Sep 14 10:24:35 2009
New Revision: 814563
URL: http://svn.apache.org/viewvc?rev=814563&view=rev
Log:
PDFBOX-511: JVM crash in PDColorSpaceInstance.createColor()
Refactoring to reduce the number createColor() calls:
Cache the Java AWT color value
Modified:
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java?rev=814563&r1=814562&r2=814563&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java Mon Sep 14 10:24:35 2009
@@ -132,12 +132,12 @@
{
if( this.getGraphicsState().getTextState().getRenderingMode() == PDTextState.RENDERING_MODE_FILL_TEXT )
{
- graphics.setColor( this.getGraphicsState().getNonStrokingColor().createColor() );
+ graphics.setColor( this.getGraphicsState().getNonStrokingColor().getJavaColor() );
}
else if( this.getGraphicsState().getTextState().getRenderingMode()
== PDTextState.RENDERING_MODE_STROKE_TEXT )
{
- graphics.setColor( this.getGraphicsState().getStrokingColor().createColor() );
+ graphics.setColor( this.getGraphicsState().getStrokingColor().getJavaColor() );
}
else
{
@@ -145,7 +145,7 @@
logger().warn("Unsupported RenderingMode "+this.getGraphicsState().getTextState().getRenderingMode()
+" in PageDrawer.processTextPosition()"
+ "Using RenderingMode "+PDTextState.RENDERING_MODE_FILL_TEXT+" instead");
- graphics.setColor( this.getGraphicsState().getNonStrokingColor().createColor() );
+ graphics.setColor( this.getGraphicsState().getNonStrokingColor().getJavaColor() );
}
PDFont font = text.getFont();
@@ -247,7 +247,7 @@
*/
public void fillPath(int windingRule) throws IOException
{
- graphics.setColor( getGraphicsState().getNonStrokingColor().createColor() );
+ graphics.setColor( getGraphicsState().getNonStrokingColor().getJavaColor() );
getLinePath().setWindingRule(windingRule);
graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF );
graphics.setClip(getGraphicsState().getCurrentClippingPath());
@@ -274,7 +274,7 @@
*/
public void strokePath() throws IOException
{
- graphics.setColor( getGraphicsState().getStrokingColor().createColor() );
+ graphics.setColor( getGraphicsState().getStrokingColor().getJavaColor() );
graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF );
graphics.setClip(getGraphicsState().getCurrentClippingPath());
GeneralPath path = getLinePath();
Modified: incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java?rev=814563&r1=814562&r2=814563&view=diff
==============================================================================
--- incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java (original)
+++ incubator/pdfbox/trunk/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java Mon Sep 14 10:24:35 2009
@@ -67,6 +67,14 @@
private COSArray colorSpaceValue = new COSArray();
/**
+ * Cached Java AWT color based on the current color space and value.
+ * The value is cleared whenever the color space or value is set.
+ *
+ * @see #getJavaColor()
+ */
+ private Color color = null;
+
+ /**
* Default constructor.
*
*/
@@ -88,11 +96,24 @@
}
/**
+ * Returns the Java AWT color based on the current color space and value.
+ *
+ * @return current Java AWT color
+ * @throws IOException if the current color can not be created
+ */
+ public Color getJavaColor() throws IOException {
+ if (color == null) {
+ color = createColor();
+ }
+ return color;
+ }
+
+ /**
* Create the current color from the colorspace and values.
* @return The current awt color.
* @throws IOException If there is an error creating the color.
*/
- public Color createColor() throws IOException
+ private Color createColor() throws IOException
{
float[] components = colorSpaceValue.toFloatArray();
try
@@ -178,6 +199,8 @@
public void setColorSpace(PDColorSpace value)
{
colorSpace = value;
+ // Clear color cache
+ color = null;
}
/**
@@ -208,5 +231,7 @@
public void setColorSpaceValue(float[] value)
{
colorSpaceValue.setFloatArray( value );
+ // Clear color cache
+ color = null;
}
}