On 9/10/2014 2:31 PM, Martin Buchholz wrote:
I have tried to cross all the t's left here. I took your suggestion and minimized the test greatly. I've taken ownership of the bug and it's now marked noreg-hard.

I'm inclined to check in the test case as is, even though it's manual. But I leave that to you, the 2d maintainers.

The only testing I've done is to run the one manual test.  Hope that's OK.

OK to commit this fix?

Do we yet have a 2nd reviewer on the change ?
Other than that its fine by me.

-phil.


On Tue, Sep 9, 2014 at 2:47 PM, Phil Race <[email protected] <mailto:[email protected]>> wrote:

    Martin,

    Although I have yet to test it, the fix looks reasonable to me.
    Probably this decompose outline function supporting
    the callbacks was overlooked when this code was written.
    A jtreg test is tricky as you need to have font data available
    that exercises
    the buggy case and then use the resulting Path2D. But there is no way
    to rely on a particular font with a known property being available
    without creating one and checking it in .. that might be overkill.

    Plus how do you test this in an automated way ?
    You can't compare the freetype glyph rasterisation with the pisces
    rasterisation (that done using fill(..))
    as they are highly likely to differ in some tiny ways and knowing
    how much difference to
    allow is fraught too, leading to a fragile test.

    So noreg-hard and some alternative testing which likely involves a
    manual
    run through Font2DTest to make sure everything seems good.
    I think SQE have some image comparison testing but even if they
    cover much
    outline font rendering which I doubt, I don't think they run it on
    the open builds very often

    FWIW the test code could have been simpler as in :-

       public static void writeImage(File fontFile, File outputFile,
    String value) throws Exception {
            BufferedImage image = new BufferedImage(200, 200,
    BufferedImage.TYPE_INT_RGB);
            Graphics2D g = image.createGraphics();
            g.setColor(Color.WHITE);
            g.fillRect(0, 0, image.getWidth(), image.getHeight());
            g.setColor(Color.BLACK);

            Font font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
            font = font.deriveFont(Font.PLAIN, 72f);
            FontRenderContext frc = new FontRenderContext(null, false,
    false);
            GlyphVector gv = font.createGlyphVector(frc, value);
            g.drawGlyphVector(gv, 10, 80);
            g.fill(gv.getOutline(10, 180));
            ImageIO.write(image, "png", outputFile);
        }

    and then you don't need that G2D subclass.

    There should of course be a client-libs/2d bug on this.
    I submitted https://bugs.openjdk.java.net/browse/JDK-8057986

    Next thing to do is test the fix on an openjdk build using Font2DTest.


    -phil.



    On 9/5/2014 6:57 PM, Martin Buchholz wrote:
    Hi font friends!

    I'm trying to share a font rendering bug fix contributed by my
    colleagues Behdad and Igor.

    http://cr.openjdk.java.net/~martin/webrevs/openjdk9/freetypeScaler-outline/
    
<http://cr.openjdk.java.net/%7Emartin/webrevs/openjdk9/freetypeScaler-outline/>

    Repro recipe:

    (cd test/java/awt/font/GlyphVector/ && javac
    GlyphVectorOutline.java && wget -q -O/tmp/msgothic.ttc
    https://browserlinux-jp.googlecode.com/files/msgothic.ttc && java
    GlyphVectorOutline /tmp/msgothic.ttc /tmp/katakana.png)

    After successfully running that, examine the two rendered
    Japanese characters.

    Without our fix, the lower one is misrendered.

    I don't know how the fix works, and whether/how the manual test
    case can be turned into a real jtreg test.





Reply via email to