You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2014/01/24 22:24:16 UTC
svn commit: r1561191 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer:
SetLineWidth.java StrokePath.java
Author: lehmi
Date: Fri Jan 24 21:24:16 2014
New Revision: 1561191
URL: http://svn.apache.org/r1561191
Log:
PDFBOX-1861: add the transformation to the dash before painting as proposed by Tilman Hausherr and John Hewson
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/StrokePath.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java?rev=1561191&r1=1561190&r2=1561191&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/SetLineWidth.java Fri Jan 24 21:24:16 2014
@@ -23,7 +23,6 @@ import org.apache.pdfbox.pdfviewer.PageD
import org.apache.pdfbox.util.PDFOperator;
import java.awt.BasicStroke;
-import java.awt.Graphics2D;
import java.io.IOException;
/**
@@ -45,10 +44,6 @@ public class SetLineWidth extends org.ap
{
super.process( operator, arguments );
float lineWidth = (float)context.getGraphicsState().getLineWidth();
- if (lineWidth == 0)
- {
- lineWidth = 1;
- }
PageDrawer drawer = (PageDrawer)context;
BasicStroke stroke = (BasicStroke)drawer.getStroke();
if (stroke == null)
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/StrokePath.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/StrokePath.java?rev=1561191&r1=1561190&r2=1561191&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/StrokePath.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/StrokePath.java Fri Jan 24 21:24:16 2014
@@ -27,7 +27,6 @@ import org.apache.pdfbox.util.PDFOperato
import org.apache.pdfbox.util.operator.OperatorProcessor;
import java.awt.BasicStroke;
-import java.awt.Graphics2D;
import java.io.IOException;
/**
@@ -46,6 +45,7 @@ public class StrokePath extends Operator
/**
* S stroke the path.
+ *
* @param operator The operator that is being executed.
* @param arguments List
*
@@ -56,24 +56,42 @@ public class StrokePath extends Operator
///dwilson 3/19/07 refactor
try
{
- PageDrawer drawer = (PageDrawer)context;
+ PageDrawer drawer = (PageDrawer) context;
- float lineWidth = (float)context.getGraphicsState().getLineWidth();
+ float lineWidth = (float) context.getGraphicsState().getLineWidth();
Matrix ctm = context.getGraphicsState().getCurrentTransformationMatrix();
- if ( ctm != null && ctm.getXScale() > 0)
+ if (ctm != null && ctm.getXScale() > 0)
{
lineWidth = lineWidth * ctm.getXScale();
}
- BasicStroke stroke = (BasicStroke)drawer.getStroke();
+ if (lineWidth < 0.25)
+ {
+ lineWidth = 0.25f;
+ }
+
+ BasicStroke stroke = (BasicStroke) drawer.getStroke();
if (stroke == null)
{
- drawer.setStroke( new BasicStroke( lineWidth ) );
+ drawer.setStroke(new BasicStroke(lineWidth));
}
else
{
- drawer.setStroke( new BasicStroke(lineWidth, stroke.getEndCap(), stroke.getLineJoin(),
- stroke.getMiterLimit(), stroke.getDashArray(), stroke.getDashPhase()) );
+ float phaseStart = stroke.getDashPhase();
+ float[] dashArray = stroke.getDashArray();
+ if (dashArray != null)
+ {
+ if (ctm != null && ctm.getXScale() > 0)
+ {
+ for (int i = 0; i < dashArray.length; ++i)
+ {
+ dashArray[i] *= ctm.getXScale();
+ }
+ }
+ phaseStart *= ctm.getXScale();
+ }
+ drawer.setStroke(new BasicStroke(lineWidth, stroke.getEndCap(), stroke.getLineJoin(),
+ stroke.getMiterLimit(), dashArray, phaseStart));
}
drawer.strokePath();
}