Bug 1219068 - Compute size correctly when a character consists entirely of glue. r=karlt
authorJames Kitchener <jkitch.bug@gmail.com>
Fri, 29 Jan 2016 01:36:00 +0100
changeset 327110 d8329476b632ddbf9ed7124ef305ee4c075b106e
parent 327109 ad4fae74b6a31041cd4586072df5baeaae216c2f
child 327111 7cfbfa3139b409532c1066682546d7fead2d4a65
push id10194
push userdmitchell@mozilla.com
push dateFri, 29 Jan 2016 17:28:53 +0000
reviewerskarlt
bugs1219068
milestone47.0a1
Bug 1219068 - Compute size correctly when a character consists entirely of glue. r=karlt
layout/mathml/nsMathMLChar.cpp
layout/reftests/mathml/mo-glyph-size-ref.html
layout/reftests/mathml/mo-glyph-size.html
layout/reftests/mathml/reftest.list
--- a/layout/mathml/nsMathMLChar.cpp
+++ b/layout/mathml/nsMathMLChar.cpp
@@ -937,19 +937,17 @@ ComputeSizeFromParts(nsPresContext* aPre
                      nsGlyphCode* aGlyphs,
                      nscoord*     aSizes,
                      nscoord      aTargetSize)
 {
   enum {first, middle, last, glue};
   // Add the parts that cannot be left out.
   nscoord sum = 0;
   for (int32_t i = first; i <= last; i++) {
-    if (aGlyphs[i] != aGlyphs[glue]) {
-      sum += aSizes[i];
-    }
+    sum += aSizes[i];
   }
 
   // Determine how much is used in joins
   nscoord oneDevPixel = aPresContext->AppUnitsPerDevPixel();
   int32_t joins = aGlyphs[middle] == aGlyphs[glue] ? 1 : 2;
 
   // Pick a maximum size using a maximum number of glue glyphs that we are
   // prepared to draw for one character.
new file mode 100644
--- /dev/null
+++ b/layout/reftests/mathml/mo-glyph-size-ref.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+</head>
+<body>
+<!-- Bug 1219068 -->
+
+<div id="hider"
+     style="position:absolute; top:0; left:0; background-color:green;
+            height:1em; width:100%; z-index:1; padding-top:5px;
+            padding-bottom:5px;" />
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/mathml/mo-glyph-size.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<meta charset="UTF-8">
+</head>
+<body>
+<!-- Bug 1219068 -->
+
+<math style="position:absolute; top: 0; font-size:1em;  z-index: 0;" display="block">
+<mrow>
+  <mo>|</mo>
+  <mrow>
+    <mi>f</mi>
+    <mrow>
+      <mn>(</mn>
+      <mi>x</mi>
+      <mn>)</mn>
+    </mrow>
+    <mn>-</mn>
+    <mrow>
+      <mi>f</mi>
+      <mrow>
+        <mn>(</mn>
+        <msub>
+          <mi>x</mi>
+          <mn>0</mn>
+        </msub>
+        <mn>)</mn>
+      </mrow>
+    </mrow>
+  </mrow>
+  <mo>|</mo>
+</mrow>
+</math>
+<div id="hider"
+     style="position:absolute; top:0; left:0; background-color:green;
+            height:1em; width:100%; z-index:1; padding-top:5px;
+            padding-bottom:5px; visibility:hidden" />
+  <script>
+    function obscureMathML() {
+      var hider = document.getElementById("hider");
+      hider.style.visibility="visible";
+      // The math should now be completely obscured
+
+      document.documentElement.removeAttribute("class");
+    }
+    window.addEventListener("MozReftestInvalidate", obscureMathML, false);
+  </script>
+</body>
+</html>
--- a/layout/reftests/mathml/reftest.list
+++ b/layout/reftests/mathml/reftest.list
@@ -185,16 +185,17 @@ fails-if(Mulet) == mpadded-7.html mpadde
 skip-if(B2G||Mulet) == maction-dynamic-1.html maction-dynamic-1-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
 == maction-dynamic-2.html maction-dynamic-2-ref.html
 == mo-lspace-rspace.html mo-lspace-rspace-ref.html
 == mo-lspace-rspace-2.html mo-lspace-rspace-2-ref.html
 == mo-lspace-rspace-3.html mo-lspace-rspace-3-ref.html
 == mo-lspace-rspace-4.html mo-lspace-rspace-4-ref.html
 == mo-invisibleoperators.html mo-invisibleoperators-ref.html
 == mo-invisibleoperators-2.html mo-invisibleoperators-2-ref.html
+== mo-glyph-size.html mo-glyph-size-ref.html
 skip-if(B2G||Mulet) == maction-dynamic-3.html maction-dynamic-3-ref.html # bug 773482 # Initial mulet triage: parity with B2G/B2G Desktop
 == whitespace-trim-1.html whitespace-trim-1-ref.html
 == whitespace-trim-2.html whitespace-trim-2-ref.html
 == whitespace-trim-3.html whitespace-trim-3-ref.html
 fails == whitespace-trim-4.html whitespace-trim-4-ref.html # Bug 787215
 == whitespace-trim-5.html whitespace-trim-5-ref.html
 random-if(winWidget&&!d2d) == opentype-stretchy.html opentype-stretchy-ref.html
 == opentype-fraction-dynamic-linethickness.html opentype-fraction-dynamic-linethickness-ref.html