jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Schumacher <felix.schumac...@internetallee.de>
Subject Re: Fwd: JAVA8u20 and JAVA8u25 Regression in Graphics2D drawing of derived Fonts ?
Date Wed, 19 Nov 2014 22:05:36 GMT
Am 19.11.2014 um 17:58 schrieb Philippe Mouawad:
> Hi,
> I tested on windows 7 , issue is not reproduced.
> Don't have Linux to test.
>
> Maybe other member of team can do this.
Looks good on (well, I can read all text and none is mirrored).
ubuntu 14.04 and

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

and

java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.3) (7u71-2.5.3-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

Regards
  Felix
>
> Regards
>
> On Wed, Nov 19, 2014 at 4:45 PM, Balchandra Vaidya <
> balchandra.vaidya@oracle.com> 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 <
>> philippe.mouawad@gmail.com> 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 <rory.odonnell@oracle.com
>>>> 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 <philippe.mouawad@gmail.com>
>>>>> Date: Wed, Nov 19, 2014 at 3:34 PM
>>>>> Subject: JAVA8u20 and JAVA8u25 Regression in Graphics2D drawing of
>>>>> derived
>>>>> Fonts ?
>>>>> To: swing-dev@openjdk.java.net
>>>>>
>>>>>
>>>>> 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.
>>
>>
>>
>>
>


Mime
View raw message