Author: lehmi
Date: Sat Nov 10 17:48:07 2012
New Revision: 1407859
URL: http://svn.apache.org/viewvc?rev=1407859&view=rev
Log:
PDFBOX-1443: fixed handling of clipping winding rule as proposed by Dave Smith
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipEvenOddRule.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipNonZeroRule.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/EndPath.java
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java?rev=1407859&r1=1407858&r2=1407859&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/PageDrawer.java
Sat Nov 10 17:48:07 2012
@@ -73,6 +73,12 @@ public class PageDrawer extends PDFStrea
private static final Log LOG = LogFactory.getLog(PageDrawer.class);
private Graphics2D graphics;
+
+ /**
+ * clipping winding rule used for the clipping path.
+ */
+ private int clippingWindingRule = -1;
+
/**
* Size of the page.
*/
@@ -406,27 +412,52 @@ public class PageDrawer extends PDFStrea
*
* @param windingRule The winding rule this path will use.
*
+ * @deprecated use {@link #setClippingWindingRule(int)} instead
+ *
*/
public void setClippingPath(int windingRule)
{
- PDGraphicsState graphicsState = getGraphicsState();
- GeneralPath clippingPath = (GeneralPath)getLinePath().clone();
- clippingPath.setWindingRule(windingRule);
- // If there is already set a clipping path, we have to intersect the
new with the existing one
- if (graphicsState.getCurrentClippingPath() != null)
- {
- Area currentArea = new
Area(getGraphicsState().getCurrentClippingPath());
- Area newArea = new Area(clippingPath);
- currentArea.intersect(newArea);
- graphicsState.setCurrentClippingPath(currentArea);
- }
- else
+ setClippingWindingRule(windingRule);
+ }
+
+ /**
+ * Set the clipping winding rule.
+ *
+ * @param windingRule The winding rule which will be used for clipping.
+ *
+ */
+ public void setClippingWindingRule(int windingRule)
+ {
+ clippingWindingRule = windingRule;
+ }
+
+ /**
+ * Set the clipping Path.
+ *
+ */
+ public void endPath()
+ {
+ if (clippingWindingRule > -1)
{
- graphicsState.setCurrentClippingPath(clippingPath);
+ PDGraphicsState graphicsState = getGraphicsState();
+ GeneralPath clippingPath = (GeneralPath)getLinePath().clone();
+ clippingPath.setWindingRule(clippingWindingRule);
+ // If there is already set a clipping path, we have to intersect
the new with the existing one
+ if (graphicsState.getCurrentClippingPath() != null)
+ {
+ Area currentArea = new
Area(getGraphicsState().getCurrentClippingPath());
+ Area newArea = new Area(clippingPath);
+ currentArea.intersect(newArea);
+ graphicsState.setCurrentClippingPath(currentArea);
+ }
+ else
+ {
+ graphicsState.setCurrentClippingPath(clippingPath);
+ }
+ clippingWindingRule = -1;
}
getLinePath().reset();
}
-
/**
* Draw the AWT image. Called by Invoke.
* Moved into PageDrawer so that Invoke doesn't have to reach in here for
Graphics as that breaks extensibility.
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipEvenOddRule.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipEvenOddRule.java?rev=1407859&r1=1407858&r2=1407859&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipEvenOddRule.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipEvenOddRule.java
Sat Nov 10 17:48:07 2012
@@ -39,7 +39,7 @@ public class ClipEvenOddRule extends Ope
/**
* Log instance.
*/
- private static final Log log = LogFactory.getLog(ClipEvenOddRule.class);
+ private static final Log LOG = LogFactory.getLog(ClipEvenOddRule.class);
/**
* process : W* : set clipping path using even odd rule.
@@ -54,11 +54,11 @@ public class ClipEvenOddRule extends Ope
try
{
PageDrawer drawer = (PageDrawer)context;
- drawer.setClippingPath(GeneralPath.WIND_EVEN_ODD);
+ drawer.setClippingWindingRule(GeneralPath.WIND_EVEN_ODD);
}
catch (Exception e)
{
- log.warn(e, e);
+ LOG.warn(e, e);
}
}
}
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipNonZeroRule.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipNonZeroRule.java?rev=1407859&r1=1407858&r2=1407859&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipNonZeroRule.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/ClipNonZeroRule.java
Sat Nov 10 17:48:07 2012
@@ -39,7 +39,7 @@ public class ClipNonZeroRule extends Ope
/**
* Log instance.
*/
- private static final Log log = LogFactory.getLog(ClipNonZeroRule.class);
+ private static final Log LOG = LogFactory.getLog(ClipNonZeroRule.class);
/**
* process : W : Set the clipping path using non zero winding rule.
@@ -54,11 +54,11 @@ public class ClipNonZeroRule extends Ope
try
{
PageDrawer drawer = (PageDrawer)context;
- drawer.setClippingPath(GeneralPath.WIND_NON_ZERO);
+ drawer.setClippingWindingRule(GeneralPath.WIND_NON_ZERO);
}
catch (Exception e)
{
- log.warn(e, e);
+ LOG.warn(e, e);
}
}
}
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/EndPath.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/EndPath.java?rev=1407859&r1=1407858&r2=1407859&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/EndPath.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/pagedrawer/EndPath.java
Sat Nov 10 17:48:07 2012
@@ -41,6 +41,6 @@ public class EndPath extends OperatorPro
public void process(PDFOperator operator, List<COSBase> arguments)
{
PageDrawer drawer = (PageDrawer)context;
- drawer.getLinePath().reset();
+ drawer.endPath();
}
}