diff options
Diffstat (limited to 'java/awt/Font.java')
-rw-r--r-- | java/awt/Font.java | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/java/awt/Font.java b/java/awt/Font.java index e630207d5..29b87d6af 100644 --- a/java/awt/Font.java +++ b/java/awt/Font.java @@ -1087,7 +1087,8 @@ public class Font implements Serializable */ public Rectangle2D getStringBounds(String str, FontRenderContext frc) { - return getStringBounds(str, 0, str.length() - 1, frc); + char[] chars = str.toCharArray(); + return getStringBounds(chars, 0, chars.length, frc); } /** @@ -1115,8 +1116,8 @@ public class Font implements Serializable public Rectangle2D getStringBounds(String str, int begin, int limit, FontRenderContext frc) { - return peer.getStringBounds(this, new StringCharacterIterator(str), begin, - limit, frc); + String sub = str.substring(begin, limit); + return getStringBounds(sub, frc); } /** @@ -1144,7 +1145,16 @@ public class Font implements Serializable public Rectangle2D getStringBounds(CharacterIterator ci, int begin, int limit, FontRenderContext frc) { - return peer.getStringBounds(this, ci, begin, limit, frc); + int start = ci.getBeginIndex(); + int end = ci.getEndIndex(); + char[] chars = new char[limit - start]; + ci.setIndex(start); + for (int index = 0; index < chars.length; index++) + { + chars[index] = ci.current(); + ci.next(); + } + return getStringBounds(chars, 0, chars.length, frc); } /** @@ -1172,9 +1182,10 @@ public class Font implements Serializable public Rectangle2D getStringBounds(char[] chars, int begin, int limit, FontRenderContext frc) { - return peer.getStringBounds(this, - new StringCharacterIterator(new String(chars)), - begin, limit, frc); + String str = new String(chars, begin, limit - begin); + TextLayout layout = new TextLayout(str, this, frc); + return new Rectangle2D.Float(0, -layout.getAscent(), layout.getAdvance(), + layout.getDescent() + layout.getLeading()); } /** |