Title: [96775] trunk
Revision
96775
Author
[email protected]
Date
2011-10-05 17:44:27 -0700 (Wed, 05 Oct 2011)

Log Message

Computed style for filter property
https://bugs.webkit.org/show_bug.cgi?id=68477

Reviewed by Simon Fraser.

Reports the computed style for the new -webkit-filter
property value.

Test: css3/filters/filter-property-computed-style.html

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::computedFilter):
(WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

New test to exercise computed style for -webkit-filter. Note
that drop-shadow is not yet supported.

* css3/filters/filter-property-computed-style-expected.txt: Added.
* css3/filters/filter-property-computed-style.html: Added.
* css3/filters/script-tests/filter-property-computed-style.js: Added.
(testComputedFilterRule):

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (96774 => 96775)


--- trunk/LayoutTests/ChangeLog	2011-10-06 00:40:39 UTC (rev 96774)
+++ trunk/LayoutTests/ChangeLog	2011-10-06 00:44:27 UTC (rev 96775)
@@ -1,3 +1,18 @@
+2011-10-05  Dean Jackson  <[email protected]>
+
+        Computed style for filter property
+        https://bugs.webkit.org/show_bug.cgi?id=68477
+
+        Reviewed by Simon Fraser.
+
+        New test to exercise computed style for -webkit-filter. Note
+        that drop-shadow is not yet supported.
+
+        * css3/filters/filter-property-computed-style-expected.txt: Added.
+        * css3/filters/filter-property-computed-style.html: Added.
+        * css3/filters/script-tests/filter-property-computed-style.js: Added.
+        (testComputedFilterRule):
+
 2011-10-05  Jer Noble  <[email protected]>
 
         Enable WEB_AUDIO by default in the WebKit/mac port.

Added: trunk/LayoutTests/css3/filters/filter-property-computed-style-expected.txt (0 => 96775)


--- trunk/LayoutTests/css3/filters/filter-property-computed-style-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/filter-property-computed-style-expected.txt	2011-10-06 00:44:27 UTC (rev 96775)
@@ -0,0 +1,294 @@
+Test the computed style of the -webkit-filter property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Basic reference : url('#a')
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(\'#a\')'
+
+Bare unquoted reference converting to quoted form : url(#a)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(\'#a\')'
+
+Multiple references : url('#a') url('#b')
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(\'#a\')'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(\'#b\')'
+
+Reference as 2nd value : grayscale(1) url('#a')
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_REFERENCE
+PASS subRule.cssText is 'url(\'#a\')'
+
+Integer value : grayscale(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+
+Float value converts to integer : grayscale(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+
+Zero value : grayscale(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0)'
+
+Multiple values : grayscale(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : sepia(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(1)'
+
+Float value converts to integer : sepia(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(1)'
+
+Zero value : sepia(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0)'
+
+Multiple values : sepia(0.5) sepia(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.25)'
+
+Rule combinations : sepia(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : saturate(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(1)'
+
+Float value converts to integer : saturate(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(1)'
+
+Zero value : saturate(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0)'
+
+Multiple values : saturate(0.5) saturate(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.25)'
+
+Rule combinations : saturate(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Degrees value as integer : hue-rotate(10deg)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+
+Degrees float value converts to integer : hue-rotate(10.0deg)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+
+Radians value : hue-rotate(10rad)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(572.9577951308232deg)'
+
+Gradians value : hue-rotate(10grad)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(9deg)'
+
+Turns value : hue-rotate(0.5turn)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(180deg)'
+
+Zero value : hue-rotate(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(0deg)'
+
+Rule combinations : hue-rotate(10deg) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(10deg)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : invert(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(1)'
+
+Float value converts to integer : invert(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(1)'
+
+Zero value : invert(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0)'
+
+Multiple values : invert(0.5) invert(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.25)'
+
+Rule combinations : invert(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Integer value : opacity(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(1)'
+
+Float value converts to integer : opacity(1.0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(1)'
+
+Zero value : opacity(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0)'
+
+Multiple values : opacity(0.5) opacity(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.25)'
+
+Rule combinations : opacity(0.5) grayscale(0.25)
+PASS filterStyle.length is 2
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.25)'
+
+Three values : gamma(1 1 0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
+PASS subRule.cssText is 'gamma(1 1 0)'
+
+Two values : gamma(1 1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
+PASS subRule.cssText is 'gamma(1 1 0)'
+
+One value : gamma(1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
+PASS subRule.cssText is 'gamma(1 1 0)'
+
+Float value : gamma(1.3)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
+PASS subRule.cssText is 'gamma(1.3 1 0)'
+
+Two zeros to px : blur(0 0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(0px 0px)'
+
+One zero to px : blur(0)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(0px 0px)'
+
+Two lengths : blur(5px 2em)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(5px 32px)'
+
+One length : blur(10%)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(10px 10px)'
+
+One length : blur(5px)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(5px 5px)'
+
+Three values : sharpen(1.0 10px 1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
+PASS subRule.cssText is 'sharpen(1 10px 1)'
+
+Three values with zero length : sharpen(1.0 0 1)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
+PASS subRule.cssText is 'sharpen(1 0px 1)'
+
+Two values : sharpen(0.7 1em)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
+PASS subRule.cssText is 'sharpen(0.7 16px 1)'
+
+One value : sharpen(0.5)
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
+PASS subRule.cssText is 'sharpen(0.5 0px 1)'
+
+Multiple operations : grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) gamma(2 1.1 1) blur(5px 2em) sharpen(0.5 3px 2)
+PASS filterStyle.length is 9
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(0.5)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(0.25)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(0.75)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(35deg)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(0.2)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(0.9)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
+PASS subRule.cssText is 'gamma(2 1.1 1)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(5px 32px)'
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
+PASS subRule.cssText is 'sharpen(0.5 3px 2)'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Property changes on: trunk/LayoutTests/css3/filters/filter-property-computed-style-expected.txt
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Added: trunk/LayoutTests/css3/filters/filter-property-computed-style.html (0 => 96775)


--- trunk/LayoutTests/css3/filters/filter-property-computed-style.html	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/filter-property-computed-style.html	2011-10-06 00:44:27 UTC (rev 96775)
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href=""
+<script src=""
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src=""
+<script src=""
+</body>
+</html>
Property changes on: trunk/LayoutTests/css3/filters/filter-property-computed-style.html
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Added: trunk/LayoutTests/css3/filters/script-tests/filter-property-computed-style.js (0 => 96775)


--- trunk/LayoutTests/css3/filters/script-tests/filter-property-computed-style.js	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/script-tests/filter-property-computed-style.js	2011-10-06 00:44:27 UTC (rev 96775)
@@ -0,0 +1,289 @@
+description("Test the computed style of the -webkit-filter property.");
+
+// These have to be global for the test helpers to see them.
+var stylesheet, filterStyle, subRule;
+
+function testComputedFilterRule(description, rule, expectedLength, expectedTypes, expectedTexts)
+{
+    debug("");
+    debug(description + " : " + rule);
+
+    stylesheet = document.styleSheets.item(0);
+    stylesheet.insertRule("body { -webkit-filter: " + rule + "; }", 0);
+
+    filterStyle = window.getComputedStyle(document.body).getPropertyCSSValue('-webkit-filter');
+    shouldBe("filterStyle.length", "" + expectedLength);
+    for (var i = 0; i < expectedLength; i++) {
+        subRule = filterStyle[i];
+        shouldBe("subRule.operationType", expectedTypes[i]);
+        shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
+    }
+    stylesheet.deleteRule(0);
+}
+
+testComputedFilterRule("Basic reference",
+                       "url('#a')", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+                       ["url(\\'#a\\')"]);
+
+testComputedFilterRule("Bare unquoted reference converting to quoted form",
+                       "url(#a)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+                       ["url(\\'#a\\')"]);
+
+testComputedFilterRule("Multiple references",
+                       "url('#a') url('#b')", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_REFERENCE", "WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+                       ["url(\\'#a\\')", "url(\\'#b\\')"]);
+
+testComputedFilterRule("Reference as 2nd value",
+                       "grayscale(1) url('#a')", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_REFERENCE"],
+                       ["grayscale(1)", "url(\\'#a\\')"]);
+
+testComputedFilterRule("Integer value",
+                       "grayscale(1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["grayscale(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+                       "grayscale(1.0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["grayscale(1)"]);
+
+testComputedFilterRule("Zero value",
+                       "grayscale(0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["grayscale(0)"]);
+
+testComputedFilterRule("Multiple values",
+                       "grayscale(0.5) grayscale(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["grayscale(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+                       "sepia(1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+                       ["sepia(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+                       "sepia(1.0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+                       ["sepia(1)"]);
+
+testComputedFilterRule("Zero value",
+                       "sepia(0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+                       ["sepia(0)"]);
+
+testComputedFilterRule("Multiple values",
+                       "sepia(0.5) sepia(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SEPIA", "WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+                       ["sepia(0.5)", "sepia(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+                       "sepia(0.5) grayscale(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SEPIA", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["sepia(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+                       "saturate(1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+                       ["saturate(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+                       "saturate(1.0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+                       ["saturate(1)"]);
+
+testComputedFilterRule("Zero value",
+                       "saturate(0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+                       ["saturate(0)"]);
+
+testComputedFilterRule("Multiple values",
+                       "saturate(0.5) saturate(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SATURATE", "WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+                       ["saturate(0.5)", "saturate(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+                       "saturate(0.5) grayscale(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SATURATE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["saturate(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Degrees value as integer",
+                       "hue-rotate(10deg)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+                       ["hue-rotate(10deg)"]);
+
+testComputedFilterRule("Degrees float value converts to integer",
+                       "hue-rotate(10.0deg)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+                       ["hue-rotate(10deg)"]);
+
+testComputedFilterRule("Radians value",
+                       "hue-rotate(10rad)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+                       ["hue-rotate(572.9577951308232deg)"]);
+
+testComputedFilterRule("Gradians value",
+                       "hue-rotate(10grad)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+                       ["hue-rotate(9deg)"]);
+
+testComputedFilterRule("Turns value",
+                       "hue-rotate(0.5turn)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+                       ["hue-rotate(180deg)"]);
+
+testComputedFilterRule("Zero value",
+                       "hue-rotate(0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+                       ["hue-rotate(0deg)"]);
+
+testComputedFilterRule("Rule combinations",
+                       "hue-rotate(10deg) grayscale(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["hue-rotate(10deg)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+                       "invert(1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+                       ["invert(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+                       "invert(1.0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+                       ["invert(1)"]);
+
+testComputedFilterRule("Zero value",
+                       "invert(0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+                       ["invert(0)"]);
+
+testComputedFilterRule("Multiple values",
+                       "invert(0.5) invert(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_INVERT", "WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+                       ["invert(0.5)", "invert(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+                       "invert(0.5) grayscale(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_INVERT", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["invert(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Integer value",
+                       "opacity(1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+                       ["opacity(1)"]);
+
+testComputedFilterRule("Float value converts to integer",
+                       "opacity(1.0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+                       ["opacity(1)"]);
+
+testComputedFilterRule("Zero value",
+                       "opacity(0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+                       ["opacity(0)"]);
+
+testComputedFilterRule("Multiple values",
+                       "opacity(0.5) opacity(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_OPACITY", "WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+                       ["opacity(0.5)", "opacity(0.25)"]);
+
+testComputedFilterRule("Rule combinations",
+                       "opacity(0.5) grayscale(0.25)", 2,
+                       ["WebKitCSSFilterValue.CSS_FILTER_OPACITY", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+                       ["opacity(0.5)", "grayscale(0.25)"]);
+
+testComputedFilterRule("Three values",
+                       "gamma(1 1 0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
+                       ["gamma(1 1 0)"]);
+
+testComputedFilterRule("Two values",
+                       "gamma(1 1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
+                       ["gamma(1 1 0)"]);
+
+testComputedFilterRule("One value",
+                       "gamma(1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
+                       ["gamma(1 1 0)"]);
+
+testComputedFilterRule("Float value",
+                       "gamma(1.3)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
+                       ["gamma(1.3 1 0)"]);
+
+testComputedFilterRule("Two zeros to px",
+                       "blur(0 0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+                       ["blur(0px 0px)"]);
+
+testComputedFilterRule("One zero to px",
+                       "blur(0)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+                       ["blur(0px 0px)"]);
+
+testComputedFilterRule("Two lengths",
+                       "blur(5px 2em)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+                       ["blur(5px 32px)"]);
+
+testComputedFilterRule("One length",
+                       "blur(10%)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+                       ["blur(10px 10px)"]);
+
+testComputedFilterRule("One length",
+                       "blur(5px)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+                       ["blur(5px 5px)"]);
+
+testComputedFilterRule("Three values",
+                       "sharpen(1.0 10px 1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
+                       ["sharpen(1 10px 1)"]);
+
+testComputedFilterRule("Three values with zero length",
+                       "sharpen(1.0 0 1)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
+                       ["sharpen(1 0px 1)"]);
+
+testComputedFilterRule("Two values",
+                       "sharpen(0.7 1em)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
+                       ["sharpen(0.7 16px 1)"]);
+
+testComputedFilterRule("One value",
+                       "sharpen(0.5)", 1,
+                       ["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
+                       ["sharpen(0.5 0px 1)"]);
+
+testComputedFilterRule("Multiple operations",
+                       "grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) gamma(2 1.1 1) blur(5px 2em) sharpen(0.5 3px 2)", 9,
+                       [
+                           "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE",
+                           "WebKitCSSFilterValue.CSS_FILTER_SEPIA",
+                           "WebKitCSSFilterValue.CSS_FILTER_SATURATE",
+                           "WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE",
+                           "WebKitCSSFilterValue.CSS_FILTER_INVERT",
+                           "WebKitCSSFilterValue.CSS_FILTER_OPACITY",
+                           "WebKitCSSFilterValue.CSS_FILTER_GAMMA",
+                           "WebKitCSSFilterValue.CSS_FILTER_BLUR",
+                           "WebKitCSSFilterValue.CSS_FILTER_SHARPEN"
+               ],
+                       [
+                           "grayscale(0.5)",
+                           "sepia(0.25)",
+                           "saturate(0.75)",
+                           "hue-rotate(35deg)",
+                           "invert(0.2)",
+                           "opacity(0.9)",
+                           "gamma(2 1.1 1)",
+                           "blur(5px 32px)",
+                           "sharpen(0.5 3px 2)"
+               ]);
+
+successfullyParsed = true;
Property changes on: trunk/LayoutTests/css3/filters/script-tests/filter-property-computed-style.js
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Modified: trunk/Source/WebCore/ChangeLog (96774 => 96775)


--- trunk/Source/WebCore/ChangeLog	2011-10-06 00:40:39 UTC (rev 96774)
+++ trunk/Source/WebCore/ChangeLog	2011-10-06 00:44:27 UTC (rev 96775)
@@ -1,3 +1,19 @@
+2011-10-05  Dean Jackson  <[email protected]>
+
+        Computed style for filter property
+        https://bugs.webkit.org/show_bug.cgi?id=68477
+
+        Reviewed by Simon Fraser.
+
+        Reports the computed style for the new -webkit-filter
+        property value.
+
+        Test: css3/filters/filter-property-computed-style.html
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::computedFilter):
+        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+
 2011-10-05  Jer Noble  <[email protected]>
 
         Enable WEB_AUDIO by default in the WebKit/mac port.

Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (96774 => 96775)


--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2011-10-06 00:40:39 UTC (rev 96774)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2011-10-06 00:44:27 UTC (rev 96775)
@@ -50,6 +50,9 @@
 #include "RenderBox.h"
 #include "RenderLayer.h"
 #include "ShadowValue.h"
+#if ENABLE(CSS_FILTERS)
+#include "WebKitCSSFilterValue.h"
+#endif
 #include "WebKitCSSTransformValue.h"
 #include "WebKitFontFamilyNames.h"
 
@@ -642,6 +645,96 @@
     return list.release();
 }
 
+#if ENABLE(CSS_FILTERS)
+static PassRefPtr<CSSValue> computedFilter(RenderObject* renderer, const RenderStyle* style, CSSPrimitiveValueCache* primitiveValueCache)
+{
+    if (!renderer || style->filter().operations().isEmpty())
+        return primitiveValueCache->createIdentifierValue(CSSValueNone);
+    
+    RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
+
+    RefPtr<WebKitCSSFilterValue> filterValue;
+    
+    Vector<RefPtr<FilterOperation> >::const_iterator end = style->filter().operations().end();
+    for (Vector<RefPtr<FilterOperation> >::const_iterator it = style->filter().operations().begin(); it != end; ++it) {
+        FilterOperation* filterOperation = (*it).get();
+        switch (filterOperation->getOperationType()) {
+        case FilterOperation::REFERENCE: {
+            ReferenceFilterOperation* referenceOperation = static_cast<ReferenceFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::ReferenceFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(referenceOperation->reference(), CSSPrimitiveValue::CSS_STRING));
+            break;
+        }
+        case FilterOperation::GRAYSCALE: {
+            BasicColorMatrixFilterOperation* colorMatrixOperation = static_cast<BasicColorMatrixFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::GrayscaleFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(colorMatrixOperation->amount(), CSSPrimitiveValue::CSS_NUMBER));
+            break;
+        }
+        case FilterOperation::SEPIA: {
+            BasicColorMatrixFilterOperation* colorMatrixOperation = static_cast<BasicColorMatrixFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::SepiaFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(colorMatrixOperation->amount(), CSSPrimitiveValue::CSS_NUMBER));
+            break;
+        }
+        case FilterOperation::SATURATE: {
+            BasicColorMatrixFilterOperation* colorMatrixOperation = static_cast<BasicColorMatrixFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::SaturateFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(colorMatrixOperation->amount(), CSSPrimitiveValue::CSS_NUMBER));
+            break;
+        }
+        case FilterOperation::HUE_ROTATE: {
+            BasicColorMatrixFilterOperation* colorMatrixOperation = static_cast<BasicColorMatrixFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::HueRotateFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(colorMatrixOperation->amount(), CSSPrimitiveValue::CSS_DEG));
+            break;
+        }
+        case FilterOperation::INVERT: {
+            BasicComponentTransferFilterOperation* componentTransferOperation = static_cast<BasicComponentTransferFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::InvertFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(componentTransferOperation->amount(), CSSPrimitiveValue::CSS_NUMBER));
+            break;
+        }
+        case FilterOperation::OPACITY: {
+            BasicComponentTransferFilterOperation* componentTransferOperation = static_cast<BasicComponentTransferFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::OpacityFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(componentTransferOperation->amount(), CSSPrimitiveValue::CSS_NUMBER));
+            break;
+        }
+        case FilterOperation::GAMMA: {
+            GammaFilterOperation* gammaOperation = static_cast<GammaFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::GammaFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(gammaOperation->amplitude(), CSSPrimitiveValue::CSS_NUMBER));
+            filterValue->append(primitiveValueCache->createValue(gammaOperation->exponent(), CSSPrimitiveValue::CSS_NUMBER));
+            filterValue->append(primitiveValueCache->createValue(gammaOperation->offset(), CSSPrimitiveValue::CSS_NUMBER));
+            break;
+        }
+        case FilterOperation::BLUR: {
+            BlurFilterOperation* blurOperation = static_cast<BlurFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::BlurFilterOperation);
+            filterValue->append(zoomAdjustedPixelValue(blurOperation->stdDeviationX().value(), style, primitiveValueCache));
+            filterValue->append(zoomAdjustedPixelValue(blurOperation->stdDeviationY().value(), style, primitiveValueCache));
+            break;
+        }
+        case FilterOperation::SHARPEN: {
+            SharpenFilterOperation* sharpenOperation = static_cast<SharpenFilterOperation*>(filterOperation);
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::SharpenFilterOperation);
+            filterValue->append(primitiveValueCache->createValue(sharpenOperation->amount(), CSSPrimitiveValue::CSS_NUMBER));
+            filterValue->append(zoomAdjustedPixelValue(sharpenOperation->radius().value(), style, primitiveValueCache));
+            filterValue->append(primitiveValueCache->createValue(sharpenOperation->threshold(), CSSPrimitiveValue::CSS_NUMBER));
+            break;
+        }
+        default:
+            filterValue = WebKitCSSFilterValue::create(WebKitCSSFilterValue::UnknownFilterOperation);
+            break;
+        }
+        list->append(filterValue);
+    }
+    
+    return list.release();
+}
+#endif
+
 static PassRefPtr<CSSValue> getDelayValue(const AnimationList* animList, CSSPrimitiveValueCache* primitiveValueCache)
 {
     RefPtr<CSSValueList> list = CSSValueList::createCommaSeparated();
@@ -1899,7 +1992,10 @@
             return primitiveValueCache->createValue(style->regionIndex(), CSSPrimitiveValue::CSS_NUMBER);
         case CSSPropertyWebkitRegionOverflow:
             return primitiveValueCache->createValue(style->regionOverflow());
-
+#if ENABLE(CSS_FILTERS)
+        case CSSPropertyWebkitFilter:
+            return computedFilter(renderer, style.get(), primitiveValueCache);
+#endif
         /* Shorthand properties, currently not supported see bug 13658*/
         case CSSPropertyBackground:
         case CSSPropertyBorder:
@@ -1993,9 +2089,6 @@
         case CSSPropertyWebkitBorderRadius:
         case CSSPropertyWebkitColumns:
         case CSSPropertyWebkitColumnRule:
-#if ENABLE(CSS_FILTERS)
-        case CSSPropertyWebkitFilter:
-#endif
         case CSSPropertyWebkitMarginCollapse:
         case CSSPropertyWebkitMarquee:
         case CSSPropertyWebkitMarqueeSpeed:
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to