[OpenJDK 2D-Dev] Font rendering issue

Mario Torre neugens at limasoftware.net
Mon Mar 22 22:27:17 UTC 2010

Hi Jim, Roman, Java2D people,

I'm trying to fix an annoying bug that appears almost always fonts are
rendered without antialiasing:


I started tracking this because anything I write something with an
underscore in NetBeans I don't see the underscore, and that drives me
crazy (ok, it also affect JamaicaVM, but I fixed it because I type my
code in NetBeans ;)

My ideas was that the metrics are calculated incorrectly in presence of
hinting [1].

The freetype documentation states that there can be an off-by-one (or
more) in such cases.

This made me check the freetype scaler native code and in turn the

Now, by reading the code, I believe this to be a rounding error and not
an off-by-one for the fixed-to-floating-point conversion and back that
happens between native and java code, but it's still not 100% clear to
me the reason and where the rounding goes off (the code is quite
convoluted, or maybe it was just a too long day).

I found two possible places where I could fix it, one is taking out the
rounding from FontDesignMetrics [2]:

private static float roundingUpValue = 0.0f

and rounding the leading only in the freetypeScaler.c:

ly = (jfloat) ROUND(FT26Dot6ToFloat(
                    scalerInfo->face->size->metrics.height +
                    bmodifier) + ay - dy);

The other is to simply increase roundingUpValue to 1.0f.

I would like some context around this, maybe those values were
calculated for the closed font scaler and are not valid with freetype
(maybe freetype does a better job with this even?) or maybe incrementing
the rounding up does only fix the problem without fixing the cause (or
worse, only for a selected group of fonts)?

I'm a bit lost on that, so any hint (even subpixel ones :) is

Ah, before I forget, you can quickly test this with Open and ClosedJDK
with the Font2DTest.jar and passing -Dawt.useSystemAAFontSettings=false




pgp key: http://subkeys.pgp.net/

Proud GNU Classpath developer: http://www.classpath.org/
Read About us at: http://planet.classpath.org
OpenJDK: http://openjdk.java.net/projects/caciocavallo/

Please, support open standards:

More information about the 2d-dev mailing list