]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Fixed another little kerning bug.
authorJeremias Maerki <jeremias@apache.org>
Thu, 11 Dec 2008 16:41:53 +0000 (16:41 +0000)
committerJeremias Maerki <jeremias@apache.org>
Thu, 11 Dec 2008 16:41:53 +0000 (16:41 +0000)
Trim down dx array to the maximum size necessary.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign@725738 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/render/intermediate/IFRenderer.java

index b3748dc2e94c2784508f0d309f58e2c7c392e7fe..f4df51b8e630398a005effa8b71be777fa31b26f 100644 (file)
@@ -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);
                 }