aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/java/org/apache/fop/render/intermediate/IFRenderer.java16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/java/org/apache/fop/render/intermediate/IFRenderer.java b/src/java/org/apache/fop/render/intermediate/IFRenderer.java
index b3748dc2e..f4df51b8e 100644
--- a/src/java/org/apache/fop/render/intermediate/IFRenderer.java
+++ b/src/java/org/apache/fop/render/intermediate/IFRenderer.java
@@ -1025,7 +1025,7 @@ public class IFRenderer extends AbstractPathOrientedRenderer {
private class TextUtil {
private static final int INITIAL_BUFFER_SIZE = 16;
private int[] dx = new int[INITIAL_BUFFER_SIZE];
- private boolean hasDX = false;
+ private int lastDXPos = 0;
private StringBuffer text = new StringBuffer();
private int startx, starty;
@@ -1035,7 +1035,7 @@ public class IFRenderer extends AbstractPathOrientedRenderer {
void adjust(int adjust) {
if (adjust != 0) {
- int idx = text.length();
+ int idx = text.length() - 1;
if (idx > dx.length - 1) {
int newSize = Math.max(dx.length, idx + 1) + INITIAL_BUFFER_SIZE;
int[] newDX = new int[newSize];
@@ -1043,7 +1043,7 @@ public class IFRenderer extends AbstractPathOrientedRenderer {
dx = newDX;
}
dx[idx] += adjust;
- hasDX = true;
+ lastDXPos = idx;
}
}
@@ -1051,7 +1051,7 @@ public class IFRenderer extends AbstractPathOrientedRenderer {
if (text.length() > 0) {
text.setLength(0);
Arrays.fill(dx, 0);
- hasDX = false;
+ lastDXPos = 0;
}
}
@@ -1063,7 +1063,13 @@ public class IFRenderer extends AbstractPathOrientedRenderer {
void flush() {
if (text.length() > 0) {
try {
- painter.drawText(startx, starty, (hasDX ? dx : null), null, text.toString());
+ int[] effDX = null;
+ if (lastDXPos > 0) {
+ int size = lastDXPos + 1;
+ effDX = new int[size];
+ System.arraycopy(dx, 0, effDX, 0, size);
+ }
+ painter.drawText(startx, starty, effDX, null, text.toString());
} catch (IFException e) {
handleIFException(e);
}