[OpenJDK 2D-Dev] openjdk incompatibility

Igor Nekrestyanov Igor.Nekrestyanov at Sun.COM
Tue Oct 21 13:41:53 UTC 2008


This issues now has bug id: 6761856

-igor

Phil Race wrote:
> You didn't show what the result was from OpenJDK
> Seems the complaint here is the that the position of the vertical 
> bounds is suspect.
>
> Looks like the sign is incorrect in some code that interfaces to 
> freetype and returns glyph bounds
> I think bbox.yMax should be -bbox.yMax, since freetype considers the 
> top-most coord as
> the max, and that needs to be converted to 2D's coordinate system.
>
> So this appears to be a bug in openjdk.
>
> -phil.
>
> Hiroshi Yamauchi wrote:
>> 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