Title: [118900] trunk
Revision
118900
Author
[email protected]
Date
2012-05-30 00:01:08 -0700 (Wed, 30 May 2012)

Log Message

CSS3 calc: Implement CSSOM support
https://bugs.webkit.org/show_bug.cgi?id=84551

Reviewed by Ryosuke Niwa.

Source/WebCore:

Adds a pretty printer for the calc _expression_ tree.

Test: css3/calc/cssom.html

* css/CSSCalculationValue.cpp:
(WebCore::CSSCalcValue::customCssText):
(WebCore::CSSCalcPrimitiveValue::customCssText):
(WebCore::CSSCalcBinaryOperation::customCssText):
(CSSCalcBinaryOperation):
* css/CSSCalculationValue.h:
(CSSCalcExpressionNode):

LayoutTests:

* css3/calc/cssom-expected.txt: Added.
* css3/calc/cssom.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (118899 => 118900)


--- trunk/LayoutTests/ChangeLog	2012-05-30 07:00:50 UTC (rev 118899)
+++ trunk/LayoutTests/ChangeLog	2012-05-30 07:01:08 UTC (rev 118900)
@@ -1,3 +1,13 @@
+2012-05-30  Mike Lawther  <[email protected]>
+
+        CSS3 calc: Implement CSSOM support
+        https://bugs.webkit.org/show_bug.cgi?id=84551
+
+        Reviewed by Ryosuke Niwa.
+
+        * css3/calc/cssom-expected.txt: Added.
+        * css3/calc/cssom.html: Added.
+
 2012-05-29  Li Yin  <[email protected]>
 
         [FileAPI] The result attribute of FileReader shuold use null to replace empty string

Added: trunk/LayoutTests/css3/calc/cssom-expected.txt (0 => 118900)


--- trunk/LayoutTests/css3/calc/cssom-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/css3/calc/cssom-expected.txt	2012-05-30 07:01:08 UTC (rev 118900)
@@ -0,0 +1,15 @@
+This tests calc() and the CSSOM
+
+10px => -webkit-calc(10px)
+10px + 15px => -webkit-calc(10px + 15px)
+100% => -webkit-calc(100%)
+100% - 10px => -webkit-calc(100% - 10px)
+10px + 10px * 5 => -webkit-calc(10px + (10px * 5))
+5px + 2em + 6in => -webkit-calc((5px + 2em) + 6in)
+100% - 10px / 2 => -webkit-calc(100% - (10px / 2))
+1px + 2em - 3rem + 4in => -webkit-calc(((1px + 2em) - 3rem) + 4in)
+100px * (1 + 2 * 3 - 4 / 5) => -webkit-calc(100px * ((1 + (2 * 3)) - (4 / 5)))
+(100px) + 200px => -webkit-calc(100px + 200px)
+((((((((((100px)))))))))) => -webkit-calc(100px)
+flimstix => -webkit-calc(100px)
+

Added: trunk/LayoutTests/css3/calc/cssom.html (0 => 118900)


--- trunk/LayoutTests/css3/calc/cssom.html	                        (rev 0)
+++ trunk/LayoutTests/css3/calc/cssom.html	2012-05-30 07:01:08 UTC (rev 118900)
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML>
+<div id="dummy"></div>
+<div id="results">This tests calc() and the CSSOM<br><br></div>
+<script>
+if (window.layoutTestController)
+    window.layoutTestController.dumpAsText();
+
+var tests = ["10px", 
+             "10px + 15px", 
+             "100%", 
+             "100% - 10px",
+             "10px + 10px * 5",
+             "5px + 2em + 6in",
+             "100% - 10px / 2",
+             "1px + 2em - 3rem + 4in",
+             "100px * (1 + 2 * 3 - 4 / 5)",
+             "(100px) + 200px",
+             "((((((((((100px))))))))))",
+             "flimstix"];
+             
+var results = document.getElementById("results");
+var dummy = document.getElementById("dummy");
+for (var i = 0; i < tests.length; ++i) {
+    var _expression_ = tests[i];
+    dummy.style.width = 'calc(' + _expression_ + ')';
+    dummy.style.width = '-webkit-calc(' + _expression_ + ')';
+    dummy.style.width = '-moz-calc(' + _expression_ + ')';
+    results.innerHTML += _expression_ + " => " + dummy.style.width + "<br>";
+}
+</script>

Modified: trunk/Source/WebCore/ChangeLog (118899 => 118900)


--- trunk/Source/WebCore/ChangeLog	2012-05-30 07:00:50 UTC (rev 118899)
+++ trunk/Source/WebCore/ChangeLog	2012-05-30 07:01:08 UTC (rev 118900)
@@ -1,3 +1,22 @@
+2012-05-30  Mike Lawther  <[email protected]>
+
+        CSS3 calc: Implement CSSOM support
+        https://bugs.webkit.org/show_bug.cgi?id=84551
+
+        Reviewed by Ryosuke Niwa.
+
+        Adds a pretty printer for the calc _expression_ tree. 
+
+        Test: css3/calc/cssom.html
+
+        * css/CSSCalculationValue.cpp:
+        (WebCore::CSSCalcValue::customCssText):
+        (WebCore::CSSCalcPrimitiveValue::customCssText):
+        (WebCore::CSSCalcBinaryOperation::customCssText):
+        (CSSCalcBinaryOperation):
+        * css/CSSCalculationValue.h:
+        (CSSCalcExpressionNode):
+
 2012-05-29  Li Yin  <[email protected]>
 
         [FileAPI] The result attribute of FileReader shuold use null to replace empty string

Modified: trunk/Source/WebCore/css/CSSCalculationValue.cpp (118899 => 118900)


--- trunk/Source/WebCore/css/CSSCalculationValue.cpp	2012-05-30 07:00:50 UTC (rev 118899)
+++ trunk/Source/WebCore/css/CSSCalculationValue.cpp	2012-05-30 07:01:08 UTC (rev 118900)
@@ -74,7 +74,17 @@
     
 String CSSCalcValue::customCssText() const
 {
-    return "";
+    StringBuilder result;
+    
+    result.append("-webkit-calc");
+    String _expression_ = m_expression->customCssText();
+    bool expressionHasSingleTerm = _expression_[0] != '(';
+    if (expressionHasSingleTerm)
+        result.append('(');
+    result.append(_expression_);
+    if (expressionHasSingleTerm)
+        result.append(')');
+    return result.toString(); 
 }
     
 double CSSCalcValue::clampToPermittedRange(double value) const
@@ -109,7 +119,7 @@
         return !m_value->getDoubleValue();
     }
 
-    virtual String cssText() const
+    virtual String customCssText() const
     {
         return m_value->cssText();
     }
@@ -250,6 +260,20 @@
         return evaluate(leftValue, rightValue);
     }
 
+    virtual String customCssText() const
+    {
+        StringBuilder result;
+        result.append('(');
+        result.append(m_leftSide->customCssText());
+        result.append(' ');
+        result.append(static_cast<char>(m_operator));
+        result.append(' ');
+        result.append(m_rightSide->customCssText());
+        result.append(')');
+    
+        return result.toString();    
+    }
+
 private:
     CSSCalcBinaryOperation(PassRefPtr<CSSCalcExpressionNode> leftSide, PassRefPtr<CSSCalcExpressionNode> rightSide, CalcOperator op, CalculationCategory category)
         : CSSCalcExpressionNode(category, leftSide->isInteger() && rightSide->isInteger())

Modified: trunk/Source/WebCore/css/CSSCalculationValue.h (118899 => 118900)


--- trunk/Source/WebCore/css/CSSCalculationValue.h	2012-05-30 07:00:50 UTC (rev 118899)
+++ trunk/Source/WebCore/css/CSSCalculationValue.h	2012-05-30 07:01:08 UTC (rev 118900)
@@ -63,6 +63,7 @@
     virtual PassOwnPtr<CalcExpressionNode> toCalcValue(RenderStyle*, RenderStyle* rootStyle, double zoom = 1.0) const = 0;    
     virtual double doubleValue() const = 0;
     virtual double computeLengthPx(RenderStyle* currentStyle, RenderStyle* rootStyle, double multiplier = 1.0, bool computingFontSize = false) const = 0;
+    virtual String customCssText() const = 0;
     
     CalculationCategory category() const { return m_category; }    
     bool isInteger() const { return m_isInteger; }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to