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; }