-
Bug
-
Resolution: Fixed
-
P5
-
6
-
b167
-
x86
-
windows_xp
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8179799 | 10 | Philip Race | P5 | Resolved | Fixed | b07 |
A DESCRIPTION OF THE PROBLEM :
The first code example doesn't work. Further the name pen is misleading.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
public void paint(Graphics graphics) {
Point2D pt2d = new Point2D.Float(10, 10);
Graphics2D g2d = (Graphics2D)graphics;
FontRenderContext frc = g2d.getFontRenderContext();
AttributedString paragraphText = new AttributedString(text);
paragraphText.addAttribute(TextAttribute.FONT, new Font("sans", Font.PLAIN, 10));
LineBreakMeasurer measurer = new LineBreakMeasurer(paragraphText.getIterator(), frc);
float wrappingWidth = getSize().width - 10;
while (measurer.getPosition() < paragraphText.getIterator().getEndIndex()) {
TextLayout layout = measurer.nextLayout(wrappingWidth);
pt2d.setLocation(pt2d.getX(),pt2d.getY()+ layout.getAscent());
float dx = layout.isLeftToRight() ?
0 : (wrappingWidth - layout.getAdvance());
layout.draw(g2d, (float)pt2d.getX() + dx, (float)pt2d.getY());
pt2d.setLocation(pt2d.getX(), pt2d.getY() + layout.getDescent() + layout.getLeading());
}
}
ACTUAL -
public void paint(Graphics graphics) {
Point2D pen = new Point2D(10, 20);
Graphics2D g2d = (Graphics2D)graphics;
FontRenderContext frc = g2d.getFontRenderContext();
// let styledText be an AttributedCharacterIterator containing at least
// one character
LineBreakMeasurer measurer = new LineBreakMeasurer(styledText, frc);
float wrappingWidth = getSize().width - 15;
while (measurer.getPosition() < fStyledText.length()) {
TextLayout layout = measurer.nextLayout(wrappingWidth);
pen.y += (layout.getAscent());
float dx = layout.isLeftToRight() ?
0 : (wrappingWidth - layout.getAdvance());
layout.draw(graphics, pen.x + dx, pen.y);
pen.y += layout.getDescent() + layout.getLeading();
}
}
URL OF FAULTY DOCUMENTATION :
http://java.sun.com/javase/6/docs/api/java/awt/font/LineBreakMeasurer.html
The first code example doesn't work. Further the name pen is misleading.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
public void paint(Graphics graphics) {
Point2D pt2d = new Point2D.Float(10, 10);
Graphics2D g2d = (Graphics2D)graphics;
FontRenderContext frc = g2d.getFontRenderContext();
AttributedString paragraphText = new AttributedString(text);
paragraphText.addAttribute(TextAttribute.FONT, new Font("sans", Font.PLAIN, 10));
LineBreakMeasurer measurer = new LineBreakMeasurer(paragraphText.getIterator(), frc);
float wrappingWidth = getSize().width - 10;
while (measurer.getPosition() < paragraphText.getIterator().getEndIndex()) {
TextLayout layout = measurer.nextLayout(wrappingWidth);
pt2d.setLocation(pt2d.getX(),pt2d.getY()+ layout.getAscent());
float dx = layout.isLeftToRight() ?
0 : (wrappingWidth - layout.getAdvance());
layout.draw(g2d, (float)pt2d.getX() + dx, (float)pt2d.getY());
pt2d.setLocation(pt2d.getX(), pt2d.getY() + layout.getDescent() + layout.getLeading());
}
}
ACTUAL -
public void paint(Graphics graphics) {
Point2D pen = new Point2D(10, 20);
Graphics2D g2d = (Graphics2D)graphics;
FontRenderContext frc = g2d.getFontRenderContext();
// let styledText be an AttributedCharacterIterator containing at least
// one character
LineBreakMeasurer measurer = new LineBreakMeasurer(styledText, frc);
float wrappingWidth = getSize().width - 15;
while (measurer.getPosition() < fStyledText.length()) {
TextLayout layout = measurer.nextLayout(wrappingWidth);
pen.y += (layout.getAscent());
float dx = layout.isLeftToRight() ?
0 : (wrappingWidth - layout.getAdvance());
layout.draw(graphics, pen.x + dx, pen.y);
pen.y += layout.getDescent() + layout.getLeading();
}
}
URL OF FAULTY DOCUMENTATION :
http://java.sun.com/javase/6/docs/api/java/awt/font/LineBreakMeasurer.html
- backported by
-
JDK-8179799 java.awt.font.LineBreakMeasurer code incorrect
-
- Resolved
-