aboutsummaryrefslogtreecommitdiffstats
path: root/src/sandbox
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2006-05-31 13:36:18 +0000
committerJeremias Maerki <jeremias@apache.org>2006-05-31 13:36:18 +0000
commitf769a3e176f70db48ece9c2962e5e54175361b30 (patch)
tree07fd37792e1c04f808bd2c299968bf32a73c272a /src/sandbox
parent49dd6d899bc06a5554dfec23e8c1363f08638ffa (diff)
downloadxmlgraphics-fop-f769a3e176f70db48ece9c2962e5e54175361b30.tar.gz
xmlgraphics-fop-f769a3e176f70db48ece9c2962e5e54175361b30.zip
Fix for border painting in "quality" mode. Some borders were swallowed.
Added an additional parameter to distinguish between painting bitmap with source transparency (bitmapped text and borders) and without (images). git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@410521 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/sandbox')
-rw-r--r--src/sandbox/org/apache/fop/render/pcl/PCLGenerator.java8
-rw-r--r--src/sandbox/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java2
-rw-r--r--src/sandbox/org/apache/fop/render/pcl/PCLRenderer.java44
-rw-r--r--src/sandbox/org/apache/fop/render/pcl/PCLRendererContext.java6
4 files changed, 40 insertions, 20 deletions
diff --git a/src/sandbox/org/apache/fop/render/pcl/PCLGenerator.java b/src/sandbox/org/apache/fop/render/pcl/PCLGenerator.java
index 373a70794..8612a51e6 100644
--- a/src/sandbox/org/apache/fop/render/pcl/PCLGenerator.java
+++ b/src/sandbox/org/apache/fop/render/pcl/PCLGenerator.java
@@ -578,9 +578,11 @@ public class PCLGenerator {
* (1-bit) bitmap image.
* @param img the bitmap image
* @param targetDim the target Dimention (in mpt)
+ * @param sourceTransparency true if the background should not be erased
* @throws IOException In case of an I/O error
*/
- public void paintBitmap(RenderedImage img, Dimension targetDim) throws IOException {
+ public void paintBitmap(RenderedImage img, Dimension targetDim, boolean sourceTransparency)
+ throws IOException {
double targetResolution = img.getWidth() / UnitConv.mpt2in(targetDim.width);
int resolution = (int)Math.round(targetResolution);
int effResolution = calculatePCLResolution(resolution, true);
@@ -634,7 +636,7 @@ public class PCLGenerator {
RenderedImage red = buf;
selectCurrentPattern(0, 0); //Solid black
- setTransparencyMode(mask != null, true);
+ setTransparencyMode(sourceTransparency || mask != null, true);
paintMonochromeBitmap(red, effResolution);
} else {
//TODO untested!
@@ -654,7 +656,7 @@ public class PCLGenerator {
}
effImg = buf;
}
- setSourceTransparencyMode(false);
+ setSourceTransparencyMode(sourceTransparency);
selectCurrentPattern(0, 0); //Solid black
paintMonochromeBitmap(effImg, effResolution);
}
diff --git a/src/sandbox/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java b/src/sandbox/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java
index 4d2e950ab..d2e91f8e6 100644
--- a/src/sandbox/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java
+++ b/src/sandbox/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java
@@ -112,7 +112,7 @@ public class PCLGraphics2DAdapter extends AbstractGraphics2DAdapter {
BufferedImage bi = paintToBufferedImage(painter, pclContext, resolution, true, false);
pcl.setCursorPos(x, y);
- gen.paintBitmap(bi, new Dimension(width, height));
+ gen.paintBitmap(bi, new Dimension(width, height), pclContext.isSourceTransparency());
}
}
diff --git a/src/sandbox/org/apache/fop/render/pcl/PCLRenderer.java b/src/sandbox/org/apache/fop/render/pcl/PCLRenderer.java
index d20b45a69..71780448c 100644
--- a/src/sandbox/org/apache/fop/render/pcl/PCLRenderer.java
+++ b/src/sandbox/org/apache/fop/render/pcl/PCLRenderer.java
@@ -101,6 +101,11 @@ public class PCLRenderer extends PrintRenderer {
/** The MIME type for PCL */
public static final String MIME_TYPE = MimeConstants.MIME_PCL_ALT;
+ private static final QName CONV_MODE
+ = new QName(ExtensionElementMapping.URI, null, "conversion-mode");
+ private static final QName SRC_TRANSPARENCY
+ = new QName(ExtensionElementMapping.URI, null, "source-transparency");
+
/** The OutputStream to write the PCL stream to */
protected OutputStream out;
@@ -580,7 +585,8 @@ public class PCLRenderer extends PrintRenderer {
RendererContext rc = createRendererContext(paintRect.x, paintRect.y,
paintRect.width, paintRect.height, null);
Map atts = new java.util.HashMap();
- atts.put(new QName(ExtensionElementMapping.URI, null, "conversion-mode"), "bitmap");
+ atts.put(CONV_MODE, "bitmap");
+ atts.put(SRC_TRANSPARENCY, "true");
rc.setProperty(RendererContextConstants.FOREIGN_ATTRIBUTES, atts);
Graphics2DImagePainter painter = new Graphics2DImagePainter() {
@@ -959,7 +965,9 @@ public class PCLRenderer extends PrintRenderer {
try {
setCursorPos(this.currentIPPosition + (int)pos.getX(),
this.currentBPPosition + (int)pos.getY());
- gen.paintBitmap(img, new Dimension((int)pos.getWidth(), (int)pos.getHeight()));
+ gen.paintBitmap(img,
+ new Dimension((int)pos.getWidth(), (int)pos.getHeight()),
+ false);
} catch (IOException ioe) {
handleIOTrouble(ioe);
}
@@ -1177,29 +1185,33 @@ public class PCLRenderer extends PrintRenderer {
final Rectangle.Float effBorderRect = new Rectangle2D.Float(
borderRect.x - (currentIPPosition / 1000f),
borderRect.y - (currentBPPosition / 1000f),
- borderRect.width, borderRect.height);
+ borderRect.width,
+ borderRect.height);
final Rectangle paintRect = new Rectangle(
- (int)Math.round(borderRect.x * 1000),
- (int)Math.round(borderRect.y * 1000),
- (int)Math.floor(borderRect.width * 1000) + 1,
- (int)Math.floor(borderRect.height * 1000) + 1);
- int xoffset = (bpsStart != null ? bpsStart.width : 0);
+ (int)Math.round(borderRect.x * 1000f),
+ (int)Math.round(borderRect.y * 1000f),
+ (int)Math.floor(borderRect.width * 1000f) + 1,
+ (int)Math.floor(borderRect.height * 1000f) + 1);
+ //Add one pixel wide safety margin around the paint area
+ int pixelWidth = (int)Math.round(UnitConv.in2mpt(1) / userAgent.getTargetResolution());
+ final int xoffset = (bpsStart != null ? bpsStart.width : 0) + pixelWidth;
+ final int yoffset = pixelWidth;
paintRect.x += xoffset;
- paintRect.width += xoffset;
- paintRect.width += (bpsEnd != null ? bpsEnd.width : 0);
+ paintRect.y += yoffset;
+ paintRect.width += 2 * pixelWidth;
+ paintRect.height += 2 * pixelWidth;
RendererContext rc = createRendererContext(paintRect.x, paintRect.y,
paintRect.width, paintRect.height, null);
- if (false) {
- Map atts = new java.util.HashMap();
- atts.put(new QName(ExtensionElementMapping.URI, null, "conversion-mode"), "bitmap");
- rc.setProperty(RendererContextConstants.FOREIGN_ATTRIBUTES, atts);
- }
+ Map atts = new java.util.HashMap();
+ atts.put(CONV_MODE, "bitmap");
+ atts.put(SRC_TRANSPARENCY, "true");
+ rc.setProperty(RendererContextConstants.FOREIGN_ATTRIBUTES, atts);
Graphics2DImagePainter painter = new Graphics2DImagePainter() {
public void paint(Graphics2D g2d, Rectangle2D area) {
- g2d.translate((bpsStart != null ? bpsStart.width : 0), 0);
+ g2d.translate(xoffset, yoffset);
g2d.scale(1000, 1000);
float startx = effBorderRect.x;
float starty = effBorderRect.y;
diff --git a/src/sandbox/org/apache/fop/render/pcl/PCLRendererContext.java b/src/sandbox/org/apache/fop/render/pcl/PCLRendererContext.java
index 462abfa48..ae5646db8 100644
--- a/src/sandbox/org/apache/fop/render/pcl/PCLRendererContext.java
+++ b/src/sandbox/org/apache/fop/render/pcl/PCLRendererContext.java
@@ -60,6 +60,12 @@ public class PCLRendererContext extends RendererContext.RendererContextWrapper {
return getForeignAttributes() != null
&& "true".equalsIgnoreCase((String)getForeignAttributes().get(qName));
}
+
+ public boolean isSourceTransparency() {
+ QName qName = new QName(ExtensionElementMapping.URI, null, "source-transparency");
+ return getForeignAttributes() != null
+ && "true".equalsIgnoreCase((String)getForeignAttributes().get(qName));
+ }
} \ No newline at end of file