<!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>[172504] 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/172504">172504</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2014-08-12 16:13:18 -0700 (Tue, 12 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Fonts forced to use non synthetic italics might be laid out with the incorrect baseline
https://bugs.webkit.org/show_bug.cgi?id=135403

Reviewed by Darin Adler.

Source/WebCore:

When italics is specified on a font, and the font isn't coming from the cache, we ask
the SimpleFontData to provide a non-synthetic-italic version of itself. Our current
implementation doesn't preserve whether or not the SimpleFontData includes vertical
glyphs (glyphs that are not rotated when drawn in the vertical writing mode), which
determines which baseline we use to lay out the text. By passing &quot;false&quot; to
the isTextOrientationFallback argument to SimpleFontData::create(), we preserve this
hasVerticalGlyphs flag.

Test: fast/text/international/synthesized-italic-vertical-latin-double.html

* platform/graphics/SimpleFontData.cpp:
(WebCore::SimpleFontData::nonSyntheticItalicFontData):
* testing/Internals.cpp:
(WebCore::Internals::invalidateFontCache): Add &quot;invalidateFontCache&quot; to window.internals.
* testing/Internals.h: Ditto.
* testing/Internals.idl: Ditto.

LayoutTests:

Laying out the same string twice (where there is a cache collision) should be rendered
the same as laying out similar strings (where there is no cache collision).

* fast/text/international/synthesized-italic-vertical-latin-double-expected.html: Added.
* fast/text/international/synthesized-italic-vertical-latin-double.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsSimpleFontDatacpp">trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp</a></li>
<li><a href="#trunkSourceWebCoretestingInternalscpp">trunk/Source/WebCore/testing/Internals.cpp</a></li>
<li><a href="#trunkSourceWebCoretestingInternalsh">trunk/Source/WebCore/testing/Internals.h</a></li>
<li><a href="#trunkSourceWebCoretestingInternalsidl">trunk/Source/WebCore/testing/Internals.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfasttextinternationalsynthesizeditalicverticallatindoubleexpectedhtml">trunk/LayoutTests/fast/text/international/synthesized-italic-vertical-latin-double-expected.html</a></li>
<li><a href="#trunkLayoutTestsfasttextinternationalsynthesizeditalicverticallatindoublehtml">trunk/LayoutTests/fast/text/international/synthesized-italic-vertical-latin-double.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (172503 => 172504)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-08-12 23:11:19 UTC (rev 172503)
+++ trunk/LayoutTests/ChangeLog        2014-08-12 23:13:18 UTC (rev 172504)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-08-12  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Fonts forced to use non synthetic italics might be laid out with the incorrect baseline
+        https://bugs.webkit.org/show_bug.cgi?id=135403
+
+        Reviewed by Darin Adler.
+
+        Laying out the same string twice (where there is a cache collision) should be rendered
+        the same as laying out similar strings (where there is no cache collision).
+
+        * fast/text/international/synthesized-italic-vertical-latin-double-expected.html: Added.
+        * fast/text/international/synthesized-italic-vertical-latin-double.html: Added.
+
</ins><span class="cx"> 2014-08-12  Renata Hodovan  &lt;rhodovan.u-szeged@partner.samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Make sure that begin time cannot be greater than SMILTime::indefiniteValue unintentionally.
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextinternationalsynthesizeditalicverticallatindoubleexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/international/synthesized-italic-vertical-latin-double-expected.html (0 => 172504)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/international/synthesized-italic-vertical-latin-double-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/international/synthesized-italic-vertical-latin-double-expected.html        2014-08-12 23:13:18 UTC (rev 172504)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+  &lt;meta charset=&quot;UTF-8&quot;&gt;
+  &lt;style&gt;
+    html {
+        -webkit-writing-mode: vertical-lr;
+    }
+    p {
+        font-size: 30px;
+        font-style: italic;
+    }
+  &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;script&gt;
+        if (window.internals)
+            window.internals.invalidateFontCache();
+    &lt;/script&gt;
+    &lt;p style=&quot;color: white;&quot;&gt;ABC丹&lt;/p&gt;
+    &lt;p&gt;ABC羽&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextinternationalsynthesizeditalicverticallatindoublehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/international/synthesized-italic-vertical-latin-double.html (0 => 172504)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/international/synthesized-italic-vertical-latin-double.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/international/synthesized-italic-vertical-latin-double.html        2014-08-12 23:13:18 UTC (rev 172504)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+  &lt;meta charset=&quot;UTF-8&quot;&gt;
+  &lt;style&gt;
+    html {
+        -webkit-writing-mode: vertical-lr;
+    }
+    p {
+        font-size: 30px;
+        font-style: italic;
+    }
+  &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;script&gt;
+        if (window.internals)
+            window.internals.invalidateFontCache();
+    &lt;/script&gt;
+    &lt;p style=&quot;color: white;&quot;&gt;ABC丹羽 亮介&lt;/p&gt;
+    &lt;p&gt;ABC羽&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (172503 => 172504)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-08-12 23:11:19 UTC (rev 172503)
+++ trunk/Source/WebCore/ChangeLog        2014-08-12 23:13:18 UTC (rev 172504)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2014-08-12  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Fonts forced to use non synthetic italics might be laid out with the incorrect baseline
+        https://bugs.webkit.org/show_bug.cgi?id=135403
+
+        Reviewed by Darin Adler.
+
+        When italics is specified on a font, and the font isn't coming from the cache, we ask
+        the SimpleFontData to provide a non-synthetic-italic version of itself. Our current
+        implementation doesn't preserve whether or not the SimpleFontData includes vertical
+        glyphs (glyphs that are not rotated when drawn in the vertical writing mode), which
+        determines which baseline we use to lay out the text. By passing &quot;false&quot; to
+        the isTextOrientationFallback argument to SimpleFontData::create(), we preserve this
+        hasVerticalGlyphs flag.
+
+        Test: fast/text/international/synthesized-italic-vertical-latin-double.html
+
+        * platform/graphics/SimpleFontData.cpp:
+        (WebCore::SimpleFontData::nonSyntheticItalicFontData):
+        * testing/Internals.cpp:
+        (WebCore::Internals::invalidateFontCache): Add &quot;invalidateFontCache&quot; to window.internals.
+        * testing/Internals.h: Ditto.
+        * testing/Internals.idl: Ditto.
+
</ins><span class="cx"> 2014-08-12  Peyton Randolph  &lt;prandolph@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Runtime switch for long mouse press gesture. Part of 135257 - Add long mouse press gesture.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsSimpleFontDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp (172503 => 172504)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp        2014-08-12 23:11:19 UTC (rev 172503)
+++ trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp        2014-08-12 23:13:18 UTC (rev 172504)
</span><span class="lines">@@ -242,7 +242,7 @@
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">         nonSyntheticItalicFontPlatformData.m_syntheticOblique = false;
</span><span class="cx"> #endif
</span><del>-        m_derivedFontData-&gt;nonSyntheticItalic = create(nonSyntheticItalicFontPlatformData, isCustomFont(), false, true);
</del><ins>+        m_derivedFontData-&gt;nonSyntheticItalic = create(nonSyntheticItalicFontPlatformData, isCustomFont());
</ins><span class="cx">     }
</span><span class="cx">     return m_derivedFontData-&gt;nonSyntheticItalic;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.cpp (172503 => 172504)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.cpp        2014-08-12 23:11:19 UTC (rev 172503)
+++ trunk/Source/WebCore/testing/Internals.cpp        2014-08-12 23:13:18 UTC (rev 172504)
</span><span class="lines">@@ -47,6 +47,7 @@
</span><span class="cx"> #include &quot;Element.h&quot;
</span><span class="cx"> #include &quot;EventHandler.h&quot;
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><ins>+#include &quot;FontCache.h&quot;
</ins><span class="cx"> #include &quot;FormController.h&quot;
</span><span class="cx"> #include &quot;FrameLoader.h&quot;
</span><span class="cx"> #include &quot;FrameView.h&quot;
</span><span class="lines">@@ -818,6 +819,11 @@
</span><span class="cx">     document-&gt;frame()-&gt;editor().setMarkedTextMatchesAreHighlighted(flag);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void Internals::invalidateFontCache()
+{
+    fontCache().invalidate();
+}
+
</ins><span class="cx"> void Internals::setScrollViewPosition(long x, long y, ExceptionCode&amp; ec)
</span><span class="cx"> {
</span><span class="cx">     Document* document = contextDocument();
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.h (172503 => 172504)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.h        2014-08-12 23:11:19 UTC (rev 172503)
+++ trunk/Source/WebCore/testing/Internals.h        2014-08-12 23:13:18 UTC (rev 172504)
</span><span class="lines">@@ -134,6 +134,8 @@
</span><span class="cx">     void addTextMatchMarker(const Range*, bool isActive);
</span><span class="cx">     void setMarkedTextMatchesAreHighlighted(bool, ExceptionCode&amp;);
</span><span class="cx"> 
</span><ins>+    void invalidateFontCache();
+
</ins><span class="cx">     void setScrollViewPosition(long x, long y, ExceptionCode&amp;);
</span><span class="cx">     void setPagination(const String&amp; mode, int gap, ExceptionCode&amp; ec) { setPagination(mode, gap, 0, ec); }
</span><span class="cx">     void setPagination(const String&amp; mode, int gap, int pageLength, ExceptionCode&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalsidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.idl (172503 => 172504)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.idl        2014-08-12 23:11:19 UTC (rev 172503)
+++ trunk/Source/WebCore/testing/Internals.idl        2014-08-12 23:13:18 UTC (rev 172504)
</span><span class="lines">@@ -84,6 +84,8 @@
</span><span class="cx">     void addTextMatchMarker(Range range, boolean isActive);
</span><span class="cx">     [RaisesException] void setMarkedTextMatchesAreHighlighted(boolean flag);
</span><span class="cx"> 
</span><ins>+    void invalidateFontCache();
+
</ins><span class="cx">     [RaisesException] void setScrollViewPosition(long x, long y);
</span><span class="cx"> 
</span><span class="cx">     [RaisesException] void setPagination(DOMString mode, long gap, optional long pageLength);
</span></span></pre>
</div>
</div>

</body>
</html>