<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[191378] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/191378">191378</a></dd>
<dt>Author</dt> <dd>fred.wang@free.fr</dd>
<dt>Date</dt> <dd>2015-10-21 00:05:21 -0700 (Wed, 21 Oct 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[FreeType] Add support for the USE_TYPO_METRICS flag
https://bugs.webkit.org/show_bug.cgi?id=150340

Reviewed by Martin Robinson.

Source/WebCore:

Test: fonts/use-typo-metrics-1.html

Make the FreeType backend use the typo metrics when the OS/2 USE_TYPO_METRICS flag is set.
Similar work should be done for other backends, see bug 131839.

* platform/graphics/freetype/SimpleFontDataFreeType.cpp:
(WebCore::Font::platformInit): Verify whether the OS/2 USE_TYPO_METRICS flag is set and use the typo metrics if that's the case.

LayoutTests:

Add a test to verify that the line height of a font is calculated from the typo metrics when the OS/2 USE_TYPO_METRICS flag is set. Currently, the test only passes with the FreeType backend.

* fonts/lineheight5000-typolineheight2300.woff: Added.
* fonts/use-typo-metrics-1-expected.html: Added.
* fonts/use-typo-metrics-1.html: Added.
* platform/mac/TestExpectations: Mark as failing.
* platform/win/TestExpectations: Mark as failing.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformwinTestExpectations">trunk/LayoutTests/platform/win/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfreetypeSimpleFontDataFreeTypecpp">trunk/Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfontslineheight5000typolineheight2300woff">trunk/LayoutTests/fonts/lineheight5000-typolineheight2300.woff</a></li>
<li><a href="#trunkLayoutTestsfontsusetypometrics1expectedhtml">trunk/LayoutTests/fonts/use-typo-metrics-1-expected.html</a></li>
<li><a href="#trunkLayoutTestsfontsusetypometrics1html">trunk/LayoutTests/fonts/use-typo-metrics-1.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (191377 => 191378)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-10-21 06:41:13 UTC (rev 191377)
+++ trunk/LayoutTests/ChangeLog        2015-10-21 07:05:21 UTC (rev 191378)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-10-21  Frederic Wang  &lt;fred.wang@free.fr&gt;
+
+        [FreeType] Add support for the USE_TYPO_METRICS flag
+        https://bugs.webkit.org/show_bug.cgi?id=150340
+
+        Reviewed by Martin Robinson.
+
+        Add a test to verify that the line height of a font is calculated from the typo metrics when the OS/2 USE_TYPO_METRICS flag is set. Currently, the test only passes with the FreeType backend.
+
+        * fonts/lineheight5000-typolineheight2300.woff: Added.
+        * fonts/use-typo-metrics-1-expected.html: Added.
+        * fonts/use-typo-metrics-1.html: Added.
+        * platform/mac/TestExpectations: Mark as failing.
+        * platform/win/TestExpectations: Mark as failing.
+
</ins><span class="cx"> 2015-10-20  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Marking http/tests/xmlhttprequest/timeout/xmlhttprequest-timeout-simple.html as flaky on Yosemite
</span></span></pre></div>
<a id="trunkLayoutTestsfontslineheight5000typolineheight2300woff"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fonts/lineheight5000-typolineheight2300.woff (0 => 191378)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fonts/lineheight5000-typolineheight2300.woff                                (rev 0)
+++ trunk/LayoutTests/fonts/lineheight5000-typolineheight2300.woff        2015-10-21 07:05:21 UTC (rev 191378)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+wOFFOTTOT
+CFF \xF4\xDF(\x89\xC9 6FFTM\xD4v\xC5\x86OS/2\xF0D`!\xD5'cmap4EJ\x93\xA9head|06\x8Dh\xB7hhea\xAC$+\xAD+\xAFhmtx\xC8
+
+\xD0maxp\xD4Pname\xDC]\xE4\xE7}\xAB\xE0post&lt; \xFF\x863x\x9Ccd`aa`ddTO\xCB\xCF+\xD1\xCD\xC9\xCCK\xCDH\xCDL\xCF(1500\xD0-\xA9,\xC8G002102\xE8\xFD\xE0g\xF8!\xCD\xF8C\x86\xE9\x87,\xF3        \x96\xC6\xEE\xDF1\xBFj~na\x95ax\xC8/\xC3\xC0  \xC3\xF0LP\x86\x81O\x86QJ\x88\x81\xA4G\x8D\xC1\x87\xA1\xC89\xBF\xA0\xB2d\x96\x82F\xB2\xA6\x82\x91\x81\xA1\xA9\x82obI\x86\xAF\x8F\x82cqq~rfbIf~q.!ҽ@\xC0\xC8`\xC0\xC0\xCCȨ\xA4\xAC׽\xF7\x87\xEB^ƽ{n\xD9˼W\xEC\x97ď\x95\xFF$\xD8\xF6\xFE)\xFD\xE1\xFAs\xCBWv&gt;\xBE\xDF1,\xBFj~\xD5\xFC\xABa\xE7\xFBU#\xD2-Z&gt;\xFF\xE7\x96n\xB6n.\x8Elc[x\x9Cc```d\x82Kvo\xB8\xC1\xB4\xB3\xD0^+?\x8E\xD1x\x9Cc`a~\xC18\x81\x81\x95\x81\x81\xA9\x8BiC\x84f|\xC0`\xC8\xC8e`\xE5d\x80Ft\xD0\xC0\xA0\xC0\xE0Ϭ\xF0߂U\x84\xF3\xE7\x84fd:\xFD
+-x\x9Cc```f\x80`Fp\xF2\xC1|+ \xCD\xA4\x98\xFC\xFF\xFF\xF2\xC1\xF4\xFF\x87\xFF7C\xD5#\x82\x83\x92GL\xA4)x        9x\x9Cc`d``⠖7\xF1\xFC6_\xB8\x99_E.9 \xEDE\xD0\xFF-\x98_0+\xB9 L Q3\xA2
+\x89x\x9Cc`d`\xE0&lt;\xC2y\x84\x81\x81\xF9\x98dd@LX\xE2u\xE8\xE8Px\x9CŒ?N\xC30ş\xD3? \xB0\xB2\x99\x81\xAAJ\xE5\xA4\xCAҭT\xEAP%k\xF7\xAAJ\x93HU\%^rF\x8E\x828\x823p+^ C\x87J\x8D\x95\xF8g\xE7\xBD\xEF\xB3?\xC05^!\xD0=\x88 \x8C\xF0\xEE\xD8ýxt\xDC\xC3R|:\xEEc\xE4e\x8E\xB8\xF5\xDE1\xEA\xDDP)\xFAW\xAD\xAD\xABe\xC1\xE8\x95cO\xF8r\xDCóH\xF7{w\x8E\x90ދ\xE3!\xE7?\xB0\x84\xC6+\xA3Ȑ\xC3@b\x8C&amp;\xECC(\x88H        \xB6\xFC\x93\xB3\x8F9Z\xA0f\xD3Tv\xBE \x97\xC0R\x9B\xAA\xC8r#ǻ\x89 U\xC9dk\xF2$\x96\x8B\xBAֻbk
+M\xD9ު+|\xE8,\x912n\xFA\x9B=bζ\xF9\xE4\x86+\xD3\xFF\xAAB̬
+{]\xFFP\x94i\x9E\xB6\x99#\xA5\x94o\x9A\xA3\xFE\x9B
+g\x8A\xBA3\xA4:!\xCB\xCAm\xAD\xED+\xFAS[\xC4)\xDDs\xBE\xE7\xDCz1\xE0\xC8\xE7\xB7u\xFDV,\xCAJWY*é\x92syZ\x91( f~\xA0\xFC\xF6\xE4.tL\x9A+ޭ\xEEFIkl\xBB-c\x93V5o\x91T*\x982\x88\xBC\xCC:\xBF{\xBFfx\x9Cc`f\x83\xFF\xCD F@\x8A\x91+(U\xB9
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfontsusetypometrics1expectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fonts/use-typo-metrics-1-expected.html (0 => 191378)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fonts/use-typo-metrics-1-expected.html                                (rev 0)
+++ trunk/LayoutTests/fonts/use-typo-metrics-1-expected.html        2015-10-21 07:05:21 UTC (rev 191378)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;meta charset=&quot;utf-8&quot;/&gt;
+&lt;title&gt;Open Font Format: USE_TYPO_METRICS (reference)&lt;/title&gt;
+&lt;style&gt;
+  #green {
+     position: absolute;
+     background: green;
+     left: 10px;
+     width: 230px;
+     height: 230px;
+  }
+&lt;/style&gt;
+&lt;body&gt;
+  &lt;p&gt;Test passes if there is a green square and no red.&lt;/p&gt;
+
+  &lt;div&gt;
+    &lt;div id=&quot;green&quot;&gt;&lt;/div&gt;
+  &lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/fonts/use-typo-metrics-1-expected.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsfontsusetypometrics1html"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fonts/use-typo-metrics-1.html (0 => 191378)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fonts/use-typo-metrics-1.html                                (rev 0)
+++ trunk/LayoutTests/fonts/use-typo-metrics-1.html        2015-10-21 07:05:21 UTC (rev 191378)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;meta charset=&quot;utf-8&quot;/&gt;
+&lt;title&gt;Open Font Format: USE_TYPO_METRICS&lt;/title&gt;
+&lt;link rel=&quot;help&quot; href=&quot;http://www.mathml-association.org/MathMLinHTML5/S2.html#SS2.SSS1&quot;/&gt;
+&lt;link rel=&quot;match&quot; href=&quot;use-typo-metrics-1-ref.html&quot;/&gt;
+&lt;style&gt;
+  @font-face {
+    font-family: TestFont;
+    src: url(&quot;lineheight5000-typolineheight2300.woff&quot;);
+  }
+  .green {
+     position: absolute;
+     background: green;
+     width: 115px;
+  }
+  .red {
+     position: absolute;
+     background: red;
+     width: 115px;
+  }
+  .forceHeight {
+    height: 230px;
+  }
+  .leftSide {
+    left: 10px;
+  }
+  .rightSide {
+    left: 125px;
+  }
+  span {
+    /* em=1000, lineHeight=5000, typoLineHeight=2300 and font-size=100px
+       implies typoLineHeightPx = 230px &lt; 500px = lineHeightPx */
+     font-family: TestFont;
+     font-size: 100px;
+     color: transparent;
+  }
+&lt;/style&gt;
+&lt;body&gt;
+  &lt;p&gt;Test passes if there is a green square and no red.&lt;/p&gt;
+
+  &lt;div&gt;
+    &lt;!-- Left side verifies that typoLineHeightPx &lt;= 230px --&gt;
+    &lt;div class=&quot;leftSide red&quot;&gt;&lt;span&gt;O&lt;/span&gt;&lt;/div&gt;
+    &lt;div class=&quot;leftSide green forceHeight&quot;&gt;&lt;/div&gt;
+
+    &lt;!-- Right side verifies that typoLineHeightPx =&gt; 230px --&gt;
+    &lt;div class=&quot;rightSide red forceHeight&quot;&gt;&lt;/div&gt;
+    &lt;div class=&quot;rightSide green&quot;&gt;&lt;span&gt;O&lt;/span&gt;&lt;/div&gt;
+  &lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/fonts/use-typo-metrics-1.html
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (191377 => 191378)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2015-10-21 06:41:13 UTC (rev 191377)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2015-10-21 07:05:21 UTC (rev 191378)
</span><span class="lines">@@ -1348,3 +1348,6 @@
</span><span class="cx"> 
</span><span class="cx"> # Imported Blink tests which have not been investigated.
</span><span class="cx"> imported/blink/compositing/video/video-controls-layer-creation-squashing.html [ Pass ImageOnlyFailure ]
</span><ins>+
+# USE_TYPO_METRICS is not implemented on mac.
+webkit.org/b/131839 fonts/use-typo-metrics-1.html [ Failure ]
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformwinTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/win/TestExpectations (191377 => 191378)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/TestExpectations        2015-10-21 06:41:13 UTC (rev 191377)
+++ trunk/LayoutTests/platform/win/TestExpectations        2015-10-21 07:05:21 UTC (rev 191378)
</span><span class="lines">@@ -3263,4 +3263,7 @@
</span><span class="cx"> webkit.org/b/150040 js/dom/dfg-custom-getter.html [ Failure ]
</span><span class="cx"> 
</span><span class="cx"> # The following tests are not relevant on the Windows platform:
</span><del>-fast/forms/hidpi-textfield-background-bleeding.html [ Skip ]
</del><span class="cx">\ No newline at end of file
</span><ins>+fast/forms/hidpi-textfield-background-bleeding.html [ Skip ]
+
+# USE_TYPO_METRICS is not implemented on the Windows platform
+webkit.org/b/131839 fonts/use-typo-metrics-1.html [ Failure ]
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (191377 => 191378)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-10-21 06:41:13 UTC (rev 191377)
+++ trunk/Source/WebCore/ChangeLog        2015-10-21 07:05:21 UTC (rev 191378)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-10-21  Frederic Wang  &lt;fred.wang@free.fr&gt;
+
+        [FreeType] Add support for the USE_TYPO_METRICS flag
+        https://bugs.webkit.org/show_bug.cgi?id=150340
+
+        Reviewed by Martin Robinson.
+
+        Test: fonts/use-typo-metrics-1.html
+
+        Make the FreeType backend use the typo metrics when the OS/2 USE_TYPO_METRICS flag is set.
+        Similar work should be done for other backends, see bug 131839.
+
+        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
+        (WebCore::Font::platformInit): Verify whether the OS/2 USE_TYPO_METRICS flag is set and use the typo metrics if that's the case.
+
</ins><span class="cx"> 2015-10-20  Hunseop Jeong  &lt;hs85.jeong@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Replace 0 and NULL with nullptr in WebCore/loader.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfreetypeSimpleFontDataFreeTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp (191377 => 191378)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp        2015-10-21 06:41:13 UTC (rev 191377)
+++ trunk/Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp        2015-10-21 07:05:21 UTC (rev 191378)
</span><span class="lines">@@ -65,6 +65,21 @@
</span><span class="cx">     float capHeight = narrowPrecisionToFloat(fontExtents.height);
</span><span class="cx">     float lineGap = narrowPrecisionToFloat(fontExtents.height - fontExtents.ascent - fontExtents.descent);
</span><span class="cx"> 
</span><ins>+    // If the USE_TYPO_METRICS flag is set in the OS/2 table then we use typo metrics instead.
+    FT_Face freeTypeFace = cairo_ft_scaled_font_lock_face(m_platformData.scaledFont());
+    if (TT_OS2* OS2Table = static_cast&lt;TT_OS2*&gt;(FT_Get_Sfnt_Table(freeTypeFace, ft_sfnt_os2))) {
+        const FT_Short kUseTypoMetricsMask = 1 &lt;&lt; 7;
+        if (OS2Table-&gt;fsSelection &amp; kUseTypoMetricsMask) {
+            // FT_Size_Metrics::y_scale is in 16.16 fixed point format.
+            // Its (fractional) value is a factor that converts vertical metrics from design units to units of 1/64 pixels.
+            double yscale = (freeTypeFace-&gt;size-&gt;metrics.y_scale / 65536.0) / 64.0;
+            ascent = narrowPrecisionToFloat(yscale * OS2Table-&gt;sTypoAscender);
+            descent = -narrowPrecisionToFloat(yscale * OS2Table-&gt;sTypoDescender);
+            lineGap = narrowPrecisionToFloat(yscale * OS2Table-&gt;sTypoLineGap);
+        }
+    }
+    cairo_ft_scaled_font_unlock_face(m_platformData.scaledFont());
+
</ins><span class="cx">     m_fontMetrics.setAscent(ascent);
</span><span class="cx">     m_fontMetrics.setDescent(descent);
</span><span class="cx">     m_fontMetrics.setCapHeight(capHeight);
</span></span></pre>
</div>
</div>

</body>
</html>