Sounds like https://bugs.openjdk.java.net/browse/JDK-8015556
[macosx] surrogate pairs do not render properly (show up as boxes or
incorrect glyphs)
But that was fixed in 7u40. What JDK 7 update is in use here ?
-phil.
On 4/9/14 9:17 AM, Naoto Sato wrote:
Hi Mark,
On 4/9/14, 3:11 AM, Mark Davis ☕️ wrote:
I'm having some trouble with drawing supplemental characters in Java. It
appears to be due to bugs in Java.
*First, how do I report this? And second, can anyone think of a
work-around?*
Here is the link to report an issue against JDK:
http://bugreport.java.com/bugreport/
Please choose "classes_2d" as the subcategory.
This is on a Mac OS 10.9.2, JDK 7, and I am rendering a number of
characters in a loop.
When I call
graphics.drawString(s, xStart, ascent);
Each supplemental character that shares the same first char (high
surrogate) gets the same image (see attachments).
It appears that it is caching by char instead of by code point.
To work around the problem, I tried changing the code to draw glyph
vectors instead.
FontRenderContext frc =
graphics.getFontRenderContext();
GlyphVector gv = myFont.createGlyphVector(frc, s);
...
Shape shape = gv.getOutline(xStart, ascent);
graphics.draw(shape);
To my surprise, it got even worse: I get an unknown glyph after each
image. See attachments.
It appears that when it is advancing through the string to get the
glyphs, it is picking up the glyph ID for the code point, but then it is
only advancing by 1, so it is always picking up garbage after each
character.
Yeah, your explanation does sound like what's happening in the font
rendering on MacOSX. Phil/Mike, do you have any idea what's going on?
Naoto