2011-01-10 François Sausset <sausset@gmail.com>
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Jan 2011 18:34:10 +0000 (18:34 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Jan 2011 18:34:10 +0000 (18:34 +0000)
        Reviewed by Kenneth Rohde Christiansen.

        Updated tests and results to take into account new default fraction bar thickness.
        https://bugs.webkit.org/show_bug.cgi?id=50018

        * mathml/presentation/fractions.xhtml:
        * platform/mac/mathml/presentation/fractions-expected.checksum:
        * platform/mac/mathml/presentation/fractions-expected.png:
        * platform/mac/mathml/presentation/fractions-expected.txt:
2011-01-10  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        MathML: vertical alignment & bar thickness adjustments of fractions.
        https://bugs.webkit.org/show_bug.cgi?id=50018

        The fraction bar thickness default value should follow the w3c MathML 3 recommendation:
        http://www.w3.org/TR/MathML3/chapter3.html#presm.mfrac
        The vertical alignment of the fraction bar should be more accurate, specially with operators (+,=,...).

        Test: mathml/presentation/fractions.xhtml

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::RenderMathMLFraction):
        (WebCore::RenderMathMLFraction::updateFromElement):
        (WebCore::RenderMathMLFraction::layout):
        (WebCore::RenderMathMLFraction::paint):
        (WebCore::RenderMathMLFraction::baselinePosition):
        * rendering/mathml/RenderMathMLFraction.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75385 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/mathml/presentation/fractions.xhtml
LayoutTests/platform/mac/mathml/presentation/fractions-expected.checksum
LayoutTests/platform/mac/mathml/presentation/fractions-expected.png
LayoutTests/platform/mac/mathml/presentation/fractions-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp
Source/WebCore/rendering/mathml/RenderMathMLFraction.h

index 3d7c17cb1e054594bd1a292e78d41b5f0ee7421d..f710529a849b2dc6dc60da074f398bcf96b1bae4 100644 (file)
@@ -1,3 +1,15 @@
+2011-01-10  François Sausset  <sausset@gmail.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        Updated tests and results to take into account new default fraction bar thickness.
+        https://bugs.webkit.org/show_bug.cgi?id=50018
+
+        * mathml/presentation/fractions.xhtml:
+        * platform/mac/mathml/presentation/fractions-expected.checksum:
+        * platform/mac/mathml/presentation/fractions-expected.png:
+        * platform/mac/mathml/presentation/fractions-expected.txt:
+
 2011-01-10  Antti Koivisto  <antti@apple.com>
 
         Reviewed by Alexey Proskuryakov.
index 7b5729b094de2fcf951d4b4c5d9605dbab7b0ec6..4307c1567dd66b1843b732db764cfb18faa1e12f 100644 (file)
 </math>
 </p>
 <p id='t4'>line thickness by keyword:
-<math xmlns='http://www.w3.org/1998/Math/MathML'><mfrac linethickness='thin'><mn>1</mn><mn>2</mn></mfrac></math><math xmlns='http://www.w3.org/1998/Math/MathML'><mfrac linethickness='medium'><mn>1</mn><mn>2</mn></mfrac></math><math xmlns='http://www.w3.org/1998/Math/MathML'><mfrac linethickness='thick'><mn>1</mn><mn>2</mn></mfrac></math></p>
+<math xmlns='http://www.w3.org/1998/Math/MathML' mathsize="32 px">
+    <mfrac linethickness='thin'><mn>1</mn><mn>2</mn></mfrac>
+    <mfrac linethickness='medium'><mn>1</mn><mn>2</mn></mfrac>
+    <mfrac linethickness='thick'><mn>1</mn><mn>2</mn></mfrac>
+</math>
+</p>
 <p id='t5'>numerator alignment:
 <math xmlns='http://www.w3.org/1998/Math/MathML'>
 <mfrac numalign="left">
index e37785add13d650f8f991437d5cfaa188770d014..9e09676906a4c25567578f10cf32150a10298b80 100644 (file)
@@ -1 +1 @@
-08c2ac720e5221dcf5501db5a22c2cb2
\ No newline at end of file
+b481459bc37774ceb0b456b95eff6fa6
\ No newline at end of file
index 437f7d76e5aa04dd92e68b1d7d5e3ee20f22888a..224b9b92e2c71c956fe329944b1def45d1dfc8ab 100644 (file)
Binary files a/LayoutTests/platform/mac/mathml/presentation/fractions-expected.png and b/LayoutTests/platform/mac/mathml/presentation/fractions-expected.png differ
index 2592bca8ae30f7e5b0aa0f7011750e1882d18822..fca2fb0750e8ba01e3945ca52d29725802a1e3bd 100644 (file)
@@ -1,8 +1,8 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x320
-  RenderBlock {html} at (0,0) size 800x320
-    RenderBody {body} at (8,16) size 784x288
+layer at (0,0) size 800x352
+  RenderBlock {html} at (0,0) size 800x352
+    RenderBody {body} at (8,16) size 784x320
       RenderBlock {p} at (0,0) size 784x34
         RenderText {#text} at (0,7) size 49x18
           text run at (0,7) width 49: "simple: "
@@ -60,40 +60,39 @@ layer at (0,0) size 800x320
                 RenderText {#text} at (3,2) size 120x16
                   text run at (3,2) width 120: "number of changes"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,150) size 784x38
-        RenderText {#text} at (0,7) size 173x18
-          text run at (0,7) width 173: "line thickness by keyword: "
-        RenderBlock {math} at (173,0) size 16x34
-          RenderBlock {mfrac} at (1,0) size 14x34
-            RenderBlock {mfrac} at (0,0) size 14x16
-              RenderInline {mn} at (0,0) size 8x16
-                RenderText {#text} at (3,0) size 8x16
-                  text run at (3,0) width 8: "1"
-            RenderBlock {mfrac} at (0,16) size 14x18
-              RenderInline {mn} at (0,0) size 8x16
-                RenderText {#text} at (3,2) size 8x16
-                  text run at (3,2) width 8: "2"
-        RenderBlock {math} at (189,0) size 16x36
-          RenderBlock {mfrac} at (1,0) size 14x36
-            RenderBlock {mfrac} at (0,0) size 14x16
-              RenderInline {mn} at (0,0) size 8x16
-                RenderText {#text} at (3,0) size 8x16
-                  text run at (3,0) width 8: "1"
-            RenderBlock {mfrac} at (0,16) size 14x20
-              RenderInline {mn} at (0,0) size 8x16
-                RenderText {#text} at (3,4) size 8x16
-                  text run at (3,4) width 8: "2"
-        RenderBlock {math} at (205,0) size 16x38
-          RenderBlock {mfrac} at (1,0) size 14x38
-            RenderBlock {mfrac} at (0,0) size 14x16
-              RenderInline {mn} at (0,0) size 8x16
-                RenderText {#text} at (3,0) size 8x16
-                  text run at (3,0) width 8: "1"
-            RenderBlock {mfrac} at (0,16) size 14x22
-              RenderInline {mn} at (0,0) size 8x16
-                RenderText {#text} at (3,6) size 8x16
-                  text run at (3,6) width 8: "2"
-      RenderBlock {p} at (0,204) size 784x34
+      RenderBlock {p} at (0,150) size 784x70
+        RenderText {#text} at (0,26) size 173x18
+          text run at (0,26) width 173: "line thickness by keyword: "
+        RenderBlock {math} at (173,0) size 86x70
+          RenderBlock {mfrac} at (1,0) size 28x67
+            RenderBlock {mfrac} at (0,0) size 28x32
+              RenderInline {mn} at (0,0) size 16x32
+                RenderText {#text} at (6,0) size 16x32
+                  text run at (6,0) width 16: "1"
+            RenderBlock {mfrac} at (0,32) size 28x35
+              RenderInline {mn} at (0,0) size 16x32
+                RenderText {#text} at (6,3) size 16x32
+                  text run at (6,3) width 16: "2"
+          RenderBlock {mfrac} at (29,0) size 28x68
+            RenderBlock {mfrac} at (0,0) size 28x32
+              RenderInline {mn} at (0,0) size 16x32
+                RenderText {#text} at (6,0) size 16x32
+                  text run at (6,0) width 16: "1"
+            RenderBlock {mfrac} at (0,32) size 28x36
+              RenderInline {mn} at (0,0) size 16x32
+                RenderText {#text} at (6,4) size 16x32
+                  text run at (6,4) width 16: "2"
+          RenderBlock {mfrac} at (57,0) size 28x70
+            RenderBlock {mfrac} at (0,0) size 28x32
+              RenderInline {mn} at (0,0) size 16x32
+                RenderText {#text} at (6,0) size 16x32
+                  text run at (6,0) width 16: "1"
+            RenderBlock {mfrac} at (0,32) size 28x38
+              RenderInline {mn} at (0,0) size 16x32
+                RenderText {#text} at (6,6) size 16x32
+                  text run at (6,6) width 16: "2"
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {p} at (0,236) size 784x34
         RenderText {#text} at (0,7) size 138x18
           text run at (0,7) width 138: "numerator alignment: "
         RenderBlock {math} at (138,0) size 89x34
@@ -218,7 +217,7 @@ layer at (0,0) size 800x320
                   RenderText {#text} at (72,0) size 8x16
                     text run at (72,0) width 8: "5"
         RenderText {#text} at (0,0) size 0x0
-      RenderBlock {p} at (0,254) size 784x34
+      RenderBlock {p} at (0,286) size 784x34
         RenderText {#text} at (0,7) size 153x18
           text run at (0,7) width 153: "denominator alignment: "
         RenderBlock {math} at (153,0) size 88x34
index 8870ba7f282145ecfebb626f55441c8b022319a3..bb16440459a48366ac34a2f3cb5417f1b27750b4 100644 (file)
@@ -1,3 +1,24 @@
+2011-01-10  François Sausset  <sausset@gmail.com>
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        MathML: vertical alignment & bar thickness adjustments of fractions.
+        https://bugs.webkit.org/show_bug.cgi?id=50018
+
+        The fraction bar thickness default value should follow the w3c MathML 3 recommendation:
+        http://www.w3.org/TR/MathML3/chapter3.html#presm.mfrac
+        The vertical alignment of the fraction bar should be more accurate, specially with operators (+,=,...).
+
+        Test: mathml/presentation/fractions.xhtml
+
+        * rendering/mathml/RenderMathMLFraction.cpp:
+        (WebCore::RenderMathMLFraction::RenderMathMLFraction):
+        (WebCore::RenderMathMLFraction::updateFromElement):
+        (WebCore::RenderMathMLFraction::layout):
+        (WebCore::RenderMathMLFraction::paint):
+        (WebCore::RenderMathMLFraction::baselinePosition):
+        * rendering/mathml/RenderMathMLFraction.h:
+
 2011-01-10  Antti Koivisto  <antti@apple.com>
 
         Reviewed by Alexey Proskuryakov.
index 1435be7f36d3aac2c075d264a864b6d252870f3b..dcee2f0fc1d13d104e387da05ec8c88d3a5376fd 100644 (file)
@@ -39,16 +39,15 @@ namespace WebCore {
 using namespace MathMLNames;
 
 static const double gHorizontalPad = 0.2;
-static const int gLineThin = 1;
-static const int gLineMedium = 3;
-static const int gLineThick = 5;
-static const double gFractionAlignment = 0.25;
+static const double gLineThin = 0.33;
+static const double gLineMedium = 1.;
+static const double gLineThick = 3.;
 static const double gFractionBarWidth = 0.05;
 static const double gDenominatorPad = 0.1;
 
 RenderMathMLFraction::RenderMathMLFraction(Element* fraction) 
     : RenderMathMLBlock(fraction)
-    , m_lineThickness(gLineThin)
+    , m_lineThickness(gLineMedium)
 {
     setChildrenInline(false);
 }
@@ -84,7 +83,7 @@ void RenderMathMLFraction::updateFromElement()
     
     // FIXME: parse units
     String thickness = fraction->getAttribute(MathMLNames::linethicknessAttr);
-    m_lineThickness = gLineThin;
+    m_lineThickness = gLineMedium;
     if (equalIgnoringCase(thickness, "thin"))
         m_lineThickness = gLineThin;
     else if (equalIgnoringCase(thickness, "medium"))
@@ -125,7 +124,7 @@ void RenderMathMLFraction::layout()
 
     // Adjust the fraction line thickness for the zoom
     if (lastChild() && lastChild()->isRenderBlock())
-        m_lineThickness = static_cast<int>(m_lineThickness * ceil(gFractionBarWidth * style()->fontSize()));
+        m_lineThickness *= ceil(gFractionBarWidth * style()->fontSize());
 
     RenderBlock::layout();
 
@@ -143,8 +142,8 @@ void RenderMathMLFraction::paint(PaintInfo& info, int tx, int ty)
     int verticalOffset = 0;
     // The children are always RenderMathMLBlock instances
     if (firstChild()->isRenderMathMLBlock()) {
-        int adjustForThickness = m_lineThickness > 1 ? m_lineThickness / 2 : 1;
-        if (m_lineThickness % 2 == 1)
+        int adjustForThickness = m_lineThickness > 1 ? int(m_lineThickness / 2) : 1;
+        if (int(m_lineThickness) % 2 == 1)
             adjustForThickness++;
         RenderMathMLBlock* numerator = toRenderMathMLBlock(firstChild());
         if (numerator->isRenderMathMLRow())
@@ -158,7 +157,7 @@ void RenderMathMLFraction::paint(PaintInfo& info, int tx, int ty)
     
     info.context->save();
     
-    info.context->setStrokeThickness(static_cast<float>(m_lineThickness));
+    info.context->setStrokeThickness(m_lineThickness);
     info.context->setStrokeStyle(SolidStroke);
     info.context->setStrokeColor(style()->visitedDependentColor(CSSPropertyColor), ColorSpaceSRGB);
     
@@ -171,11 +170,13 @@ int RenderMathMLFraction::baselinePosition(FontBaseline, bool firstLine, LineDir
 {
     if (firstChild() && firstChild()->isRenderMathMLBlock()) {
         RenderMathMLBlock* numerator = toRenderMathMLBlock(firstChild());
-        // FIXME: the baseline should adjust so the fraction line aligns
-        // relative certain operators (e.g. aligns with the horizontal
-        // stroke of the plus).  1/3 of the current font size is just
-        // a good guess.
-        return numerator->offsetHeight() + style()->fontSize() / 3;
+        RenderStyle* refStyle = style();
+        if (previousSibling())
+            refStyle = previousSibling()->style();
+        else if (nextSibling())
+            refStyle = nextSibling()->style();
+        int shift = int(ceil((refStyle->font().xHeight() + 1) / 2));
+        return numerator->offsetHeight() + shift;
     }
     return RenderBlock::baselinePosition(AlphabeticBaseline, firstLine, lineDirection, linePositionMode);
 }
index 8a3a9ed3196e4563d4c6bc25370232cd7ad9d2ff..2a03f81dcc1a1dab7c4d70f52ad65029fd0670ea 100644 (file)
@@ -43,7 +43,7 @@ public:
 protected:
     virtual void layout();
 private:
-    int m_lineThickness;
+    double m_lineThickness;
 };
 
 }