<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Courier New \;color\:windowtext";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
tt
        {mso-style-priority:99;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;
        mso-fareast-language:EN-US;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle24
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle25
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle26
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle27
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle28
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle29
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1139229305;
        mso-list-type:hybrid;
        mso-list-template-ids:-1922389546 557364022 134807555 134807557 134807553 134807555 134807557 134807553 134807555 134807557;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor="white" lang="EN-GB" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">The result with the latest OpenJDK 12 EA (25) looks the same as OpenJDK 11:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D;mso-fareast-language:EN-GB"><img width="400" height="300" id="_x0000_i1030" src="cid:image001.jpg@01D4A2CA.46F26050"></span><span style="color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks for your help so far.  Any more on your return would be gratefully received!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">--<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Jake<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="color:windowtext;mso-fareast-language:EN-GB">From:</span></b><span lang="EN-US" style="color:windowtext;mso-fareast-language:EN-GB"> Philip Race [mailto:philip.race@oracle.com]
<br>
<b>Sent:</b> 02 January 2019 17:44<br>
<b>To:</b> Tredinnick, Jacob <jacob_tredinnick@mentor.com><br>
<b>Cc:</b> 2d-dev@openjdk.java.net<br>
<b>Subject:</b> Re: [OpenJDK 2D-Dev] FontMetrics differ between OracleJDK 8 and OpenJDK 11<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am on vacation for (another) week but it is possible that what<br>
you are describing is a bug whereby a transformation that is in effect<br>
was not inverted before returning metrics to the application.<br>
<a href="https://bugs.openjdk.java.net/browse/JDK-8139178">https://bugs.openjdk.java.net/browse/JDK-8139178</a><br>
<br>
This notably affected rotations but could be in play here too although<br>
I haven't tested this. It was fixed very recently so you will need to try a<br>
JDK 12 EA build here : <a href="https://jdk.java.net/12/">https://jdk.java.net/12/</a><br>
<br>
-phil.<br>
<br>
On 1/2/19, 8:44 AM, Tredinnick, Jacob wrote: <span style="font-size:12.0pt;mso-fareast-language:EN-GB">
<o:p></o:p></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="color:#1F497D">Philip,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Default scaling options are “Medium - 125%” on Windows 7.  You are correct this does affect things but read on…</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Basically, we are using these FontMetrics values to determine a scale transformation to apply to a size 12 font.  HDPI might be playing in somewhere here, but the problem we know about is with our use of FontMetrics.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">I wrote some code to demonstrate our problem (source at the end of this message).  The application shows:</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">An example string drawn using java.awt.Graphics#drawString(java.lang.String, int, int) with a “normal” font object: Calibri plain, size 12</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The same string drawn based on a Font that is “scaled” (nothing to do with HDPI) using a simplified version of what our application does with the FontMetrics object (we also have zoom levels and users
 may specify their font sizes in various ways)</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">2 rectangles with sizes hard-coded to wrap these texts when run on my system with OracleJDK 8 (what our applications currently use), for use when comparing the screenshots</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">For <b>OracleJDK 8</b>:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D;mso-fareast-language:EN-GB"><img border="0" width="320" height="240" id="Picture_x0020_1" src="cid:image003.jpg@01D4A2CA.46F26050"></span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The “normal” text is at the top at the “scaled” text at the bottom</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The application window is 300x400 as in the code</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">For <b>OpenJDK 8</b>:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D;mso-fareast-language:EN-GB"><img border="0" width="320" height="240" id="_x0000_i1026" src="cid:image005.jpg@01D4A2CA.46F26050"></span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The “scaled” text is much larger, obviously because java.awt.FontMetrics#getMaxAscent() returns a significantly smaller value than it used to</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The application window is the same size as for OracleJDK 8</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">For <b>OracleJDK 9 & 10</b>:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D;mso-fareast-language:EN-GB"><img border="0" width="400" height="300" id="Picture_x0020_3" src="cid:image007.jpg@01D4A2CA.46F26050"></span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The “normal” text is now smaller than the rectangle</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The “scaled” text is smaller than with OpenJDK 8 but larger than the rectangle</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The application window is now 575x400 suggesting that it has been scaled according to my Windows preferences.</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The rectangles both remain the same size with respect to the application window</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">For <b>OpenJDK 11</b>:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D;mso-fareast-language:EN-GB"><img border="0" width="400" height="300" id="Picture_x0020_4" src="cid:image009.jpg@01D4A2CA.46F26050"></span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The application window and rectangles as scaled as for OracleJDK 9 & 10</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The “normal” text looks the same as with OracleJDK 9 & 10</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The “scaled” text is much larger again due to the FontMetrics change</span><o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-18.0pt;mso-list:l0 level1 lfo2"><![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">       
</span></span></span><![endif]><span style="color:#1F497D">The application window is the same size as for OracleJDK 9 & 10</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">I can do some more work e.g. switch my windows scaling setting to 100% or trying our application against JDK 9 & 10, but I have some questions for now if I may:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Is it wrong of our application code to depend on FontMetrics values remaining consistent between Java versions or even just between different systems?</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">The FontMetrics changes are affecting our calculation for this font scaling and also a number of other places.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Any advice on how we can work around this to make our text appear roughly the same as it used to  (a few pixel diffs on glyphs and character spacing are OK)?</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">So far we have tried applying corrections based on what the FontMetrics class used to return in Java 8.  We have some promising results but I suspect that there must be a better way…</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Is there any prospect of the FontMetrics values being “corrected” in OpenJDK 11?</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">I think I know what the answer to that will be
</span><span style="font-family:Wingdings;color:#1F497D">J</span><span style="color:#1F497D">   But can you explain why for the same font the metrics can be so significantly different between T2K and FreeType?</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Example code:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New ;color:windowtext",serif">package demo;<br>
<br>
import java.awt.*;<br>
import java.awt.geom.AffineTransform;<br>
<br>
public class FontScaleProblemDemo extends Frame {<br>
<br>
    private static final Font <i>CALIBRI_PLAIN_12 </i>= new Font("Calibri", Font.<i>PLAIN</i>, 12);<br>
    private static final FontMetrics <i>CALIBRI_PLAIN_12_METRICS </i>= Toolkit.<i>getDefaultToolkit</i>().getFontMetrics(<i>CALIBRI_PLAIN_12</i>);<br>
    private static final String <i>EXAMPLE_STRING </i>= "The quick brown fox jumps over the lazy dog";<br>
<br>
    // application-specific height setting<br>
    private static final double <i>HEIGHT </i>= 15;<br>
<br>
    private FontScaleProblemDemo() {<br>
        super("Font problem - " + System.<i>getProperty</i>("java.version"));<br>
    }<br>
<br>
    @Override<br>
<br>
    public void paint(Graphics g) {<br>
        // rectangles are hard-coded to neatly surround the strings drawn in OracleJDK 8<br>
        g.setColor(Color.<i>BLACK</i>);<br>
       drawRectangles(g);<br>
<br>
        // just draw the string with the raw size 12 font inside the first rectangle<br>
        drawStringSimple(g);<br>
<br>
        // draw the string scaled to some application-specific size<br>
        // this calculation is based on the font metrics getMaxAscent which differs in OpenJDK 8<br>
        drawStringScaled(g);<br>
    }<br>
<br>
    private void drawRectangles(Graphics g) {<br>
        g.drawRect(48, 90, 241, 13);  // surrounds the simple example in OracleJDK 8<br>
        g.drawRect(48, 187, 290, 17); // surrounds the scaled example in OracleJDK 8<br>
    }<br>
<br>
    private void drawStringSimple(Graphics g) {<br>
        g.setFont(<i>CALIBRI_PLAIN_12</i>);<br>
        g.drawString(<i>EXAMPLE_STRING</i>, 50, 100);<br>
    }<br>
<br>
    private void drawStringScaled(Graphics g) {<br>
<br>
        // in reality the scaling calculation in our app is not this simple (e.g. a transform will be applied for zoom level etc)<br>
        // but it basically depends on the font metrics to determine the font to be applied on the Graphics2D before drawing the string<br>
        double scale = <i>HEIGHT </i>/ <i>CALIBRI_PLAIN_12_METRICS</i>.getMaxAscent();<br>
        AffineTransform at = AffineTransform.<i>getScaleInstance</i>(scale, scale);<br>
        Font font = <i>CALIBRI_PLAIN_12</i>.deriveFont(at);<br>
<br>
        g.setFont(font);<br>
        g.drawString(<i>EXAMPLE_STRING</i>, 50, 200);<br>
    }<br>
<br>
    public static void main(String[] args) {<br>
        FontScaleProblemDemo problemDemo = new FontScaleProblemDemo();<br>
        problemDemo.setSize(new Dimension(400, 300));<br>
        problemDemo.setVisible(true);<br>
    }<br>
}</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">--</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Jake</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="color:windowtext;mso-fareast-language:EN-GB">From:</span></b><span lang="EN-US" style="color:windowtext;mso-fareast-language:EN-GB"> Philip Race [<a href="mailto:philip.race@oracle.com">mailto:philip.race@oracle.com</a>]
<br>
<b>Sent:</b> 31 December 2018 18:23<br>
<b>To:</b> Tredinnick, Jacob <a href="mailto:jacob_tredinnick@mentor.com"><jacob_tredinnick@mentor.com></a><br>
<b>Cc:</b> <a href="mailto:2d-dev@openjdk.java.net">2d-dev@openjdk.java.net</a><br>
<b>Subject:</b> Re: [OpenJDK 2D-Dev] FontMetrics differ between OracleJDK 8 and OpenJDK 11</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><br>
<br>
On 12/31/18, 3:29 AM, Tredinnick, Jacob wrote: <o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">> This is Windows ? What is your Windows desktop DPI setting ?<br>
> If its greater than 100% (aka 96 dpi) you will see a difference in JDK 9+<o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">This particular test was done on my laptop on Windows 7 with default scaling options and a 1920x1080 (maximum) screen resolution.</span><o:p></o:p></p>
</blockquote>
<p class="MsoNormal"><span style="font-size:12.0pt"><br>
"default scaling options" can be > 100% so that  is not answering the question.<br>
<br>
<br>
<br>
</span><o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="color:#1F497D">I don’t believe that it is due to HDPI scaling as the rectangle graphic would also have been affected?</span><o:p></o:p></p>
</blockquote>
<p class="MsoNormal"><span style="font-size:12.0pt"><br>
Perhaps. It depends how you drew it.<br>
<br>
<br>
<br>
</span><o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><br>
> because of hidpi .. have you tried running on Oracle JDK 9 or JDK 10 ?<br>
> If you see similar there then you can rule out t2k->freetype.<br>
<span style="color:#1F497D">We haven’t yet tried this test on OracleJDK 9 or 10 but we will look into this.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">We will also check the behaviour with OpenJDK 8 vs OracleJDK 8 as I believe we will see the same problem there.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">From our debugging it is fairly clear that change in rendering comes from the different font metrics coming from the removal of T2K.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">We will work this week on some sample code demonstrating the problem…</span><o:p></o:p></p>
</blockquote>
<p class="MsoNormal"><span style="font-size:12.0pt"><br>
Ok but different font metrics don't make the glyph images 30% bigger ..<br>
which is how your image looks.<br>
Maybe you are using that somehow to determine the font size to use in<br>
a way that I can't divine.<br>
<br>
-phil.<br>
<br>
<br>
</span><o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="color:windowtext;mso-fareast-language:EN-GB">From:</span></b><span lang="EN-US" style="color:windowtext;mso-fareast-language:EN-GB"> Philip Race [<a href="mailto:philip.race@oracle.com">mailto:philip.race@oracle.com</a>]
<br>
<b>Sent:</b> 30 December 2018 22:41<br>
<b>To:</b> Tredinnick, Jacob <a href="mailto:jacob_tredinnick@mentor.com"><jacob_tredinnick@mentor.com></a><br>
<b>Cc:</b> <a href="mailto:2d-dev@openjdk.java.net">2d-dev@openjdk.java.net</a><br>
<b>Subject:</b> Re: [OpenJDK 2D-Dev] FontMetrics differ between OracleJDK 8 and OpenJDK 11</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">This is Windows ? What is your Windows desktop DPI setting ?<br>
If its greater than 100% (aka 96 dpi) you will see a difference in JDK 9+<br>
because of hidpi .. have you tried running on Oracle JDK 9 or JDK 10 ?<br>
If you see similar there then you can rule out t2k->freetype.<br>
<br>
-phil.<br>
<br>
On 12/30/18, 4:43 AM, Tredinnick, Jacob wrote: <o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="color:#1F497D">Thank you Philip!</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">(Someone else in our team had submitted the bug report before going on vacation & I didn’t realize that we couldn’t search based on the original ID).</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Looking at your comment on the bug, you are seeing differences of only a pixel, but in our application we are getting very large differences in the size of text.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">For example here is a “diff” that one of our tests generated for the Calibri “text object” in Java 8:
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D;mso-fareast-language:EN-GB"><img border="0" width="514" height="52" id="Picture_x0020_2" src="cid:image011.jpg@01D4A2CA.46F26050"></span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">The blue text is from a golden reference generated with Java 8 and the red text is from the test running in Java 11.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">The rectangle is just a rectangle graphic which remains unchanged between Java versions.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">(I hope that the image in this mail makes it through to the mail list…)</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">I believe that the calculation of the bounding box for the text is based on the result of FontMetrics.getMaxAscent() and other FontMetrics methods, so the difference that we see is very significant indeed.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Are you saying that we should not be relying on these font metrics for scaling of text in our applications?</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Unfortunately I cannot share our application code that results in these large differences, but we will work next week on making an example that we can share here...</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">--</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">Jake</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="color:windowtext;mso-fareast-language:EN-GB">From:</span></b><span lang="EN-US" style="color:windowtext;mso-fareast-language:EN-GB"> Philip Race [<a href="mailto:philip.race@oracle.com">mailto:philip.race@oracle.com</a>]
<br>
<b>Sent:</b> 29 December 2018 17:56<br>
<b>To:</b> Tredinnick, Jacob <a href="mailto:jacob_tredinnick@mentor.com"><jacob_tredinnick@mentor.com></a><br>
<b>Cc:</b> <a href="mailto:2d-dev@openjdk.java.net">2d-dev@openjdk.java.net</a><br>
<b>Subject:</b> Re: [OpenJDK 2D-Dev] FontMetrics differ between OracleJDK 8 and OpenJDK 11</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">You can't find your report since it was mapped into this public report :<br>
<tt><span style="font-size:10.0pt"><a href="https://bugs.openjdk.java.net/browse/JDK-8215290">https://bugs.openjdk.java.net/browse/JDK-8215290</a></span></tt><br>
<br>
You should have received an email to that effect.<br>
<br>
-phil.<br>
<br>
On 12/29/18, 7:50 AM, Tredinnick, Jacob wrote: <o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">Hello,<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">My team is currently working on migrating some of our (mostly Desktop & Swing-based) applications from OracleJDK 8 to OpenJDK 11 and we have discovered that some fonts in our application are getting drawn significantly differently e.g.
 significantly larger, differences with spaces between characters.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">When debugging, we found that the FontMetrics for the Font obtained as follows:<o:p></o:p></p>
<p class="MsoNormal">FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(font);<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Returns significantly different values:<o:p></o:p></p>
<p class="MsoNormal">For example a plain, size 12 Calibri font:<o:p></o:p></p>
<p class="MsoNormal">In OracleJDK 8 metrics.getMaxAscent() returns 11, while in OracleJDK 11 it returns 9.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">I understand that the proprietary “T2K” font engine was replaced by “FreeType” in OpenJDK but I’m surprised at the very noticeable differences that we now see in some of our text objects.<o:p></o:p></p>
<p class="MsoNormal">Is it expected that FontMetrics would be so significantly different between OracleJDK 8 and OpenJDK 11?<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Note: I can share the code that generates the font metrics as well as a file describing all the diffs for fonts on my laptop if needed.<o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal">Note also:<o:p></o:p></p>
<p class="MsoNormal">We did attempt to submit a bug for this behaviour via <a href="https://bugreport.java.com/bugreport/">
<span style="color:windowtext;text-decoration:none">https://bugreport.java.com/bugreport/</span></a><o:p></o:p></p>
<p class="MsoNormal">But when we search for our bug ID 9058505 there are no results, presumably meaning that no-one has accepted this as a bug so far.<o:p></o:p></p>
<p class="MsoNormal">I’m not sure if anyone here is able to find out what happened to our report?<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Thanks<o:p></o:p></p>
<p class="MsoNormal">--<o:p></o:p></p>
<p class="MsoNormal">Jake<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</div>
</body>
</html>