[OpenJDK 2D-Dev] openjdk incompatibility
Hiroshi Yamauchi
yamauchi at google.com
Wed Oct 15 18:01:15 UTC 2008
Hi,
Here's a test that indicates an incompatibility between OpenJDK6/7 and
Sun JDK. It passes on Sun JDK but not on OpenJDK. So, I believe this
is due to the difference between the two font rasterizer
implementations. The incompatibility causes a vertical position gap.
Is this a new bug, a known bug, or an implementation difference? Is
there a fix available?
If this isn't a bug, how would you suggest changing existing
applications that rely on the Sun JDK's behavior?
Thanks,
Hiroshi
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.text.*;
import java.io.File;
public class OpenJDKFontTest {
// Copy this ttf file from the Sun JDK
public static final String PATH_TO_FONT = "./LucidaSansRegular.ttf";
public static final String TEST_CONTENT = "Beds, carriers, bowls,
leashes, snacks, and more.";
public static void testLineMeasurerBounds() throws Exception {
Font font = Font.createFont(Font.TRUETYPE_FONT, new
File(PATH_TO_FONT)).deriveFont(62f);
AttributedString attributedString = new AttributedString(TEST_CONTENT);
attributedString.addAttribute(TextAttribute.FONT, font);
AttributedCharacterIterator paragraph = attributedString.getIterator();
int paragraphEnd = paragraph.getEndIndex();
FontRenderContext frc = new FontRenderContext(null, true, true);
LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(paragraph, frc);
lineMeasurer.setPosition(paragraph.getBeginIndex());
float desiredWidth = 882f;
TextLayout layout = lineMeasurer.nextLayout(desiredWidth,
paragraphEnd, true);
Rectangle2D textBox = layout.getBounds();
Rectangle2D expected = new Rectangle2D.Float(5.78125f,
-47.796875f, 633.71484f, 57.515625f);
if (!expected.equals(textBox)) {
throw new RuntimeException("Not equal: <" + expected + "> <" +
textBox + ">");
}
}
public static void main(String[] args) throws Exception {
testLineMeasurerBounds();
}
}
More information about the 2d-dev
mailing list