summaryrefslogtreecommitdiffstats
path: root/libjava/javax/swing/text/Utilities.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/javax/swing/text/Utilities.java')
-rw-r--r--libjava/javax/swing/text/Utilities.java32
1 files changed, 24 insertions, 8 deletions
diff --git a/libjava/javax/swing/text/Utilities.java b/libjava/javax/swing/text/Utilities.java
index 61c13eef509..6d2b54680a0 100644
--- a/libjava/javax/swing/text/Utilities.java
+++ b/libjava/javax/swing/text/Utilities.java
@@ -91,13 +91,29 @@ public class Utilities
FontMetrics metrics = g.getFontMetrics();
int ascent = metrics.getAscent();
+ int pixelWidth = 0;
+ int pos = 0;
+ int len = 0;
+
for (int offset = s.offset; offset < (s.offset + s.count); ++offset)
{
- switch (buffer[offset])
+ char c = buffer[offset];
+ if (c == '\t' || c == '\n')
+ {
+ if (len > 0) {
+ g.drawChars(buffer, pos, len, pixelX, pixelY + ascent);
+ pixelX += pixelWidth;
+ pixelWidth = 0;
+ }
+ pos = offset+1;
+ len = 0;
+ }
+
+ switch (c)
{
case '\t':
// In case we have a tab, we just 'jump' over the tab.
- // When we have no tab expander we just use the width of 'm'.
+ // When we have no tab expander we just use the width of ' '.
if (e != null)
pixelX = (int) e.nextTabStop((float) pixelX,
startOffset + offset - s.offset);
@@ -105,20 +121,20 @@ public class Utilities
pixelX += metrics.charWidth(' ');
break;
case '\n':
- // In case we have a newline, we must draw
- // the buffer and jump on the next line.
- g.drawChars(buffer, offset, 1, pixelX, y);
+ // In case we have a newline, we must jump to the next line.
pixelY += metrics.getHeight();
pixelX = x;
break;
default:
- // Here we draw the char.
- g.drawChars(buffer, offset, 1, pixelX, pixelY + ascent);
- pixelX += metrics.charWidth(buffer[offset]);
+ ++len;
+ pixelWidth += metrics.charWidth(buffer[offset]);
break;
}
}
+ if (len > 0)
+ g.drawChars(buffer, pos, len, pixelX, pixelY + ascent);
+
return pixelX;
}
OpenPOWER on IntegriCloud