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;
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];
dx = newDX;
}
dx[idx] += adjust;
- hasDX = true;
+ lastDXPos = idx;
}
}
if (text.length() > 0) {
text.setLength(0);
Arrays.fill(dx, 0);
- hasDX = false;
+ lastDXPos = 0;
}
}
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);
}