Hi Philippe,

On 11/19/14 08:53 PM, Philippe Mouawad wrote:
Hello,
Thanks for fast answer and workaround although as it's a third party library it will be a problem. I tested workaround it is not enough as with it test is moved from its location.

Updated the bug JDK-8065373 <https://bugs.openjdk.java.net/browse/JDK-8065373> with your comments.

Another point, looking at:
https://bugs.openjdk.java.net/browse/JDK-8031109

I don't see any progress on it , any chance it gets fixed ? I tested on Java 9, it is still there.

Thanks for confirming. I have added jdk 9 as affected version and also
increased the priority.


Thanks for reporting it.



Regards
Balchandra


As there is a comment saying this, I am someone who is reporting it :-) :/
Nevertheless if someone have a report against 9 - please reopen and add affectedVersion 9 or 7u specific escalations might be reopen to Sustaining /

Regards
Philippe

On Wed, Nov 19, 2014 at 7:02 PM, Balchandra Vaidya <[email protected] <mailto:[email protected]>> wrote:


    Hi Philippe,


    Thanks for the update. Sergey Bylokhov provided a following
    workaround in the bug JDK-8065373
    <https://bugs.openjdk.java.net/browse/JDK-8065373>.

        Workaround is to apply a transfrom to the graphics instead of
        font:
        + g2.transform(rotator);
         - g2.setFont(font.deriveFont(rotator));


    He has also provided a suggested fix. A blog [1] from Dalibor
    might help you to track the JBS bug yourself.



    Thanks
    Balchandra

    [1] http://robilad.livejournal.com/139637.html





    On 11/19/14 04:58 PM, Philippe Mouawad wrote:
    Hi,
    I tested on windows 7 , issue is not reproduced.
    Don't have Linux to test.

    Maybe other member of team can do this.

    Regards

    On Wed, Nov 19, 2014 at 4:45 PM, Balchandra Vaidya
    <[email protected]
    <mailto:[email protected]>> wrote:


        Hi Philippe,

        Here is the JBS ID -
        https://bugs.openjdk.java.net/browse/JDK-8065373.
        Did you see this issue only on Mac OS or did you see it on
        another
        OS/platform such as Windows?

        Thanks for reporting it.

        Regards,
        Balchandra




        On 11/19/14 03:11 PM, Philippe Mouawad wrote:
        Hi,


            JI-9016915

        Regards
        Philippe

        On Wed, Nov 19, 2014 at 4:10 PM, Philippe Mouawad
        <[email protected]
        <mailto:[email protected]>> wrote:

            Hello Rory,
            I posted a bug, waiting for mail notification.
            It seems bug appeared after Java 7 u40 as I just tested
            now with Java7 u71 and it is also broken there.
            I didn't test versions between 7u40 and 7u71.

            Regards
            Philippe

            On Wed, Nov 19, 2014 at 3:44 PM, Rory O'Donnell
            <[email protected]
            <mailto:[email protected]>> wrote:

                Hi Philippe,

                Can you log a Java Incident and send us the JI  number ?

                Rgds,Rory
                On 19/11/2014 14:36, Philippe Mouawad wrote:

                    Hello Rory,
                    For information, I submitted this question on
                    Swing-dev , I am not sure it
                    is the right list, if so hope you can help.

                    Regards
                    Philippe
                    ---------- Forwarded message ----------
                    From: Philippe Mouawad
                    <[email protected]
                    <mailto:[email protected]>>
                    Date: Wed, Nov 19, 2014 at 3:34 PM
                    Subject: JAVA8u20 and JAVA8u25 Regression in
                    Graphics2D drawing of derived
                    Fonts ?
                    To: [email protected]
                    <mailto:[email protected]>


                    Hello,
                    We had recently a report of a bug on Apache JMeter:

                        -
                    https://issues.apache.org/bugzilla/show_bug.cgi?id=57221



                    The bug only occurs on Java 8 (u20 and u25).

                    We use jCharts library.

                    I narrowed the bug and it seems to come from the
                    way derived fonts are
                    drawn:

                    Library uses:

                         public static final AffineTransform
                    VERTICAL_ROTATION =
                    AffineTransform.getRotateInstance( -Math.PI / 2 );

                    Then

                     this.affineTransform= VERTICAL_ROTATION;
                    this.font.deriveFont( this.affineTransform )

                    So I build a stupid and ugly isolated class to
                    show issue, run it on Java 7
                    display is fine , run it on Java8 result is strange.

                    package org.jCharts;

                    import java.awt.Color;
                    import java.awt.Dimension;
                    import java.awt.Font;
                    import java.awt.Graphics;
                    import java.awt.Graphics2D;
                    import java.awt.RenderingHints;
                    import java.awt.font.FontRenderContext;
                    import java.awt.font.LineMetrics;
                    import java.awt.geom.AffineTransform;
                    import java.awt.geom.GeneralPath;
                    import java.awt.geom.Rectangle2D;

                    import javax.swing.JFrame;
                    import javax.swing.JPanel;

                    public class Test extends JPanel {
                     Rectangle2D.Float rect = new
                    Rectangle2D.Float(200, 200, 220, 35);
                         // float theta = 1.1748778437843f;
                         double theta = Math.PI / 6;

                         @Override
                         protected void paintComponent(Graphics g) {
                     super.paintComponent(g);
                     Graphics2D g2 = (Graphics2D) g;
                     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                     RenderingHints.VALUE_ANTIALIAS_ON);
                     g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                     RenderingHints.VALUE_FRACTIONALMETRICS_ON);
                     g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
                     RenderingHints.VALUE_STROKE_PURE);
                     g2.setPaint(Color.blue);
                             Font font = g2.getFont().deriveFont(18f);
                     g2.setFont(font);
                     FontRenderContext frc = g2.getFontRenderContext();
                             String s = "This text should be rotated";
                             float width = (float)
                    font.getStringBounds(s, frc).getWidth();
                     LineMetrics lm = font.getLineMetrics(s, frc);
                             float height = lm.getAscent() +
                    lm.getDescent();
                             // Scale text into rect.
                             float xScale = rect.width / width;
                             float yScale = rect.height / height;
                             float scale = (xScale > yScale) ?
                    yScale : xScale;
                             // Locate string origin.
                             double x = rect.x;
                             double y = rect.y + (rect.height +
                    scale * height) / 2 - scale
                     * lm.getDescent();
                     AffineTransform at =
                    AffineTransform.getTranslateInstance(x, y);
                     at.scale(scale, scale);
                     AffineTransform rotator = new AffineTransform();
                     rotator.rotate(theta, rect.getCenterX(),
                    rect.getCenterY());
                     GeneralPath rect2 = new GeneralPath(
                     rotator.createTransformedShape(rect));
                             // Draw with no rotation.
                     g2.draw(rect);
                     g2.setPaint(Color.red);
                     g2.setFont(font.deriveFont(at));
                     g2.drawString(s, 0, 0);
                             // Rotate once.
                     g2.setPaint(Color.blue);
                     g2.draw(rect2);
                     rotator.concatenate(at);
                     g2.setFont(font.deriveFont(rotator));
                     g2.setPaint(Color.red);
                     g2.drawString(s, 0, 0);
                             // Rotate again.
                     rotator.setToIdentity();
                     rotator.rotate(2 * theta, rect.getCenterX(),
                    rect.getCenterY());
                             rect2 = new
                    GeneralPath(rotator.createTransformedShape(rect));
                     g2.setPaint(Color.blue);
                     g2.draw(rect2);
                     rotator.concatenate(at);
                     g2.setFont(font.deriveFont(rotator));
                     g2.setPaint(Color.red);
                     g2.drawString(s, 0, 0);
                             // Check scaled string bounds.
                             // this was handled by the fractional
                    metrics rendering hint
                         }

                         public static void main(String[] args) {
                             Test test = new Test();
                     test.setPreferredSize(new Dimension(800, 600));
                             JFrame f = new JFrame();
                     f.getContentPane().add(test);
                     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                     f.pack();
                     f.setVisible(true);
                         }
                    }

                    Regards
                    Philippe M.




-- Rgds,Rory O'Donnell
                Quality Engineering Manager
                Oracle EMEA , Dublin, Ireland




-- Cordialement.
            Philippe Mouawad.





-- Cordialement.
        Philippe Mouawad.






-- Cordialement.
    Philippe Mouawad.






--
Cordialement.
Philippe Mouawad.



Reply via email to