<!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>[169607] 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/169607">169607</a></dd>
<dt>Author</dt> <dd>fred.wang@free.fr</dd>
<dt>Date</dt> <dd>2014-06-04 23:35:04 -0700 (Wed, 04 Jun 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>MathML operators not stretched horizontally
https://bugs.webkit.org/show_bug.cgi?id=72828
Reviewed by Chris Fleizach.
Source/WebCore:
This patch adds basic horizontal stretching rules for operators inside
an <munder>, <mover> or <munderover> elements. The stretchy operators
in such an element stretch to cover the size of the non-stretchy
operators. This only works when fonts that have an OpenType MATH table
are used.
Tests: mathml/opentype/horizontal-LatinModern.html
mathml/opentype/opentype-stretchy-horizontal.html
mathml/opentype/horizontal-LatinModern-munderover.html
* rendering/mathml/RenderMathMLOperator.cpp:
(WebCore::MathMLOperatorDictionary::ExtractKeyHorizontal): We add an ordered list of operators that have horizontal stretch direction.
(WebCore::RenderMathMLOperator::RenderMathMLOperator): init m_Vertical
(WebCore::RenderMathMLOperator::SetOperatorProperties): set m_Vertical by checking whether the operator is in the horizontalOperators list.
(WebCore::RenderMathMLOperator::stretchTo): We do not stretch vertically
if the operator has horizontal direction.
We also add a new version stretchTo(LayoutUnit width) for horizontal stretching only.
(WebCore::RenderMathMLOperator::computePreferredLogicalWidths): Handle horizontal stretching: the maximumGlyphWidth is the maximum of
the base size or of the stretch size.
(WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator): Add an ASSERT to ensure that this function is only called for vertical stretching.
(WebCore::RenderMathMLOperator::findStretchyData): Add an ASSERT to ensure that this function is not called to get the maximum width of a horizontal stretchy operator.
We take into account m_isVertical when calling getMathVariants or computing sizes.
There is not any Unicode-only construction for horizontal stretching, so a MATH table is required for horizontal stretching.
(WebCore::RenderMathMLOperator::updateStyle): Ignore some code paths specific to vertical stretching and take into account the m_Vertical parameters.
For horizontal stretching, the m_stretch*Baseline parameters are now updated to match the metrics of the size variant or of the maximum of the parts in the glyph assembly.
(WebCore::RenderMathMLOperator::computeLogicalHeight): logicalHeight is now explicitely the sum of m_stretchHeightAboveBaseline and m_stretchDepthBelowBaseline, since it can be different from the stretchSize() in horizontal stretching.
(WebCore::RenderMathMLOperator::paintGlyph): handle trimming for horizontal stretching.
(WebCore::RenderMathMLOperator::fillWithVerticalExtensionGlyph): rename the function and ensure it is only call for m_isVertical.
(WebCore::RenderMathMLOperator::fillWithHorizontalExtensionGlyph): same as fillWithVerticalExtensionGlyph, but for horizontal stretching.
(WebCore::RenderMathMLOperator::paint): For glyph assembly, choose between paintVerticalGlyphAssembly or paintHorizontalGlyphAssembly.
(WebCore::RenderMathMLOperator::paintVerticalGlyphAssembly): rename the function and ensure it is only call for m_isVertical.
(WebCore::RenderMathMLOperator::paintHorizontalGlyphAssembly): same as paintVerticalGlyphAssembly but for horizontal stretching.
* rendering/mathml/RenderMathMLOperator.h: we add a m_isVertical member to indicate the stretch direction and a m_stretchWidth to indicate the width of the stretchy character.
We define the horizontal counterparts of fillWith*ExtensionGlyph, paint*GlyphAssembly, GlyphPaintTrimming StretchyData.
Finally stretchSize() takes into account the stretch direction.
* rendering/mathml/RenderMathMLUnderOver.cpp: We override the layout() function to stretch munderover children horizontally.
(WebCore::RenderMathMLUnderOver::layout):
* rendering/mathml/RenderMathMLUnderOver.h: we declare layout().
LayoutTests:
Add some tests to verify horizontal stretching with the MATH data.
* mathml/opentype/horizontal-LatinModern-munderover.html: Added.
* mathml/opentype/horizontal-LatinModern.html: Added.
* mathml/opentype/opentype-stretchy-horizontal.html: Added.
* platform/efl/TestExpectations: mark tests as failing.
* platform/gtk/mathml/opentype/horizontal-LatinModern-expected.png: Added.
* platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt: Added.
* platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.png: Added.
* platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt: Added.
* platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png: Added.
* platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt: Added.
* platform/mac/TestExpectations: mark tests as failing.
* platform/win/TestExpectations: ditto.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformeflTestExpectations">trunk/LayoutTests/platform/efl/TestExpectations</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="#trunkSourceWebCorerenderingmathmlRenderMathMLOperatorcpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLOperatorh">trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLUnderOvercpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLUnderOverh">trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmathmlopentypehorizontalLatinModernmunderoverhtml">trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.html</a></li>
<li><a href="#trunkLayoutTestsmathmlopentypehorizontalLatinModernhtml">trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.html</a></li>
<li><a href="#trunkLayoutTestsmathmlopentypeopentypestretchyhorizontalhtml">trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.html</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernexpectedpng">trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernmunderoverexpectedpng">trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernmunderoverexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypeopentypestretchyhorizontalexpectedpng">trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformgtkmathmlopentypeopentypestretchyhorizontalexpectedtxt">trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/LayoutTests/ChangeLog        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2014-06-05 Frédéric Wang <fred.wang@free.fr>
+
+ MathML operators not stretched horizontally
+ https://bugs.webkit.org/show_bug.cgi?id=72828
+
+ Reviewed by Chris Fleizach.
+
+ Add some tests to verify horizontal stretching with the MATH data.
+
+ * mathml/opentype/horizontal-LatinModern-munderover.html: Added.
+ * mathml/opentype/horizontal-LatinModern.html: Added.
+ * mathml/opentype/opentype-stretchy-horizontal.html: Added.
+ * platform/efl/TestExpectations: mark tests as failing.
+ * platform/gtk/mathml/opentype/horizontal-LatinModern-expected.png: Added.
+ * platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt: Added.
+ * platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.png: Added.
+ * platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt: Added.
+ * platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png: Added.
+ * platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt: Added.
+ * platform/mac/TestExpectations: mark tests as failing.
+ * platform/win/TestExpectations: ditto.
+
</ins><span class="cx"> 2014-06-04 Bem Jones-Bey <bjonesbe@adobe.com>
</span><span class="cx">
</span><span class="cx"> [CSS Shapes] Image lifetime is not properly handled for gradient shapes
</span></span></pre></div>
<a id="trunkLayoutTestsmathmlopentypehorizontalLatinModernmunderoverhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.html (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.html         (rev 0)
+++ trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.html        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+<!doctype html>
+<html>
+ <head>
+ <title>Large Operator Latin Modern</title>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ @font-face {
+ font-family: "Latin Modern Math";
+ src: local("Latin Modern Math"), local("LatinModernMath-Regular"), url("latinmodern-math.woff");
+ }
+ math {
+ font-family: "Latin Modern Math";
+ }
+ </style>
+ </head>
+ <body>
+
+ <!-- We test various munderover constructions. All the horizontal braces
+ should stretch to cover the size of the red rectangle. -->
+ <p>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <mover><mo stretchy="true">&#x23DE;</mo><mspace mathbackground="red" height="2px" width="4em"/></mover>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <mover><mspace mathbackground="red" height="2px" width="4em"/><mo stretchy="true">&#x23DE;</mo></mover>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <munder><mo stretchy="true">&#x23DE;</mo><mspace mathbackground="red" height="2px" width="4em"/></munder>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <munderover><mspace mathbackground="red" height="2px" width="4em"/><mo stretchy="true">&#x23DE;</mo><mo stretchy="true">&#x23DE;</mo></munderover>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <munderover><mo stretchy="true">&#x23DE;</mo><mspace mathbackground="red" height="2px" width="4em"/><mo stretchy="true">&#x23DE;</mo></munderover>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <munderover><mo stretchy="true">&#x23DE;</mo><mo stretchy="true">&#x23DE;</mo><mspace mathbackground="red" height="2px" width="4em"/></munderover>
+ </mstyle>
+ </math>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <munder><mover><mo stretchy="true">&#x23DE;</mo><mspace mathbackground="red" height="2px" width="4em"/></mover><mo stretchy="true">&#x23DE;</mo></munder>
+ </mstyle>
+ </math>
+ </p>
+
+ </body>
+</html>
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/opentype/horizontal-LatinModern-munderover.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="trunkLayoutTestsmathmlopentypehorizontalLatinModernhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.html (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.html         (rev 0)
+++ trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.html        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,88 @@
</span><ins>+<!doctype html>
+<html>
+ <head>
+ <title>Large Operator Latin Modern</title>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ @font-face {
+ font-family: "Latin Modern Math";
+ src: local("Latin Modern Math"), local("LatinModernMath-Regular"), url("latinmodern-math.woff");
+ }
+ math {
+ font-family: "Latin Modern Math";
+ }
+ </style>
+ </head>
+ <body>
+
+ <!-- We test various horizontal operators. They should stretch to cover the
+ size of the <mspace> element. -->
+
+ <p>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x2190;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x2192;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x2194;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21A4;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21A6;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21BC;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21BD;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21C0;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21D0;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21D2;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21D4;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21DA;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x21DB;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x23B4;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x23B5;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x23DC;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x23DD;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x23DE;</mo></mover></math>
+ <math><mover><mspace width="22px" height="2px" mathbackground="blue"/><mo stretchy="true">&#x23DF;</mo></mover></math>
+ </p>
+
+ <p>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x2190;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x2192;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x2194;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21A4;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21A6;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21BC;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21BD;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21C0;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21D0;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21D2;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21D4;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21DA;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x21DB;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x23B4;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x23B5;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x23DC;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x23DD;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x23DE;</mo></mover></math>
+ <math><mover><mspace width="50px" height="2px" mathbackground="green"/><mo stretchy="true">&#x23DF;</mo></mover></math>
+ </p>
+
+ <p>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x2190;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x2192;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x2194;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21A4;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21A6;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21BC;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21BD;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21C0;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21D0;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21D2;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21D4;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21DA;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x21DB;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x23B4;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x23B5;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x23DC;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x23DD;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x23DE;</mo></mover></math>
+ <math><mover><mspace width="100px" height="2px" mathbackground="red"/><mo stretchy="true">&#x23DF;</mo></mover></math>
+ </p>
+
+ </body>
+</html>
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/opentype/horizontal-LatinModern.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="trunkLayoutTestsmathmlopentypeopentypestretchyhorizontalhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.html (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.html         (rev 0)
+++ trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.html        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+<!doctype html>
+<html>
+ <head>
+ <title>Open Type MATH - stretchy operator</title>
+ <meta charset="utf-8"/>
+ <style type="text/css">
+ /* This font is taken from Mozilla's test suite. */
+ @font-face {
+ font-family: stretchy;
+ src: url("stretchy.woff");
+ }
+ math {
+ font-family: stretchy;
+ font-size: 10px;
+ }
+ </style>
+ </head>
+ <body>
+
+ <!-- This checks various vertical size variants. -->
+ <p>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <mover><mo stretchy="true">&#x219C;</mo><mspace width="1em" height="1px"/></mover>
+ </mstyle>
+ </math>
+ </p>
+ <p>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <mover><mo stretchy="true">&#x219C;</mo><mspace width="2em" height="1px"/></mover>
+ </mstyle>
+ </math>
+ </p>
+
+ <!-- This checks vertical glyph assembly. -->
+ <p>
+ <math>
+ <mstyle scriptsizemultiplier="1">
+ <mover><mo stretchy="true">&#x219C;</mo><mspace width="20em" height="1px"/></mover>
+ </mstyle>
+ </math>
+ </p>
+
+ </body>
+</html>
</ins><span class="cx">Property changes on: trunk/LayoutTests/mathml/opentype/opentype-stretchy-horizontal.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="trunkLayoutTestsplatformeflTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/efl/TestExpectations (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/efl/TestExpectations        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/LayoutTests/platform/efl/TestExpectations        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1626,3 +1626,11 @@
</span><span class="cx"> webkit.org/b/133307 fast/forms/number/number-spinbutton-in-multi-column.html [ Failure ]
</span><span class="cx">
</span><span class="cx"> webkit.org/b/133308 fast/selectors/hover-quirks.html [ Failure ]
</span><ins>+
+# Missing or bad references
+webkit.org/b/130322 mathml/opentype/large-operators-LatinModern.html [ Failure ]
+webkit.org/b/130322 mathml/opentype/opentype-stretchy.html [ Failure ]
+webkit.org/b/130322 mathml/opentype/vertical-LatinModern.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt         (rev 0)
+++ trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,572 @@
</span><ins>+layer at (0,0) size 800x600
+ RenderView at (0,0) size 800x600
+layer at (0,0) size 800x166
+ RenderBlock {HTML} at (0,0) size 800x166
+ RenderBody {BODY} at (8,16) size 784x134
+ RenderBlock {P} at (0,0) size 784x17
+ RenderMathMLMath {math} at (0,4) size 31x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x10
+ RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2190}"
+ RenderText {#text} at (30,0) size 5x17
+ text run at (30,0) width 5: " "
+ RenderMathMLMath {math} at (34,4) size 32x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x10
+ RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2192}"
+ RenderText {#text} at (65,0) size 5x17
+ text run at (65,0) width 5: " "
+ RenderMathMLMath {math} at (69,4) size 31x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x10
+ RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2194}"
+ RenderText {#text} at (99,0) size 5x17
+ text run at (99,0) width 5: " "
+ RenderMathMLMath {math} at (103,4) size 32x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x10
+ RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21A4}"
+ RenderText {#text} at (134,0) size 5x17
+ text run at (134,0) width 5: " "
+ RenderMathMLMath {math} at (138,4) size 32x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x10
+ RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21A6}"
+ RenderText {#text} at (169,0) size 5x17
+ text run at (169,0) width 5: " "
+ RenderMathMLMath {math} at (173,5) size 31x9 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x9
+ RenderMathMLSpace {mspace} at (3,7) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x7
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x7
+ RenderBlock (anonymous) at (0,0) size 12x7
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21BC}"
+ RenderText {#text} at (203,0) size 5x17
+ text run at (203,0) width 5: " "
+ RenderMathMLMath {math} at (207,7) size 32x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x7
+ RenderMathMLSpace {mspace} at (3,5) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x5
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x5
+ RenderBlock (anonymous) at (0,0) size 12x5
+ RenderText at (0,-39) size 12x80
+ text run at (0,-39) width 12: "\x{21BD}"
+ RenderText {#text} at (238,0) size 5x17
+ text run at (238,0) width 5: " "
+ RenderMathMLMath {math} at (242,5) size 32x9 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x9
+ RenderMathMLSpace {mspace} at (3,7) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x7
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x7
+ RenderBlock (anonymous) at (0,0) size 12x7
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21C0}"
+ RenderText {#text} at (273,0) size 5x17
+ text run at (273,0) width 5: " "
+ RenderMathMLMath {math} at (277,4) size 31x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x10
+ RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D0}"
+ RenderText {#text} at (307,0) size 5x17
+ text run at (307,0) width 5: " "
+ RenderMathMLMath {math} at (311,4) size 32x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x10
+ RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D2}"
+ RenderText {#text} at (342,0) size 5x17
+ text run at (342,0) width 5: " "
+ RenderMathMLMath {math} at (346,4) size 32x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x10
+ RenderMathMLSpace {mspace} at (3,8) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D4}"
+ RenderText {#text} at (377,0) size 5x17
+ text run at (377,0) width 5: " "
+ RenderMathMLMath {math} at (381,2) size 31x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x12
+ RenderMathMLSpace {mspace} at (3,10) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x10
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x10
+ RenderBlock (anonymous) at (0,0) size 12x10
+ RenderText at (0,-35) size 12x80
+ text run at (0,-35) width 12: "\x{21DA}"
+ RenderText {#text} at (411,0) size 5x17
+ text run at (411,0) width 5: " "
+ RenderMathMLMath {math} at (415,2) size 32x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 29x12
+ RenderMathMLSpace {mspace} at (3,10) size 23x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (-4,0) size 36x10
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 29x10
+ RenderBlock (anonymous) at (0,0) size 12x10
+ RenderText at (0,-35) size 12x80
+ text run at (0,-35) width 12: "\x{21DB}"
+ RenderText {#text} at (446,0) size 5x17
+ text run at (446,0) width 5: " "
+ RenderMathMLMath {math} at (450,9) size 25x5 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 22x5
+ RenderMathMLSpace {mspace} at (0,3) size 22x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (0,0) size 22x3
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 22x3
+ RenderBlock (anonymous) at (0,0) size 4x3
+ RenderText at (0,-34) size 4x80
+ text run at (0,-34) width 4: "\x{23B4}"
+ RenderText {#text} at (474,0) size 5x17
+ text run at (474,0) width 5: " "
+ RenderMathMLMath {math} at (478,9) size 25x5 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 22x5
+ RenderMathMLSpace {mspace} at (0,3) size 22x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (0,0) size 22x3
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 22x3
+ RenderBlock (anonymous) at (0,0) size 4x3
+ RenderText at (0,-43) size 4x80
+ text run at (0,-43) width 4: "\x{23B5}"
+ RenderText {#text} at (502,0) size 5x17
+ text run at (502,0) width 5: " "
+ RenderMathMLMath {math} at (506,8) size 27x6 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 24x6
+ RenderMathMLSpace {mspace} at (1,4) size 22x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (0,0) size 24x4
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 24x4
+ RenderBlock (anonymous) at (0,0) size 6x4
+ RenderText at (0,-34) size 6x80
+ text run at (0,-34) width 6: "\x{23DC}"
+ RenderText {#text} at (532,0) size 5x17
+ text run at (532,0) width 5: " "
+ RenderMathMLMath {math} at (536,7) size 27x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 24x7
+ RenderMathMLSpace {mspace} at (1,5) size 22x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (0,0) size 24x5
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 24x4
+ RenderBlock (anonymous) at (0,0) size 6x4
+ RenderText at (0,-43) size 6x80
+ text run at (0,-43) width 6: "\x{23DD}"
+ RenderText {#text} at (562,0) size 5x17
+ text run at (562,0) width 5: " "
+ RenderMathMLMath {math} at (566,8) size 27x6 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 24x6
+ RenderMathMLSpace {mspace} at (1,4) size 22x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (0,0) size 24x4
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 24x4
+ RenderBlock (anonymous) at (0,0) size 6x4
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderText {#text} at (592,0) size 5x17
+ text run at (592,0) width 5: " "
+ RenderMathMLMath {math} at (596,7) size 27x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 24x7
+ RenderMathMLSpace {mspace} at (1,5) size 22x2 [bgcolor=#0000FF]
+ RenderMathMLOperator {mo} at (0,0) size 24x5
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 24x5
+ RenderBlock (anonymous) at (0,0) size 6x5
+ RenderText at (0,-43) size 6x80
+ text run at (0,-43) width 6: "\x{23DF}"
+ RenderText {#text} at (0,0) size 0x0
+ RenderBlock {P} at (0,33) size 784x34
+ RenderMathMLMath {math} at (0,4) size 59x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x10
+ RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2190}"
+ RenderText {#text} at (58,0) size 5x17
+ text run at (58,0) width 5: " "
+ RenderMathMLMath {math} at (62,4) size 60x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x10
+ RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2192}"
+ RenderText {#text} at (121,0) size 5x17
+ text run at (121,0) width 5: " "
+ RenderMathMLMath {math} at (125,4) size 59x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x10
+ RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2194}"
+ RenderText {#text} at (183,0) size 5x17
+ text run at (183,0) width 5: " "
+ RenderMathMLMath {math} at (187,4) size 60x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x10
+ RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21A4}"
+ RenderText {#text} at (246,0) size 5x17
+ text run at (246,0) width 5: " "
+ RenderMathMLMath {math} at (250,4) size 60x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x10
+ RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21A6}"
+ RenderText {#text} at (309,0) size 5x17
+ text run at (309,0) width 5: " "
+ RenderMathMLMath {math} at (313,5) size 59x9 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x9
+ RenderMathMLSpace {mspace} at (3,7) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x7
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x7
+ RenderBlock (anonymous) at (0,0) size 12x7
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21BC}"
+ RenderText {#text} at (371,0) size 5x17
+ text run at (371,0) width 5: " "
+ RenderMathMLMath {math} at (375,7) size 60x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x7
+ RenderMathMLSpace {mspace} at (3,5) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x5
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x5
+ RenderBlock (anonymous) at (0,0) size 12x5
+ RenderText at (0,-39) size 12x80
+ text run at (0,-39) width 12: "\x{21BD}"
+ RenderText {#text} at (434,0) size 5x17
+ text run at (434,0) width 5: " "
+ RenderMathMLMath {math} at (438,5) size 60x9 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x9
+ RenderMathMLSpace {mspace} at (3,7) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x7
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x7
+ RenderBlock (anonymous) at (0,0) size 12x7
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21C0}"
+ RenderText {#text} at (497,0) size 5x17
+ text run at (497,0) width 5: " "
+ RenderMathMLMath {math} at (501,4) size 59x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x10
+ RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D0}"
+ RenderText {#text} at (559,0) size 5x17
+ text run at (559,0) width 5: " "
+ RenderMathMLMath {math} at (563,4) size 60x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x10
+ RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D2}"
+ RenderText {#text} at (622,0) size 5x17
+ text run at (622,0) width 5: " "
+ RenderMathMLMath {math} at (626,4) size 60x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x10
+ RenderMathMLSpace {mspace} at (3,8) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D4}"
+ RenderText {#text} at (685,0) size 5x17
+ text run at (685,0) width 5: " "
+ RenderMathMLMath {math} at (689,2) size 59x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x12
+ RenderMathMLSpace {mspace} at (3,10) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x10
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x10
+ RenderBlock (anonymous) at (0,0) size 12x10
+ RenderText at (0,-35) size 12x80
+ text run at (0,-35) width 12: "\x{21DA}"
+ RenderText {#text} at (0,0) size 0x0
+ RenderMathMLMath {math} at (0,19) size 59x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 57x12
+ RenderMathMLSpace {mspace} at (3,10) size 51x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (-4,0) size 64x10
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 57x10
+ RenderBlock (anonymous) at (0,0) size 12x10
+ RenderText at (0,-35) size 12x80
+ text run at (0,-35) width 12: "\x{21DB}"
+ RenderText {#text} at (58,17) size 5x17
+ text run at (58,17) width 5: " "
+ RenderMathMLMath {math} at (62,19) size 53x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 50x12
+ RenderMathMLSpace {mspace} at (0,10) size 50x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (0,0) size 50x10
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 50x10
+ RenderBlock (anonymous) at (0,0) size 4x10
+ RenderText at (0,-34) size 4x80
+ text run at (0,-34) width 4: "\x{23B4}"
+ RenderText {#text} at (114,17) size 5x17
+ text run at (114,17) width 5: " "
+ RenderMathMLMath {math} at (118,24) size 53x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 50x7
+ RenderMathMLSpace {mspace} at (0,5) size 50x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (0,0) size 50x5
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 50x4
+ RenderBlock (anonymous) at (0,0) size 4x4
+ RenderText at (0,-43) size 4x80
+ text run at (0,-43) width 4: "\x{23B5}"
+ RenderText {#text} at (170,17) size 5x17
+ text run at (170,17) width 5: " "
+ RenderMathMLMath {math} at (174,19) size 53x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 50x12
+ RenderMathMLSpace {mspace} at (0,10) size 50x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (0,0) size 50x10
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 50x10
+ RenderBlock (anonymous) at (0,0) size 6x10
+ RenderText at (0,-34) size 6x80
+ text run at (0,-34) width 6: "\x{23DC}"
+ RenderText {#text} at (226,17) size 5x17
+ text run at (226,17) width 5: " "
+ RenderMathMLMath {math} at (230,24) size 53x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 50x7
+ RenderMathMLSpace {mspace} at (0,5) size 50x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (0,0) size 50x5
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 50x4
+ RenderBlock (anonymous) at (0,0) size 6x4
+ RenderText at (0,-43) size 6x80
+ text run at (0,-43) width 6: "\x{23DD}"
+ RenderText {#text} at (282,17) size 5x17
+ text run at (282,17) width 5: " "
+ RenderMathMLMath {math} at (286,18) size 53x13 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 50x13
+ RenderMathMLSpace {mspace} at (0,11) size 50x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (0,0) size 50x11
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 50x11
+ RenderBlock (anonymous) at (0,0) size 6x11
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderText {#text} at (338,17) size 5x17
+ text run at (338,17) width 5: " "
+ RenderMathMLMath {math} at (342,23) size 53x8 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 50x8
+ RenderMathMLSpace {mspace} at (0,6) size 50x2 [bgcolor=#008000]
+ RenderMathMLOperator {mo} at (0,0) size 50x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 50x5
+ RenderBlock (anonymous) at (0,0) size 6x5
+ RenderText at (0,-43) size 6x80
+ text run at (0,-43) width 6: "\x{23DF}"
+ RenderText {#text} at (0,0) size 0x0
+ RenderBlock {P} at (0,83) size 784x51
+ RenderMathMLMath {math} at (0,4) size 109x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x10
+ RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2190}"
+ RenderText {#text} at (108,0) size 5x17
+ text run at (108,0) width 5: " "
+ RenderMathMLMath {math} at (112,4) size 110x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x10
+ RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2192}"
+ RenderText {#text} at (221,0) size 5x17
+ text run at (221,0) width 5: " "
+ RenderMathMLMath {math} at (225,4) size 109x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x10
+ RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{2194}"
+ RenderText {#text} at (333,0) size 5x17
+ text run at (333,0) width 5: " "
+ RenderMathMLMath {math} at (337,4) size 110x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x10
+ RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21A4}"
+ RenderText {#text} at (446,0) size 5x17
+ text run at (446,0) width 5: " "
+ RenderMathMLMath {math} at (450,4) size 110x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x10
+ RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21A6}"
+ RenderText {#text} at (559,0) size 5x17
+ text run at (559,0) width 5: " "
+ RenderMathMLMath {math} at (563,5) size 109x9 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x9
+ RenderMathMLSpace {mspace} at (3,7) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x7
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x7
+ RenderBlock (anonymous) at (0,0) size 12x7
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21BC}"
+ RenderText {#text} at (0,0) size 0x0
+ RenderMathMLMath {math} at (0,24) size 109x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x7
+ RenderMathMLSpace {mspace} at (3,5) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x5
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x5
+ RenderBlock (anonymous) at (0,0) size 12x5
+ RenderText at (0,-39) size 12x80
+ text run at (0,-39) width 12: "\x{21BD}"
+ RenderText {#text} at (108,17) size 5x17
+ text run at (108,17) width 5: " "
+ RenderMathMLMath {math} at (112,22) size 110x9 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x9
+ RenderMathMLSpace {mspace} at (3,7) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x7
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x7
+ RenderBlock (anonymous) at (0,0) size 12x7
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21C0}"
+ RenderText {#text} at (221,17) size 5x17
+ text run at (221,17) width 5: " "
+ RenderMathMLMath {math} at (225,21) size 109x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x10
+ RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D0}"
+ RenderText {#text} at (333,17) size 5x17
+ text run at (333,17) width 5: " "
+ RenderMathMLMath {math} at (337,21) size 110x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x10
+ RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D2}"
+ RenderText {#text} at (446,17) size 5x17
+ text run at (446,17) width 5: " "
+ RenderMathMLMath {math} at (450,21) size 110x10 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x10
+ RenderMathMLSpace {mspace} at (3,8) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x8
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x8
+ RenderBlock (anonymous) at (0,0) size 12x8
+ RenderText at (0,-36) size 12x80
+ text run at (0,-36) width 12: "\x{21D4}"
+ RenderText {#text} at (559,17) size 5x17
+ text run at (559,17) width 5: " "
+ RenderMathMLMath {math} at (563,19) size 109x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x12
+ RenderMathMLSpace {mspace} at (3,10) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x10
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x10
+ RenderBlock (anonymous) at (0,0) size 12x10
+ RenderText at (0,-35) size 12x80
+ text run at (0,-35) width 12: "\x{21DA}"
+ RenderText {#text} at (0,0) size 0x0
+ RenderMathMLMath {math} at (0,36) size 109x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 107x12
+ RenderMathMLSpace {mspace} at (3,10) size 101x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (-4,0) size 114x10
+ RenderMathMLBlock (anonymous, flex) at (3,0) size 107x10
+ RenderBlock (anonymous) at (0,0) size 12x10
+ RenderText at (0,-35) size 12x80
+ text run at (0,-35) width 12: "\x{21DB}"
+ RenderText {#text} at (108,34) size 5x17
+ text run at (108,34) width 5: " "
+ RenderMathMLMath {math} at (112,36) size 103x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 100x12
+ RenderMathMLSpace {mspace} at (0,10) size 100x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,0) size 100x10
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 100x10
+ RenderBlock (anonymous) at (0,0) size 4x10
+ RenderText at (0,-34) size 4x80
+ text run at (0,-34) width 4: "\x{23B4}"
+ RenderText {#text} at (214,34) size 5x17
+ text run at (214,34) width 5: " "
+ RenderMathMLMath {math} at (218,41) size 103x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 100x7
+ RenderMathMLSpace {mspace} at (0,5) size 100x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,0) size 100x5
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 100x4
+ RenderBlock (anonymous) at (0,0) size 4x4
+ RenderText at (0,-43) size 4x80
+ text run at (0,-43) width 4: "\x{23B5}"
+ RenderText {#text} at (320,34) size 5x17
+ text run at (320,34) width 5: " "
+ RenderMathMLMath {math} at (324,36) size 103x12 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 100x12
+ RenderMathMLSpace {mspace} at (0,10) size 100x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,0) size 100x10
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 100x10
+ RenderBlock (anonymous) at (0,0) size 6x10
+ RenderText at (0,-34) size 6x80
+ text run at (0,-34) width 6: "\x{23DC}"
+ RenderText {#text} at (426,34) size 5x17
+ text run at (426,34) width 5: " "
+ RenderMathMLMath {math} at (430,41) size 103x7 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 100x7
+ RenderMathMLSpace {mspace} at (0,5) size 100x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,0) size 100x5
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 100x4
+ RenderBlock (anonymous) at (0,0) size 6x4
+ RenderText at (0,-43) size 6x80
+ text run at (0,-43) width 6: "\x{23DD}"
+ RenderText {#text} at (532,34) size 5x17
+ text run at (532,34) width 5: " "
+ RenderMathMLMath {math} at (536,35) size 103x13 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 100x13
+ RenderMathMLSpace {mspace} at (0,11) size 100x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,0) size 100x11
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 100x11
+ RenderBlock (anonymous) at (0,0) size 6x11
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderText {#text} at (638,34) size 5x17
+ text run at (638,34) width 5: " "
+ RenderMathMLMath {math} at (642,40) size 103x8 [padding: 0 1 0 1]
+ RenderMathMLUnderOver {mover} at (1,0) size 100x8
+ RenderMathMLSpace {mspace} at (0,6) size 100x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,0) size 100x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 100x5
+ RenderBlock (anonymous) at (0,0) size 6x5
+ RenderText at (0,-43) size 6x80
+ text run at (0,-43) width 6: "\x{23DF}"
+ RenderText {#text} at (0,0) size 0x0
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernmunderoverexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypehorizontalLatinModernmunderoverexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt         (rev 0)
+++ trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,103 @@
</span><ins>+layer at (0,0) size 800x600
+ RenderView at (0,0) size 800x600
+layer at (0,0) size 800x63
+ RenderBlock {HTML} at (0,0) size 800x63
+ RenderBody {BODY} at (8,16) size 784x31
+ RenderBlock {P} at (0,0) size 784x31
+ RenderMathMLMath {math} at (0,4) size 50x16 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 48x16
+ RenderMathMLUnderOver {mover} at (0,0) size 48x8
+ RenderMathMLOperator {mo} at (0,2) size 48x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+ RenderBlock (anonymous) at (0,0) size 8x6
+ RenderText at (0,-44) size 8x106
+ text run at (0,-44) width 8: "\x{23DE}"
+ RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
+ RenderText {#text} at (50,6) size 4x17
+ text run at (50,6) width 4: " "
+ RenderMathMLMath {math} at (54,7) size 66x13 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 64x13
+ RenderMathMLUnderOver {mover} at (0,0) size 64x13
+ RenderMathMLSpace {mspace} at (0,11) size 64x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,0) size 64x11
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 64x11
+ RenderBlock (anonymous) at (0,0) size 6x11
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderText {#text} at (120,6) size 4x17
+ text run at (120,6) width 4: " "
+ RenderMathMLMath {math} at (124,6) size 50x14 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 48x14
+ RenderMathMLUnderOver {munder} at (0,0) size 48x8
+ RenderMathMLOperator {mo} at (0,0) size 48x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+ RenderBlock (anonymous) at (0,0) size 8x6
+ RenderText at (0,-44) size 8x106
+ text run at (0,-44) width 8: "\x{23DE}"
+ RenderMathMLSpace {mspace} at (0,6) size 48x2 [bgcolor=#FF0000]
+ RenderText {#text} at (174,6) size 4x17
+ text run at (174,6) width 4: " "
+ RenderMathMLMath {math} at (178,7) size 66x24 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 64x24
+ RenderMathMLUnderOver {munderover} at (0,0) size 64x24
+ RenderMathMLSpace {mspace} at (0,11) size 64x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,13) size 64x11
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 64x11
+ RenderBlock (anonymous) at (0,0) size 6x11
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderMathMLOperator {mo} at (0,0) size 64x11
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 64x11
+ RenderBlock (anonymous) at (0,0) size 6x11
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderText {#text} at (244,6) size 4x17
+ text run at (244,6) width 4: " "
+ RenderMathMLMath {math} at (248,0) size 50x20 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 48x20
+ RenderMathMLUnderOver {munderover} at (0,0) size 48x14
+ RenderMathMLOperator {mo} at (0,6) size 48x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+ RenderBlock (anonymous) at (0,0) size 8x6
+ RenderText at (0,-44) size 8x106
+ text run at (0,-44) width 8: "\x{23DE}"
+ RenderMathMLSpace {mspace} at (0,12) size 48x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,0) size 48x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+ RenderBlock (anonymous) at (0,0) size 6x6
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderText {#text} at (298,6) size 4x17
+ text run at (298,6) width 4: " "
+ RenderMathMLMath {math} at (302,4) size 50x16 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 48x16
+ RenderMathMLUnderOver {munderover} at (0,0) size 48x14
+ RenderMathMLOperator {mo} at (0,2) size 48x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+ RenderBlock (anonymous) at (0,0) size 8x6
+ RenderText at (0,-44) size 8x106
+ text run at (0,-44) width 8: "\x{23DE}"
+ RenderMathMLOperator {mo} at (0,8) size 48x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+ RenderBlock (anonymous) at (0,0) size 6x6
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
+ RenderText {#text} at (352,6) size 4x17
+ text run at (352,6) width 4: " "
+ RenderMathMLMath {math} at (356,4) size 50x16 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 48x16
+ RenderMathMLUnderOver {munder} at (0,0) size 48x14
+ RenderMathMLUnderOver {mover} at (0,0) size 48x8
+ RenderMathMLOperator {mo} at (0,2) size 48x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+ RenderBlock (anonymous) at (0,0) size 8x6
+ RenderText at (0,-44) size 8x106
+ text run at (0,-44) width 8: "\x{23DE}"
+ RenderMathMLSpace {mspace} at (0,0) size 48x2 [bgcolor=#FF0000]
+ RenderMathMLOperator {mo} at (0,8) size 48x6
+ RenderMathMLBlock (anonymous, flex) at (0,0) size 48x6
+ RenderBlock (anonymous) at (0,0) size 6x6
+ RenderText at (0,-33) size 6x80
+ text run at (0,-33) width 6: "\x{23DE}"
+ RenderText {#text} at (0,0) size 0x0
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/horizontal-LatinModern-munderover-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypeopentypestretchyhorizontalexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformgtkmathmlopentypeopentypestretchyhorizontalexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt (0 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt         (rev 0)
+++ trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+layer at (0,0) size 800x600
+ RenderView at (0,0) size 800x600
+layer at (0,0) size 800x157
+ RenderBlock {HTML} at (0,0) size 800x157
+ RenderBody {BODY} at (8,16) size 784x125
+ RenderBlock {P} at (0,0) size 784x25
+ RenderMathMLMath {math} at (0,2) size 18x23 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 16x23
+ RenderMathMLUnderOver {mover} at (0,0) size 16x23
+ RenderMathMLOperator {mo} at (-5,1) size 26x22
+ RenderMathMLBlock (anonymous, flex) at (2,0) size 21x4
+ RenderBlock (anonymous) at (0,0) size 1x4
+ RenderText at (0,-3) size 1x0
+ text run at (0,-3) width 1: "\x{219C}"
+ RenderMathMLSpace {mspace} at (4,0) size 8x1
+ RenderText {#text} at (0,0) size 0x0
+ RenderBlock {P} at (0,41) size 784x25
+ RenderMathMLMath {math} at (0,2) size 28x23 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 26x23
+ RenderMathMLUnderOver {mover} at (0,0) size 26x23
+ RenderMathMLOperator {mo} at (-6,1) size 38x22
+ RenderMathMLBlock (anonymous, flex) at (2,0) size 32x4
+ RenderBlock (anonymous) at (0,0) size 1x4
+ RenderText at (0,-3) size 1x0
+ text run at (0,-3) width 1: "\x{219C}"
+ RenderMathMLSpace {mspace} at (5,0) size 16x1
+ RenderText {#text} at (0,0) size 0x0
+ RenderBlock {P} at (0,82) size 784x43
+ RenderMathMLMath {math} at (0,0) size 158x43 [padding: 0 1 0 1]
+ RenderMathMLRow {mstyle} at (1,0) size 156x43
+ RenderMathMLUnderOver {mover} at (0,0) size 156x43
+ RenderMathMLOperator {mo} at (-3,1) size 162x42
+ RenderMathMLBlock (anonymous, flex) at (2,0) size 157x4
+ RenderBlock (anonymous) at (0,0) size 1x4
+ RenderText at (0,-3) size 1x0
+ text run at (0,-3) width 1: "\x{219C}"
+ RenderMathMLSpace {mspace} at (2,0) size 151x1
+ RenderText {#text} at (0,0) size 0x0
</ins><span class="cx">Property changes on: trunk/LayoutTests/platform/gtk/mathml/opentype/opentype-stretchy-horizontal-expected.txt
</span><span class="cx">___________________________________________________________________
</span></span></pre></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 (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1325,6 +1325,9 @@
</span><span class="cx"> webkit.org/b/130322 [ MountainLion Mavericks ] mathml/opentype/large-operators-LatinModern.html [ Failure ]
</span><span class="cx"> webkit.org/b/130322 [ MountainLion Mavericks ] mathml/opentype/opentype-stretchy.html [ Failure ]
</span><span class="cx"> webkit.org/b/130322 [ MountainLion Mavericks ] mathml/opentype/vertical-LatinModern.html [ Failure ]
</span><ins>+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</ins><span class="cx">
</span><span class="cx"> # WebKitDataCue is supported, not DataCue
</span><span class="cx"> media/track/track-datacue.html [ Skip ]
</span></span></pre></div>
<a id="trunkLayoutTestsplatformwinTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/win/TestExpectations (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/win/TestExpectations        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/LayoutTests/platform/win/TestExpectations        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -2746,3 +2746,6 @@
</span><span class="cx"> webkit.org/b/130322 mathml/opentype/large-operators-LatinModern.html [ Failure ]
</span><span class="cx"> webkit.org/b/130322 mathml/opentype/opentype-stretchy.html [ Failure ]
</span><span class="cx"> webkit.org/b/130322 mathml/opentype/vertical-LatinModern.html [ Failure ]
</span><ins>+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/opentype-stretchy-horizontal.html [ Failure ]
+webkit.org/b/72828 mathml/opentype/horizontal-LatinModern-munderover.html [ Failure ]
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/ChangeLog        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1,3 +1,49 @@
</span><ins>+2014-06-05 Frédéric Wang <fred.wang@free.fr>
+
+ MathML operators not stretched horizontally
+ https://bugs.webkit.org/show_bug.cgi?id=72828
+
+ Reviewed by Chris Fleizach.
+
+ This patch adds basic horizontal stretching rules for operators inside
+ an <munder>, <mover> or <munderover> elements. The stretchy operators
+ in such an element stretch to cover the size of the non-stretchy
+ operators. This only works when fonts that have an OpenType MATH table
+ are used.
+
+ Tests: mathml/opentype/horizontal-LatinModern.html
+ mathml/opentype/opentype-stretchy-horizontal.html
+ mathml/opentype/horizontal-LatinModern-munderover.html
+
+ * rendering/mathml/RenderMathMLOperator.cpp:
+ (WebCore::MathMLOperatorDictionary::ExtractKeyHorizontal): We add an ordered list of operators that have horizontal stretch direction.
+ (WebCore::RenderMathMLOperator::RenderMathMLOperator): init m_Vertical
+ (WebCore::RenderMathMLOperator::SetOperatorProperties): set m_Vertical by checking whether the operator is in the horizontalOperators list.
+ (WebCore::RenderMathMLOperator::stretchTo): We do not stretch vertically
+ if the operator has horizontal direction.
+ We also add a new version stretchTo(LayoutUnit width) for horizontal stretching only.
+ (WebCore::RenderMathMLOperator::computePreferredLogicalWidths): Handle horizontal stretching: the maximumGlyphWidth is the maximum of
+ the base size or of the stretch size.
+ (WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator): Add an ASSERT to ensure that this function is only called for vertical stretching.
+ (WebCore::RenderMathMLOperator::findStretchyData): Add an ASSERT to ensure that this function is not called to get the maximum width of a horizontal stretchy operator.
+ We take into account m_isVertical when calling getMathVariants or computing sizes.
+ There is not any Unicode-only construction for horizontal stretching, so a MATH table is required for horizontal stretching.
+ (WebCore::RenderMathMLOperator::updateStyle): Ignore some code paths specific to vertical stretching and take into account the m_Vertical parameters.
+ For horizontal stretching, the m_stretch*Baseline parameters are now updated to match the metrics of the size variant or of the maximum of the parts in the glyph assembly.
+ (WebCore::RenderMathMLOperator::computeLogicalHeight): logicalHeight is now explicitely the sum of m_stretchHeightAboveBaseline and m_stretchDepthBelowBaseline, since it can be different from the stretchSize() in horizontal stretching.
+ (WebCore::RenderMathMLOperator::paintGlyph): handle trimming for horizontal stretching.
+ (WebCore::RenderMathMLOperator::fillWithVerticalExtensionGlyph): rename the function and ensure it is only call for m_isVertical.
+ (WebCore::RenderMathMLOperator::fillWithHorizontalExtensionGlyph): same as fillWithVerticalExtensionGlyph, but for horizontal stretching.
+ (WebCore::RenderMathMLOperator::paint): For glyph assembly, choose between paintVerticalGlyphAssembly or paintHorizontalGlyphAssembly.
+ (WebCore::RenderMathMLOperator::paintVerticalGlyphAssembly): rename the function and ensure it is only call for m_isVertical.
+ (WebCore::RenderMathMLOperator::paintHorizontalGlyphAssembly): same as paintVerticalGlyphAssembly but for horizontal stretching.
+ * rendering/mathml/RenderMathMLOperator.h: we add a m_isVertical member to indicate the stretch direction and a m_stretchWidth to indicate the width of the stretchy character.
+ We define the horizontal counterparts of fillWith*ExtensionGlyph, paint*GlyphAssembly, GlyphPaintTrimming StretchyData.
+ Finally stretchSize() takes into account the stretch direction.
+ * rendering/mathml/RenderMathMLUnderOver.cpp: We override the layout() function to stretch munderover children horizontally.
+ (WebCore::RenderMathMLUnderOver::layout):
+ * rendering/mathml/RenderMathMLUnderOver.h: we declare layout().
+
</ins><span class="cx"> 2014-06-04 Bem Jones-Bey <bjonesbe@adobe.com>
</span><span class="cx">
</span><span class="cx"> [CSS Shapes] Image lifetime is not properly handled for gradient shapes
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLOperatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -1125,6 +1125,12 @@
</span><span class="cx"> { 0x2B46, Infix, 5, 5, Stretchy} // RIGHTWARDS QUADRUPLE ARROW
</span><span class="cx"> };
</span><span class="cx">
</span><ins>+// A list of operators that stretch in the horizontal direction. This has been generated from Mozilla's MathML operator dictionary.
+inline UChar ExtractKeyHorizontal(const UChar* entry) { return *entry; }
+static const UChar horizontalOperators[] = {
+ 0x003D, 0x005E, 0x005F, 0x007E, 0x00AF, 0x02C6, 0x02C7, 0x02C9, 0x02CD, 0x02DC, 0x02F7, 0x0302, 0x0332, 0x203E, 0x20D0, 0x20D1, 0x20D6, 0x20D7, 0x20E1, 0x2190, 0x2192, 0x2194, 0x2198, 0x2199, 0x219C, 0x219D, 0x219E, 0x21A0, 0x21A2, 0x21A3, 0x21A4, 0x21A6, 0x21A9, 0x21AA, 0x21AB, 0x21AC, 0x21AD, 0x21B4, 0x21B9, 0x21BC, 0x21BD, 0x21C0, 0x21C1, 0x21C4, 0x21C6, 0x21C7, 0x21C9, 0x21CB, 0x21CC, 0x21D0, 0x21D2, 0x21D4, 0x21DA, 0x21DB, 0x21DC, 0x21DD, 0x21E0, 0x21E2, 0x21E4, 0x21E5, 0x21E6, 0x21E8, 0x21F0, 0x21F6, 0x21FD, 0x21FE, 0x21FF, 0x23B4, 0x23B5, 0x23DC, 0x23DD, 0x23DE, 0x23DF, 0x23E0, 0x23E1, 0x2500, 0x27F5, 0x27F6, 0x27F7, 0x27F8, 0x27F9, 0x27FA, 0x27FB, 0x27FC, 0x27FD, 0x27FE, 0x27FF, 0x290C, 0x290D, 0x290E, 0x290F, 0x2910, 0x294E, 0x2950, 0x2952, 0x2953, 0x2956, 0x2957, 0x295A, 0x295B, 0x295E, 0x295F, 0x2B45, 0x2B46, 0xFE35, 0xFE36, 0xFE37, 0xFE38
+};
+
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RenderMathMLOperator::RenderMathMLOperator(MathMLElement& element, PassRef<RenderStyle> style)
</span><span class="lines">@@ -1132,6 +1138,7 @@
</span><span class="cx"> , m_stretchHeightAboveBaseline(0)
</span><span class="cx"> , m_stretchDepthBelowBaseline(0)
</span><span class="cx"> , m_operator(0)
</span><ins>+ , m_isVertical(true)
</ins><span class="cx"> {
</span><span class="cx"> updateTokenContent();
</span><span class="cx"> }
</span><span class="lines">@@ -1141,6 +1148,7 @@
</span><span class="cx"> , m_stretchHeightAboveBaseline(0)
</span><span class="cx"> , m_stretchDepthBelowBaseline(0)
</span><span class="cx"> , m_operator(0)
</span><ins>+ , m_isVertical(true)
</ins><span class="cx"> , m_operatorForm(form)
</span><span class="cx"> , m_operatorFlags(flag)
</span><span class="cx"> {
</span><span class="lines">@@ -1173,6 +1181,9 @@
</span><span class="cx">
</span><span class="cx"> void RenderMathMLOperator::SetOperatorProperties()
</span><span class="cx"> {
</span><ins>+ // We determine the stretch direction (default is vertical).
+ m_isVertical = !(tryBinarySearch<const UChar, UChar>(MathMLOperatorDictionary::horizontalOperators, WTF_ARRAY_LENGTH(MathMLOperatorDictionary::horizontalOperators), m_operator, MathMLOperatorDictionary::ExtractKeyHorizontal));
+
</ins><span class="cx"> // We determine the form of the operator.
</span><span class="cx"> bool explicitForm = true;
</span><span class="cx"> if (!isFencedOperator()) {
</span><span class="lines">@@ -1253,7 +1264,7 @@
</span><span class="cx">
</span><span class="cx"> void RenderMathMLOperator::stretchTo(LayoutUnit heightAboveBaseline, LayoutUnit depthBelowBaseline)
</span><span class="cx"> {
</span><del>- if (heightAboveBaseline == m_stretchHeightAboveBaseline && depthBelowBaseline == m_stretchDepthBelowBaseline)
</del><ins>+ if (!m_isVertical || (heightAboveBaseline == m_stretchHeightAboveBaseline && depthBelowBaseline == m_stretchDepthBelowBaseline))
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> m_stretchHeightAboveBaseline = heightAboveBaseline;
</span><span class="lines">@@ -1283,6 +1294,18 @@
</span><span class="cx"> updateStyle();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void RenderMathMLOperator::stretchTo(LayoutUnit width)
+{
+ if (m_isVertical || m_stretchWidth == width)
+ return;
+
+ m_stretchWidth = width;
+
+ SetOperatorProperties();
+
+ updateStyle();
+}
+
</ins><span class="cx"> FloatRect RenderMathMLOperator::boundsForGlyph(const GlyphData& data) const
</span><span class="cx"> {
</span><span class="cx"> return data.fontData->boundsForGlyph(data.glyph);
</span><span class="lines">@@ -1318,6 +1341,13 @@
</span><span class="cx">
</span><span class="cx"> GlyphData data = style().font().glyphDataForCharacter(m_operator, false);
</span><span class="cx"> float maximumGlyphWidth = advanceForGlyph(data);
</span><ins>+ if (!m_isVertical) {
+ if (maximumGlyphWidth < stretchSize())
+ maximumGlyphWidth = stretchSize();
+ m_maxPreferredLogicalWidth = m_leadingSpace + maximumGlyphWidth + m_trailingSpace;
+ m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth;
+ return;
+ }
</ins><span class="cx"> if (isLargeOperatorInDisplayStyle()) {
</span><span class="cx"> // Large operators in STIX Word have incorrect advance width, causing misplacement of superscript, so we use the glyph bound instead (http://sourceforge.net/p/stixfonts/tracking/49/).
</span><span class="cx"> StretchyData largeOperator = getDisplayStyleLargeOperator(m_operator);
</span><span class="lines">@@ -1481,7 +1511,7 @@
</span><span class="cx"> {
</span><span class="cx"> StretchyData data;
</span><span class="cx">
</span><del>- ASSERT(isLargeOperatorInDisplayStyle());
</del><ins>+ ASSERT(m_isVertical && isLargeOperatorInDisplayStyle());
</ins><span class="cx">
</span><span class="cx"> const auto& primaryFontData = style().font().primaryFont();
</span><span class="cx"> GlyphData baseGlyph = style().font().glyphDataForCharacter(character, false);
</span><span class="lines">@@ -1510,6 +1540,8 @@
</span><span class="cx">
</span><span class="cx"> RenderMathMLOperator::StretchyData RenderMathMLOperator::findStretchyData(UChar character, float* maximumGlyphWidth)
</span><span class="cx"> {
</span><ins>+ ASSERT(!maximumGlyphWidth || m_isVertical);
+
</ins><span class="cx"> StretchyData data;
</span><span class="cx"> StretchyData assemblyData;
</span><span class="cx">
</span><span class="lines">@@ -1519,7 +1551,7 @@
</span><span class="cx"> if (primaryFontData && primaryFontData->mathData() && baseGlyph.fontData == primaryFontData) {
</span><span class="cx"> Vector<Glyph> sizeVariants;
</span><span class="cx"> Vector<OpenTypeMathData::AssemblyPart> assemblyParts;
</span><del>- primaryFontData->mathData()->getMathVariants(baseGlyph.glyph, true, sizeVariants, assemblyParts);
</del><ins>+ primaryFontData->mathData()->getMathVariants(baseGlyph.glyph, m_isVertical, sizeVariants, assemblyParts);
</ins><span class="cx"> // We verify the size variants.
</span><span class="cx"> for (auto& variant : sizeVariants) {
</span><span class="cx"> GlyphData sizeVariant;
</span><span class="lines">@@ -1529,7 +1561,8 @@
</span><span class="cx"> *maximumGlyphWidth = std::max(*maximumGlyphWidth, advanceForGlyph(sizeVariant));
</span><span class="cx"> else {
</span><span class="cx"> data.setSizeVariantMode(sizeVariant);
</span><del>- if (heightForGlyph(sizeVariant) >= stretchSize())
</del><ins>+ float size = m_isVertical ? heightForGlyph(sizeVariant) : advanceForGlyph(sizeVariant);
+ if (size >= stretchSize())
</ins><span class="cx"> return data;
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -1538,6 +1571,9 @@
</span><span class="cx"> if (!getGlyphAssemblyFallBack(assemblyParts, assemblyData))
</span><span class="cx"> return data;
</span><span class="cx"> } else {
</span><ins>+ if (!m_isVertical)
+ return data;
+
</ins><span class="cx"> // If the font does not have a MATH table, we fallback to the Unicode-only constructions.
</span><span class="cx"> const StretchyCharacter* stretchyCharacter = nullptr;
</span><span class="cx"> const unsigned maxIndex = WTF_ARRAY_LENGTH(stretchyCharacters);
</span><span class="lines">@@ -1574,11 +1610,18 @@
</span><span class="cx"> return assemblyData;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- // We ensure that the stretch height is large enough to avoid glyph overlaps.
- float height = heightForGlyph(assemblyData.top()) + heightForGlyph(assemblyData.bottom());
- if (assemblyData.middle().glyph)
- height += heightForGlyph(assemblyData.middle());
- if (height > stretchSize())
</del><ins>+ // We ensure that the size is large enough to avoid glyph overlaps.
+ float size;
+ if (m_isVertical) {
+ size = heightForGlyph(assemblyData.top()) + heightForGlyph(assemblyData.bottom());
+ if (assemblyData.middle().glyph)
+ size += heightForGlyph(assemblyData.middle());
+ } else {
+ size = advanceForGlyph(assemblyData.left()) + advanceForGlyph(assemblyData.right());
+ if (assemblyData.middle().glyph)
+ size += advanceForGlyph(assemblyData.middle());
+ }
+ if (size > stretchSize())
</ins><span class="cx"> return data;
</span><span class="cx">
</span><span class="cx"> return assemblyData;
</span><span class="lines">@@ -1606,18 +1649,18 @@
</span><span class="cx"> if (!shouldAllowStretching())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- if (isLargeOperatorInDisplayStyle())
</del><ins>+ if (m_isVertical && isLargeOperatorInDisplayStyle())
</ins><span class="cx"> m_stretchyData = getDisplayStyleLargeOperator(m_operator);
</span><span class="cx"> else {
</span><span class="cx"> // We do not stretch if the base glyph is large enough.
</span><span class="cx"> GlyphData baseGlyph = style().font().glyphDataForCharacter(m_operator, false);
</span><del>- float baseHeight = heightForGlyph(baseGlyph);
- if (stretchSize() <= baseHeight)
</del><ins>+ float baseSize = m_isVertical ? heightForGlyph(baseGlyph) : advanceForGlyph(baseGlyph);
+ if (stretchSize() <= baseSize)
</ins><span class="cx"> return;
</span><span class="cx"> m_stretchyData = findStretchyData(m_operator, nullptr);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (m_stretchyData.mode() == DrawSizeVariant) {
</del><ins>+ if (m_isVertical && m_stretchyData.mode() == DrawSizeVariant) {
</ins><span class="cx"> // We resize the operator to match the one of the size variant.
</span><span class="cx"> if (isLargeOperatorInDisplayStyle()) {
</span><span class="cx"> // The stretch size is actually not involved in the selection of the size variant in getDisplayStyleLargeOperator.
</span><span class="lines">@@ -1634,6 +1677,37 @@
</span><span class="cx"> m_stretchDepthBelowBaseline *= aspect;
</span><span class="cx"> }
</span><span class="cx"> }
</span><ins>+
+ if (!m_isVertical) {
+ if (m_stretchyData.mode() == DrawSizeVariant) {
+ FloatRect glyphBounds = boundsForGlyph(m_stretchyData.variant());
+ m_stretchHeightAboveBaseline = -glyphBounds.y();
+ m_stretchDepthBelowBaseline = glyphBounds.maxY();
+ m_stretchWidth = advanceForGlyph(m_stretchyData.variant());
+ } else if (m_stretchyData.mode() == DrawGlyphAssembly) {
+ FloatRect glyphBounds;
+ m_stretchHeightAboveBaseline = 0;
+ m_stretchDepthBelowBaseline = 0;
+
+ glyphBounds = boundsForGlyph(m_stretchyData.left());
+ m_stretchHeightAboveBaseline = std::max<LayoutUnit>(m_stretchHeightAboveBaseline, -glyphBounds.y());
+ m_stretchDepthBelowBaseline = std::max<LayoutUnit>(m_stretchDepthBelowBaseline, glyphBounds.maxY());
+
+ glyphBounds = boundsForGlyph(m_stretchyData.right());
+ m_stretchHeightAboveBaseline = std::max<LayoutUnit>(m_stretchHeightAboveBaseline, -glyphBounds.y());
+ m_stretchDepthBelowBaseline = std::max<LayoutUnit>(m_stretchDepthBelowBaseline, glyphBounds.maxY());
+
+ glyphBounds = boundsForGlyph(m_stretchyData.extension());
+ m_stretchHeightAboveBaseline = std::max<LayoutUnit>(m_stretchHeightAboveBaseline, -glyphBounds.y());
+ m_stretchDepthBelowBaseline = std::max<LayoutUnit>(m_stretchDepthBelowBaseline, glyphBounds.maxY());
+
+ if (m_stretchyData.middle().glyph) {
+ glyphBounds = boundsForGlyph(m_stretchyData.middle());
+ m_stretchHeightAboveBaseline = std::max<LayoutUnit>(m_stretchHeightAboveBaseline, -glyphBounds.y());
+ m_stretchDepthBelowBaseline = std::max<LayoutUnit>(m_stretchDepthBelowBaseline, glyphBounds.maxY());
+ }
+ }
+ }
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> int RenderMathMLOperator::firstLineBaseline() const
</span><span class="lines">@@ -1646,7 +1720,7 @@
</span><span class="cx"> void RenderMathMLOperator::computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues& computedValues) const
</span><span class="cx"> {
</span><span class="cx"> if (m_stretchyData.mode() != DrawNormal)
</span><del>- logicalHeight = stretchSize();
</del><ins>+ logicalHeight = m_stretchHeightAboveBaseline + m_stretchDepthBelowBaseline;
</ins><span class="cx"> RenderBox::computeLogicalHeight(logicalHeight, logicalTop, computedValues);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1670,14 +1744,30 @@
</span><span class="cx"> glyphPaintRect.shiftMaxYEdgeTo(glyphPaintRect.maxY().floor() - 1);
</span><span class="cx"> clipBounds.shiftMaxYEdgeTo(glyphPaintRect.maxY());
</span><span class="cx"> break;
</span><del>- case TrimTopAndBottom:
</del><ins>+ case TrimTopAndBottom: {
</ins><span class="cx"> LayoutUnit temp = glyphPaintRect.y() + 1;
</span><span class="cx"> glyphPaintRect.shiftYEdgeTo(temp.ceil());
</span><span class="cx"> glyphPaintRect.shiftMaxYEdgeTo(glyphPaintRect.maxY().floor() - 1);
</span><span class="cx"> clipBounds.shiftYEdgeTo(glyphPaintRect.y());
</span><span class="cx"> clipBounds.shiftMaxYEdgeTo(glyphPaintRect.maxY());
</span><ins>+ }
</ins><span class="cx"> break;
</span><ins>+ case TrimLeft:
+ glyphPaintRect.shiftXEdgeTo(glyphPaintRect.x().ceil() + 1);
+ clipBounds.shiftXEdgeTo(glyphPaintRect.x());
+ break;
+ case TrimRight:
+ glyphPaintRect.shiftMaxXEdgeTo(glyphPaintRect.maxX().floor() - 1);
+ clipBounds.shiftMaxXEdgeTo(glyphPaintRect.maxX());
+ break;
+ case TrimLeftAndRight: {
+ LayoutUnit temp = glyphPaintRect.x() + 1;
+ glyphPaintRect.shiftXEdgeTo(temp.ceil());
+ glyphPaintRect.shiftMaxXEdgeTo(glyphPaintRect.maxX().floor() - 1);
+ clipBounds.shiftXEdgeTo(glyphPaintRect.x());
+ clipBounds.shiftMaxXEdgeTo(glyphPaintRect.maxX());
</ins><span class="cx"> }
</span><ins>+ }
</ins><span class="cx">
</span><span class="cx"> // Clipping the enclosing IntRect avoids any potential issues at joined edges.
</span><span class="cx"> GraphicsContextStateSaver stateSaver(*info.context);
</span><span class="lines">@@ -1690,8 +1780,9 @@
</span><span class="cx"> return glyphPaintRect;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderMathMLOperator::fillWithExtensionGlyph(PaintInfo& info, const LayoutPoint& from, const LayoutPoint& to)
</del><ins>+void RenderMathMLOperator::fillWithVerticalExtensionGlyph(PaintInfo& info, const LayoutPoint& from, const LayoutPoint& to)
</ins><span class="cx"> {
</span><ins>+ ASSERT(m_isVertical);
</ins><span class="cx"> ASSERT(m_stretchyData.mode() == DrawGlyphAssembly);
</span><span class="cx"> ASSERT(m_stretchyData.extension().glyph);
</span><span class="cx"> ASSERT(from.y() <= to.y());
</span><span class="lines">@@ -1727,6 +1818,42 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void RenderMathMLOperator::fillWithHorizontalExtensionGlyph(PaintInfo& info, const LayoutPoint& from, const LayoutPoint& to)
+{
+ ASSERT(!m_isVertical);
+ ASSERT(m_stretchyData.mode() == DrawGlyphAssembly);
+ ASSERT(m_stretchyData.extension().glyph);
+ ASSERT(from.x() <= to.x());
+
+ // If there is no space for the extension glyph, we don't need to do anything.
+ if (from.x() == to.x())
+ return;
+
+ GraphicsContextStateSaver stateSaver(*info.context);
+
+ // Clipping the extender region here allows us to draw the bottom extender glyph into the
+ // regions of the bottom glyph without worrying about overdraw (hairy pixels) and simplifies later clipping.
+ LayoutRect clipBounds = info.rect;
+ clipBounds.shiftXEdgeTo(from.x());
+ clipBounds.shiftMaxXEdgeTo(to.x());
+ info.context->clip(clipBounds);
+
+ // Trimming may remove up to two pixels from the left of the extender glyph, so we move it left by two pixels.
+ float offsetToGlyphLeft = -2;
+ LayoutPoint glyphOrigin = LayoutPoint(from.x() + offsetToGlyphLeft, std::min(from.y(), to.y()) + m_stretchHeightAboveBaseline);
+ FloatRect lastPaintedGlyphRect(from, FloatSize());
+
+ while (lastPaintedGlyphRect.maxX() < to.x()) {
+ lastPaintedGlyphRect = paintGlyph(info, m_stretchyData.extension(), glyphOrigin, TrimLeftAndRight);
+ glyphOrigin.setX(glyphOrigin.x() + lastPaintedGlyphRect.width());
+
+ // There's a chance that if the font size is small enough the glue glyph has been reduced to an empty rectangle
+ // with trimming. In that case we just draw nothing.
+ if (lastPaintedGlyphRect.isEmpty())
+ break;
+ }
+}
+
</ins><span class="cx"> void RenderMathMLOperator::paint(PaintInfo& info, const LayoutPoint& paintOffset)
</span><span class="cx"> {
</span><span class="cx"> RenderMathMLToken::paint(info, paintOffset);
</span><span class="lines">@@ -1750,6 +1877,15 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ if (m_isVertical)
+ paintVerticalGlyphAssembly(info, paintOffset);
+ else
+ paintHorizontalGlyphAssembly(info, paintOffset);
+}
+
+void RenderMathMLOperator::paintVerticalGlyphAssembly(PaintInfo& info, const LayoutPoint& paintOffset)
+{
+ ASSERT(m_isVertical);
</ins><span class="cx"> ASSERT(m_stretchyData.mode() == DrawGlyphAssembly);
</span><span class="cx"> ASSERT(m_stretchyData.top().glyph);
</span><span class="cx"> ASSERT(m_stretchyData.bottom().glyph);
</span><span class="lines">@@ -1774,12 +1910,41 @@
</span><span class="cx"> middleGlyphOrigin.moveBy(LayoutPoint(0, middleGlyphBounds.height() / 2.0));
</span><span class="cx">
</span><span class="cx"> LayoutRect middleGlyphPaintRect = paintGlyph(info, m_stretchyData.middle(), middleGlyphOrigin, TrimTopAndBottom);
</span><del>- fillWithExtensionGlyph(info, topGlyphPaintRect.minXMaxYCorner(), middleGlyphPaintRect.minXMinYCorner());
- fillWithExtensionGlyph(info, middleGlyphPaintRect.minXMaxYCorner(), bottomGlyphPaintRect.minXMinYCorner());
</del><ins>+ fillWithVerticalExtensionGlyph(info, topGlyphPaintRect.minXMaxYCorner(), middleGlyphPaintRect.minXMinYCorner());
+ fillWithVerticalExtensionGlyph(info, middleGlyphPaintRect.minXMaxYCorner(), bottomGlyphPaintRect.minXMinYCorner());
</ins><span class="cx"> } else
</span><del>- fillWithExtensionGlyph(info, topGlyphPaintRect.minXMaxYCorner(), bottomGlyphPaintRect.minXMinYCorner());
</del><ins>+ fillWithVerticalExtensionGlyph(info, topGlyphPaintRect.minXMaxYCorner(), bottomGlyphPaintRect.minXMinYCorner());
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+void RenderMathMLOperator::paintHorizontalGlyphAssembly(PaintInfo& info, const LayoutPoint& paintOffset)
+{
+ ASSERT(!m_isVertical);
+ ASSERT(m_stretchyData.mode() == DrawGlyphAssembly);
+ ASSERT(m_stretchyData.left().glyph);
+ ASSERT(m_stretchyData.right().glyph);
+
+ // We are positioning the glyphs so that the edge of the tight glyph bounds line up exactly with the edges of our paint box.
+ LayoutPoint operatorTopLeft = paintOffset + location();
+ operatorTopLeft.move(m_leadingSpace, 0);
+ operatorTopLeft = ceiledIntPoint(operatorTopLeft);
+ LayoutPoint leftGlyphOrigin(operatorTopLeft.x(), operatorTopLeft.y() + m_stretchHeightAboveBaseline);
+ LayoutRect leftGlyphPaintRect = paintGlyph(info, m_stretchyData.left(), leftGlyphOrigin, TrimRight);
+
+ FloatRect rightGlyphBounds = boundsForGlyph(m_stretchyData.right());
+ LayoutPoint rightGlyphOrigin(operatorTopLeft.x() + offsetWidth() - rightGlyphBounds.width(), operatorTopLeft.y() + m_stretchHeightAboveBaseline);
+ LayoutRect rightGlyphPaintRect = paintGlyph(info, m_stretchyData.right(), rightGlyphOrigin, TrimLeft);
+
+ if (m_stretchyData.middle().glyph) {
+ // Center the glyph origin between the start and end glyph paint extents.
+ LayoutPoint middleGlyphOrigin(operatorTopLeft.x(), leftGlyphOrigin.y());
+ middleGlyphOrigin.moveBy(LayoutPoint((rightGlyphPaintRect.x() - leftGlyphPaintRect.maxX()) / 2.0, 0));
+ LayoutRect middleGlyphPaintRect = paintGlyph(info, m_stretchyData.middle(), middleGlyphOrigin, TrimLeftAndRight);
+ fillWithHorizontalExtensionGlyph(info, leftGlyphPaintRect.maxXMinYCorner(), middleGlyphPaintRect.minXMinYCorner());
+ fillWithHorizontalExtensionGlyph(info, middleGlyphPaintRect.maxXMinYCorner(), rightGlyphPaintRect.minXMinYCorner());
+ } else
+ fillWithHorizontalExtensionGlyph(info, leftGlyphPaintRect.maxXMinYCorner(), rightGlyphPaintRect.minXMinYCorner());
+}
+
</ins><span class="cx"> void RenderMathMLOperator::paintChildren(PaintInfo& paintInfo, const LayoutPoint& paintOffset, PaintInfo& paintInfoForChild, bool usePrintRect)
</span><span class="cx"> {
</span><span class="cx"> // We skip painting for invisible operators too to avoid some "missing character" glyph to appear if appropriate math fonts are not available.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLOperatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLOperator.h        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -64,7 +64,8 @@
</span><span class="cx"> RenderMathMLOperator(Document&, PassRef<RenderStyle>, const String& operatorString, MathMLOperatorDictionary::Form, MathMLOperatorDictionary::Flag);
</span><span class="cx">
</span><span class="cx"> void stretchTo(LayoutUnit heightAboveBaseline, LayoutUnit depthBelowBaseline);
</span><del>- LayoutUnit stretchSize() const { return m_stretchHeightAboveBaseline + m_stretchDepthBelowBaseline; }
</del><ins>+ void stretchTo(LayoutUnit width);
+ LayoutUnit stretchSize() const { return m_isVertical ? m_stretchHeightAboveBaseline + m_stretchDepthBelowBaseline : m_stretchWidth; }
</ins><span class="cx">
</span><span class="cx"> bool hasOperatorFlag(MathMLOperatorDictionary::Flag flag) const { return m_operatorFlags & flag; }
</span><span class="cx"> // FIXME: The displaystyle property is not implemented (https://bugs.webkit.org/show_bug.cgi?id=118737).
</span><span class="lines">@@ -110,6 +111,8 @@
</span><span class="cx"> GlyphData extension() const { return m_data[1]; }
</span><span class="cx"> GlyphData bottom() const { return m_data[2]; }
</span><span class="cx"> GlyphData middle() const { return m_data[3]; }
</span><ins>+ GlyphData left() const { return m_data[2]; }
+ GlyphData right() const { return m_data[0]; }
</ins><span class="cx">
</span><span class="cx"> void setNormalMode()
</span><span class="cx"> {
</span><span class="lines">@@ -157,15 +160,23 @@
</span><span class="cx"> TrimTop,
</span><span class="cx"> TrimBottom,
</span><span class="cx"> TrimTopAndBottom,
</span><ins>+ TrimLeft,
+ TrimRight,
+ TrimLeftAndRight
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> LayoutRect paintGlyph(PaintInfo&, const GlyphData&, const LayoutPoint& origin, GlyphPaintTrimming);
</span><del>- void fillWithExtensionGlyph(PaintInfo&, const LayoutPoint& from, const LayoutPoint& to);
</del><ins>+ void fillWithVerticalExtensionGlyph(PaintInfo&, const LayoutPoint& from, const LayoutPoint& to);
+ void fillWithHorizontalExtensionGlyph(PaintInfo&, const LayoutPoint& from, const LayoutPoint& to);
+ void paintVerticalGlyphAssembly(PaintInfo&, const LayoutPoint&);
+ void paintHorizontalGlyphAssembly(PaintInfo&, const LayoutPoint&);
</ins><span class="cx">
</span><span class="cx"> LayoutUnit m_stretchHeightAboveBaseline;
</span><span class="cx"> LayoutUnit m_stretchDepthBelowBaseline;
</span><ins>+ LayoutUnit m_stretchWidth;
</ins><span class="cx">
</span><span class="cx"> UChar m_operator;
</span><ins>+ bool m_isVertical;
</ins><span class="cx"> StretchyData m_stretchyData;
</span><span class="cx"> MathMLOperatorDictionary::Form m_operatorForm;
</span><span class="cx"> unsigned short m_operatorFlags;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLUnderOvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -30,6 +30,9 @@
</span><span class="cx"> #include "RenderMathMLUnderOver.h"
</span><span class="cx">
</span><span class="cx"> #include "MathMLElement.h"
</span><ins>+#include "MathMLNames.h"
+#include "RenderIterator.h"
+#include "RenderMathMLOperator.h"
</ins><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="lines">@@ -68,6 +71,27 @@
</span><span class="cx"> return baseline;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void RenderMathMLUnderOver::layout()
+{
+ LayoutUnit stretchWidth = 0;
+ for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
+ if (child->needsLayout())
+ toRenderElement(child)->layout();
+ // Skipping the embellished op does not work for nested structures like
+ // <munder><mover><mo>_</mo>...</mover> <mo>_</mo></munder>.
+ if (child->isBox())
+ stretchWidth = std::max<LayoutUnit>(stretchWidth, toRenderBox(child)->logicalWidth());
+ }
+
+ // Set the sizes of (possibly embellished) stretchy operator children.
+ for (auto& child : childrenOfType<RenderMathMLBlock>(*this)) {
+ if (auto renderOperator = child.unembellishedOperator())
+ renderOperator->stretchTo(stretchWidth);
+ }
+
+ RenderMathMLBlock::layout();
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+}
+
</ins><span class="cx"> #endif // ENABLE(MATHML)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLUnderOverh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h (169606 => 169607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h        2014-06-05 04:52:57 UTC (rev 169606)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h        2014-06-05 06:35:04 UTC (rev 169607)
</span><span class="lines">@@ -40,6 +40,9 @@
</span><span class="cx">
</span><span class="cx"> virtual int firstLineBaseline() const override;
</span><span class="cx">
</span><ins>+protected:
+ virtual void layout();
+
</ins><span class="cx"> private:
</span><span class="cx"> virtual bool isRenderMathMLUnderOver() const override { return true; }
</span><span class="cx"> virtual const char* renderName() const override { return "RenderMathMLUnderOver"; }
</span></span></pre>
</div>
</div>
</body>
</html>