Hi Phil,
another option to avoid the problem is to be a bit more specific
regarding the
required font when we obtaining lcd glyph from GDI.
If we specify a particular name of the font which we used to construct the
glyph vector, then we will get glyphs exactly for desired characters:
http://cr.openjdk.java.net/~bae/8078382/9/webrev.01/
This change affects only the case of lcd glyphs on windows,
it reduces the scope of required testing.
However, there seems to be a copy&paste error in FontFamily.java:
on lines 340 - 341 we check that bold font fits our needs but use italic
anyway. Was it done by purpose, or this is really an error?
Thanks,
Andrew
On 7/15/2015 7:25 PM, Phil Race wrote:
This probably needs more examination and perhaps a more complex fix.
The observation that GDI bases bold-italic on the bold version not the
italic version is an implementation choice just as we had done the
opposite. It is possible some other time it does the opposite or some
other platform does the opposite. I have supposed it is harder to
synthesise italic than to do 'over-strike'. And this GDI usage
applies only to LCD glyphs.
Maybe what we need to do is see if we can detect the cases when
GDI and JDK disagree on the actual font and remap the glyph id.
-phil.
On 7/15/15 4:12 AM, Andrew Brygin wrote:
Hello,
could you please review a fix for 8078382?
bug: https://bugs.openjdk.java.net/browse/JDK-8078382
webrev: http://cr.openjdk.java.net/~bae/8078382/9/webrev.00/
The problem is caused by following peculiarity of the Code New
Roman font: this font provides plain, italic and bold variants.
In bold and italic variants of the font, different glyphs
correspond to the apostrophe character (0039):
bold: 0039 -> 0x250 (592)
italic: 0039 -> 0x256 (598)
So, we translate character to glyphs using italic variant
of the font, and then request glyph images from GDI.
However, GDI uses the bold variant of the font in order
to compose glyph images for artificial bold-italic variant,
and we have got a glyph image for ® instead of apostrophe.
Suggested fix is to select bold variant (if possible) as a
base for artificial bold-italic.
There is no regression test because it requires a specific font
to be installed on a test system. The font can be found here:
http://www.dafont.com/code-new-roman.font
Please take a look.
Thanks,
Andrew