Title: [110934] trunk
Revision
110934
Author
[email protected]
Date
2012-03-15 20:14:35 -0700 (Thu, 15 Mar 2012)

Log Message

CSS3 calc: mixed percent/absolute expressions for gradients
https://bugs.webkit.org/show_bug.cgi?id=81182

Reviewed by Ojan Vafai.

Source/WebCore:

* css/CSSGradientValue.cpp:
(WebCore::CSSGradientValue::addStops):
(WebCore::positionFromValue):

LayoutTests:

Add new tests for mixed percent/absolute expressions.

* css3/calc/css3-radial-gradients-expected.html:
* css3/calc/css3-radial-gradients.html:
* css3/calc/gradient-color-stops-expected.html:
* css3/calc/gradient-color-stops.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (110933 => 110934)


--- trunk/LayoutTests/ChangeLog	2012-03-16 03:13:28 UTC (rev 110933)
+++ trunk/LayoutTests/ChangeLog	2012-03-16 03:14:35 UTC (rev 110934)
@@ -1,3 +1,17 @@
+2012-03-15  Mike Lawther  <[email protected]>
+
+        CSS3 calc: mixed percent/absolute expressions for gradients
+        https://bugs.webkit.org/show_bug.cgi?id=81182
+
+        Reviewed by Ojan Vafai.
+
+        Add new tests for mixed percent/absolute expressions.
+
+        * css3/calc/css3-radial-gradients-expected.html:
+        * css3/calc/css3-radial-gradients.html:
+        * css3/calc/gradient-color-stops-expected.html:
+        * css3/calc/gradient-color-stops.html:
+
 2012-03-15  David Grogan  <[email protected]>
 
         IndexedDB Tests: use self instead of window

Modified: trunk/LayoutTests/css3/calc/css3-radial-gradients-expected.html (110933 => 110934)


--- trunk/LayoutTests/css3/calc/css3-radial-gradients-expected.html	2012-03-16 03:13:28 UTC (rev 110933)
+++ trunk/LayoutTests/css3/calc/css3-radial-gradients-expected.html	2012-03-16 03:14:35 UTC (rev 110934)
@@ -42,6 +42,11 @@
     background-image: -webkit-radial-gradient(20% 20%, circle closest-corner, red -50%, green, blue 150%);
     background-image: -moz-radial-gradient(20% 20%, circle closest-corner, red -50%, green, blue 150%);
 }
+
+.gradient8 {
+    background-image: -webkit-radial-gradient(circle closest-side, red, green 40px, blue);
+    background-image: -moz-radial-gradient(circle closest-side, red, green 40px, blue);
+}
 </style>
 <body>
     <div class="gradient1 box"></div>
@@ -53,4 +58,5 @@
     <div class="gradient6 box"></div>
     <br>
     <div class="gradient7 box"></div>
+    <div class="gradient8 box"></div>
 </body>

Modified: trunk/LayoutTests/css3/calc/css3-radial-gradients.html (110933 => 110934)


--- trunk/LayoutTests/css3/calc/css3-radial-gradients.html	2012-03-16 03:13:28 UTC (rev 110933)
+++ trunk/LayoutTests/css3/calc/css3-radial-gradients.html	2012-03-16 03:14:35 UTC (rev 110934)
@@ -42,6 +42,11 @@
     background-image: -webkit-radial-gradient(-webkit-calc(20%) -webkit-calc(20%), circle closest-corner, red -50%, green, blue -webkit-calc(150%));
     background-image: -moz-radial-gradient(-webkit-calc(20%) -webkit-calc(20%), circle closest-corner, red -50%, green, blue -webkit-calc(150%));
 }
+
+.gradient8 {
+    background-image: -webkit-radial-gradient(circle closest-side, red, green -webkit-calc(50% + 10px), blue);
+    background-image: -moz-radial-gradient(circle closest-side, red, green -moz-calc(50% + 10px), blue);
+}
 </style>
 <body>
     <div class="gradient1 box"></div>
@@ -53,4 +58,5 @@
     <div class="gradient6 box"></div>
     <br>
     <div class="gradient7 box"></div>
+    <div class="gradient8 box"></div>
 </body>

Modified: trunk/LayoutTests/css3/calc/gradient-color-stops-expected.html (110933 => 110934)


--- trunk/LayoutTests/css3/calc/gradient-color-stops-expected.html	2012-03-16 03:13:28 UTC (rev 110933)
+++ trunk/LayoutTests/css3/calc/gradient-color-stops-expected.html	2012-03-16 03:14:35 UTC (rev 110934)
@@ -33,6 +33,12 @@
     background-image: -webkit-linear-gradient(left, red, green 120%, blue);
     background-image: -moz-linear-gradient(left, red, green 120%, blue);
 }
+
+.linear6 {
+    background-image: -webkit-linear-gradient(left, red, green 120px, blue);
+    background-image: -moz-linear-gradient(left, red, green 120px, blue);
+}
+
 </style>
 <body>
   <div class="linear1 box"></div>
@@ -41,4 +47,5 @@
   <br>
   <div class="linear4 box"></div>
   <div class="linear5 box"></div>
+  <div class="linear6 box"></div>
 </body>

Modified: trunk/LayoutTests/css3/calc/gradient-color-stops.html (110933 => 110934)


--- trunk/LayoutTests/css3/calc/gradient-color-stops.html	2012-03-16 03:13:28 UTC (rev 110933)
+++ trunk/LayoutTests/css3/calc/gradient-color-stops.html	2012-03-16 03:14:35 UTC (rev 110934)
@@ -33,6 +33,11 @@
     background-image: -webkit-linear-gradient(left, red, green -webkit-calc(120%), blue);
     background-image: -moz-linear-gradient(left, red, green -webkit-calc(120%), blue);
 }
+
+.linear6 {
+    background-image: -webkit-linear-gradient(left, red, green -webkit-calc(50% + 20px), blue);
+    background-image: -moz-linear-gradient(left, red, green -moz-calc(50% + 20px), blue);
+}
 </style>
 <body>
     <div class="linear1 box"></div>
@@ -41,4 +46,5 @@
     <br>
     <div class="linear4 box"></div>
     <div class="linear5 box"></div>
+    <div class="linear6 box"></div>
 </body>

Modified: trunk/Source/WebCore/ChangeLog (110933 => 110934)


--- trunk/Source/WebCore/ChangeLog	2012-03-16 03:13:28 UTC (rev 110933)
+++ trunk/Source/WebCore/ChangeLog	2012-03-16 03:14:35 UTC (rev 110934)
@@ -1,3 +1,14 @@
+2012-03-15  Mike Lawther  <[email protected]>
+
+        CSS3 calc: mixed percent/absolute expressions for gradients
+        https://bugs.webkit.org/show_bug.cgi?id=81182
+
+        Reviewed by Ojan Vafai.
+
+        * css/CSSGradientValue.cpp:
+        (WebCore::CSSGradientValue::addStops):
+        (WebCore::positionFromValue):
+
 2012-03-15  Leo Yang  <[email protected]>
 
         [BlackBerry] Sync up MIMETypeRegistry.cpp

Modified: trunk/Source/WebCore/css/CSSGradientValue.cpp (110933 => 110934)


--- trunk/Source/WebCore/css/CSSGradientValue.cpp	2012-03-16 03:13:28 UTC (rev 110933)
+++ trunk/Source/WebCore/css/CSSGradientValue.cpp	2012-03-16 03:14:35 UTC (rev 110934)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "CSSGradientValue.h"
 
+#include "CSSCalculationValue.h"
 #include "CSSStyleSelector.h"
 #include "CSSValueKeywords.h"
 #include "GeneratorGeneratedImage.h"
@@ -152,12 +153,16 @@
         if (stop.m_position) {
             if (stop.m_position->isPercentage())
                 stops[i].offset = stop.m_position->getFloatValue(CSSPrimitiveValue::CSS_PERCENTAGE) / 100;
-            else if (stop.m_position->isLength()) {
-                float length = stop.m_position->computeLength<float>(style, rootStyle, style->effectiveZoom());
+            else if (stop.m_position->isLength() || stop.m_position->isCalculatedPercentageWithLength()) {
                 if (!computedGradientLength) {
                     FloatSize gradientSize(gradientStart - gradientEnd);
                     gradientLength = gradientSize.diagonalLength();
                 }
+                float length;
+                if (stop.m_position->isLength())
+                    length = stop.m_position->computeLength<float>(style, rootStyle, style->effectiveZoom());
+                else 
+                    length = stop.m_position->cssCalcValue()->toCalcValue(style, rootStyle, style->effectiveZoom())->evaluate(gradientLength);
                 stops[i].offset = (gradientLength > 0) ? length / gradientLength : 0;
             } else {
                 ASSERT_NOT_REACHED();
@@ -365,9 +370,13 @@
     if (value->isNumber())
         return value->getFloatValue() * zoomFactor;
 
+    int edgeDistance = isHorizontal ? size.width() : size.height();
     if (value->isPercentage())
-        return value->getFloatValue() / 100.f * (isHorizontal ? size.width() : size.height());
+        return value->getFloatValue() / 100.f * edgeDistance;
 
+    if (value->isCalculatedPercentageWithLength())
+        return value->cssCalcValue()->toCalcValue(style, rootStyle, style->effectiveZoom())->evaluate(edgeDistance);
+
     switch (value->getIdent()) {
     case CSSValueTop:
         ASSERT(!isHorizontal);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to