Title: [164950] trunk
Revision
164950
Author
[email protected]
Date
2014-03-02 14:26:05 -0800 (Sun, 02 Mar 2014)

Log Message

Add protected casting to FilterOperation classes.
https://bugs.webkit.org/show_bug.cgi?id=124062

Reviewed by Sam Weinig.

Source/WebCore:

Use the type cast macro generators to produce some toFilterOperation-style
functions, and then use them in our PlatformCA filter code.

Test: css3/filters/animation-from-initial-values-with-color-matrix.html

* platform/graphics/ca/mac/PlatformCAFiltersMac.mm: Use the toFilterOperation methods, in
some cases removing the unnecessary double cast.
(PlatformCAFilters::filterValueForOperation):
(PlatformCAFilters::colorMatrixValueForFilter):
* platform/graphics/filters/FilterOperation.cpp:
(WebCore::BasicColorMatrixFilterOperation::blend):
(WebCore::BasicColorMatrixFilterOperation::operator==): Move this to the .cpp file so it can use the casting methods.
(WebCore::BasicComponentTransferFilterOperation::blend):
(WebCore::BasicComponentTransferFilterOperation::operator==): Ditto.
* platform/graphics/filters/FilterOperation.h: Add the casting macros.

LayoutTests:

* css3/filters/animation-from-initial-values-with-color-matrix-expected.html: Added.
* css3/filters/animation-from-initial-values-with-color-matrix.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (164949 => 164950)


--- trunk/LayoutTests/ChangeLog	2014-03-02 22:22:10 UTC (rev 164949)
+++ trunk/LayoutTests/ChangeLog	2014-03-02 22:26:05 UTC (rev 164950)
@@ -1,3 +1,13 @@
+2014-03-02  Dean Jackson  <[email protected]>
+
+        Add protected casting to FilterOperation classes.
+        https://bugs.webkit.org/show_bug.cgi?id=124062
+
+        Reviewed by Sam Weinig.
+
+        * css3/filters/animation-from-initial-values-with-color-matrix-expected.html: Added.
+        * css3/filters/animation-from-initial-values-with-color-matrix.html: Added.
+
 2014-03-02  Yoav Weiss  <[email protected]>
 
         Fix srcset related bugs

Added: trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix-expected.html (0 => 164950)


--- trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix-expected.html	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix-expected.html	2014-03-02 22:26:05 UTC (rev 164950)
@@ -0,0 +1,12 @@
+<style>
+.anim {
+    position: relative;
+    width: 10px;
+    height: 10px;
+}
+</style>
+<div class="anim"></div>
+<div class="anim"></div>
+<div class="anim"></div>
+<div class="anim"></div>
+<div id="results">animation 4 finished<br>animation 3 finished<br>animation 2 finished<br>animation 1 finished<br></div>
Property changes on: trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix-expected.html
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Added: trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix.html (0 => 164950)


--- trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix.html	                        (rev 0)
+++ trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix.html	2014-03-02 22:26:05 UTC (rev 164950)
@@ -0,0 +1,56 @@
+<script>
+if (window.testRunner)
+    window.testRunner.waitUntilDone();
+
+var numExpectedAnimations = 4;
+
+document.addEventListener("webkitAnimationEnd", function () {
+    var r = document.getElementById("results");
+    r.innerHTML += "animation " + numExpectedAnimations + " finished<br>";
+    numExpectedAnimations--;
+    if (!numExpectedAnimations && window.testRunner)
+        window.testRunner.notifyDone();
+}, false);
+</script>
+<style>
+@-webkit-keyframes a {
+  from {}
+  to {
+    -webkit-filter: invert(0.9);
+  }
+}
+
+@-webkit-keyframes b {
+  from {}
+  to {
+    -webkit-filter: opacity(0.9);
+  }
+}
+
+@-webkit-keyframes c {
+  from {}
+  to {
+    -webkit-filter: sepia(0.9);
+  }
+}
+
+@-webkit-keyframes d {
+  from {}
+  to {
+    -webkit-filter: grayscale(0.9);
+  }
+}
+
+.anim {
+    position: relative;
+    width: 10px;
+    height: 10px;
+    -webkit-transform: translate3d(0, 0, 0);
+    -webkit-animation-duration: 0.1s;
+}
+</style>
+<div class="anim" style="-webkit-animation-name: a;"></div>
+<div class="anim" style="-webkit-animation-name: b;"></div>
+<div class="anim" style="-webkit-animation-name: c;"></div>
+<div class="anim" style="-webkit-animation-name: d;"></div>
+<div id="results"></div>
\ No newline at end of file
Property changes on: trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix.html
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Modified: trunk/Source/WebCore/ChangeLog (164949 => 164950)


--- trunk/Source/WebCore/ChangeLog	2014-03-02 22:22:10 UTC (rev 164949)
+++ trunk/Source/WebCore/ChangeLog	2014-03-02 22:26:05 UTC (rev 164950)
@@ -1,3 +1,26 @@
+2014-03-02  Dean Jackson  <[email protected]>
+
+        Add protected casting to FilterOperation classes.
+        https://bugs.webkit.org/show_bug.cgi?id=124062
+
+        Reviewed by Sam Weinig.
+
+        Use the type cast macro generators to produce some toFilterOperation-style
+        functions, and then use them in our PlatformCA filter code.
+
+        Test: css3/filters/animation-from-initial-values-with-color-matrix.html
+
+        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm: Use the toFilterOperation methods, in
+        some cases removing the unnecessary double cast.
+        (PlatformCAFilters::filterValueForOperation):
+        (PlatformCAFilters::colorMatrixValueForFilter):
+        * platform/graphics/filters/FilterOperation.cpp:
+        (WebCore::BasicColorMatrixFilterOperation::blend):
+        (WebCore::BasicColorMatrixFilterOperation::operator==): Move this to the .cpp file so it can use the casting methods.
+        (WebCore::BasicComponentTransferFilterOperation::blend):
+        (WebCore::BasicComponentTransferFilterOperation::operator==): Ditto.
+        * platform/graphics/filters/FilterOperation.h: Add the casting macros.
+
 2014-03-02  Yoav Weiss  <[email protected]>
 
         Fix srcset related bugs

Modified: trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm (164949 => 164950)


--- trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm	2014-03-02 22:22:10 UTC (rev 164949)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm	2014-03-02 22:26:05 UTC (rev 164950)
@@ -79,7 +79,7 @@
         case FilterOperation::DROP_SHADOW: {
             // FIXME: For now assume drop shadow is the last filter, put it on the layer.
             // <rdar://problem/10959969> Handle case where drop-shadow is not the last filter.
-            const DropShadowFilterOperation* op = static_cast<const DropShadowFilterOperation*>(filterOperation);
+            const DropShadowFilterOperation* op = toDropShadowFilterOperation(filterOperation);
             [layer setShadowOffset:CGSizeMake(op->x(), op->y())];
 
             CGFloat components[4];
@@ -93,7 +93,7 @@
         }
 #if USE_CA_FILTERS
         case FilterOperation::GRAYSCALE: {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(filterOperation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterColorMonochrome];
             [filter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputAmount"];
             [filter setName:filterName];
@@ -101,8 +101,7 @@
             break;
         }
         case FilterOperation::SEPIA: {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(filterOperation);
-            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*op);
+            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterColorMatrix];
             [filter setValue:colorMatrixValue.get() forKey:@"inputColorMatrix"];
             [filter setName:filterName];
@@ -110,7 +109,7 @@
             break;
         }
         case FilterOperation::SATURATE: {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(filterOperation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterColorSaturate];
             [filter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputAmount"];
             [filter setName:filterName];
@@ -118,7 +117,7 @@
             break;
         }
         case FilterOperation::HUE_ROTATE: {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(filterOperation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterColorHueRotate];
             [filter setValue:[NSNumber numberWithFloat:deg2rad(op->amount())] forKey:@"inputAngle"];
             [filter setName:@"hueRotate"];
@@ -127,8 +126,7 @@
             break;
         }
         case FilterOperation::INVERT: {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation);
-            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*op);
+            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterColorMatrix];
             [filter setValue:colorMatrixValue.get() forKey:@"inputColorMatrix"];
             [filter setName:filterName];
@@ -136,8 +134,7 @@
             break;
         }
         case FilterOperation::OPACITY: {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation);
-            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*op);
+            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterColorMatrix];
             [filter setValue:colorMatrixValue.get() forKey:@"inputColorMatrix"];
             [filter setName:filterName];
@@ -145,8 +142,7 @@
             break;
         }
         case FilterOperation::BRIGHTNESS: {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation);
-            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*op);
+            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterColorMatrix];
             [filter setValue:colorMatrixValue.get() forKey:@"inputColorMatrix"];
             [filter setName:filterName];
@@ -154,8 +150,7 @@
             break;
         }
         case FilterOperation::CONTRAST: {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation);
-            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*op);
+            RetainPtr<NSValue> colorMatrixValue = PlatformCAFilters::colorMatrixValueForFilter(*filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterColorMatrix];
             [filter setValue:colorMatrixValue.get() forKey:@"inputColorMatrix"];
             [filter setName:filterName];
@@ -163,7 +158,7 @@
             break;
         }
         case FilterOperation::BLUR: {
-            const BlurFilterOperation* op = static_cast<const BlurFilterOperation*>(filterOperation);
+            const BlurFilterOperation* op = toBlurFilterOperation(filterOperation);
             CAFilter *filter = [CAFilter filterWithType:kCAFilterGaussianBlur];
             [filter setValue:[NSNumber numberWithFloat:floatValueForLength(op->stdDeviation(), 0)] forKey:@"inputRadius"];
             [filter setName:filterName];
@@ -172,7 +167,7 @@
         }
 #else
         case FilterOperation::GRAYSCALE: {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(filterOperation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIColorMonochrome"];
             [filter setDefaults];
             [filter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputIntensity"];
@@ -182,7 +177,7 @@
             break;
         }
         case FilterOperation::SEPIA: {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(filterOperation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIColorMatrix"];
             [filter setDefaults];
 
@@ -203,7 +198,7 @@
             break;
         }
         case FilterOperation::SATURATE: {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(filterOperation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIColorControls"];
             [filter setDefaults];
             [filter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputSaturation"];
@@ -212,7 +207,7 @@
             break;
         }
         case FilterOperation::HUE_ROTATE: {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(filterOperation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIHueAdjust"];
             [filter setDefaults];
 
@@ -222,7 +217,7 @@
             break;
         }
         case FilterOperation::INVERT: {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation);
+            const BasicComponentTransferFilterOperation* op = toBasicComponentTransferFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIColorMatrix"];
             [filter setDefaults];
 
@@ -239,7 +234,7 @@
             break;
         }
         case FilterOperation::OPACITY: {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation);
+            const BasicComponentTransferFilterOperation* op = toBasicComponentTransferFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIColorMatrix"];
             [filter setDefaults];
 
@@ -253,7 +248,7 @@
             break;
         }
         case FilterOperation::BRIGHTNESS: {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation);
+            const BasicComponentTransferFilterOperation* op = toBasicComponentTransferFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIColorMatrix"];
             [filter setDefaults];
             double amount = op->amount();
@@ -266,7 +261,7 @@
             break;
         }
         case FilterOperation::CONTRAST: {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(filterOperation);
+            const BasicComponentTransferFilterOperation* op = toBasicComponentTransferFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIColorControls"];
             [filter setDefaults];
             [filter setValue:[NSNumber numberWithFloat:op->amount()] forKey:@"inputContrast"];
@@ -276,7 +271,7 @@
         }
         case FilterOperation::BLUR: {
             // FIXME: For now we ignore stdDeviationY.
-            const BlurFilterOperation* op = static_cast<const BlurFilterOperation*>(filterOperation);
+            const BlurFilterOperation* op = toBlurFilterOperation(filterOperation);
             CIFilter* filter = [CIFilter filterWithName:@"CIGaussianBlur"];
             [filter setDefaults];
             [filter setValue:[NSNumber numberWithFloat:floatValueForLength(op->stdDeviation(), 0)] forKey:@"inputRadius"];
@@ -313,7 +308,7 @@
         // CAFilter: inputAmount
         double amount = 0;
         if (!operation->isDefault()) {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(operation);
             amount = op->amount();
         }
         value = [NSNumber numberWithDouble:amount];
@@ -322,13 +317,12 @@
     case FilterOperation::SEPIA: {
 #if USE_CA_FILTERS
         // CAFilter: inputColorMatrix
-        const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
-        value = PlatformCAFilters::colorMatrixValueForFilter(*op);
+        value = PlatformCAFilters::colorMatrixValueForFilter(*operation);
 #else
         // CIFilter: inputRVector, inputGVector, inputBVector
         double amount = 0;
         if (!operation->isDefault()) {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(operation);
             amount = op->amount();
         }
 
@@ -353,7 +347,7 @@
         // CAFilter: inputAmount
         double amount = 1;
         if (!operation->isDefault()) {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(operation);
             amount = op->amount();
         }
         
@@ -365,7 +359,7 @@
         // Hue rotate CAFilter: inputAngle
         double amount = 0;
         if (!operation->isDefault()) {
-            const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
+            const BasicColorMatrixFilterOperation* op = toBasicColorMatrixFilterOperation(operation);
             amount = op->amount();
         }
         amount = deg2rad(amount);
@@ -375,13 +369,12 @@
     case FilterOperation::INVERT: {
 #if USE_CA_FILTERS
         // CAFilter: inputColorMatrix
-        const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
-        value = PlatformCAFilters::colorMatrixValueForFilter(*op);
+        value = PlatformCAFilters::colorMatrixValueForFilter(*operation);
 #else
         // CIFilter: inputRVector, inputGVector, inputBVector, inputBiasVector
         double amount = 0;
         if (!operation->isDefault()) {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(operation);
+            const BasicComponentTransferFilterOperation* op = toBasicComponentTransferFilterOperation(operation);
             amount = op->amount();
         }
 
@@ -404,13 +397,12 @@
     case FilterOperation::OPACITY: {
 #if USE_CA_FILTERS
         // Opacity CAFilter: inputColorMatrix
-        const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
-        value = PlatformCAFilters::colorMatrixValueForFilter(*op);
+        value = PlatformCAFilters::colorMatrixValueForFilter(*operation);
 #else
         // Opacity CIFilter: inputAVector
         double amount = 1;
         if (!operation->isDefault()) {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(operation);
+            const BasicComponentTransferFilterOperation* op = toBasicComponentTransferFilterOperation(operation);
             amount = op->amount();
         }
         
@@ -422,13 +414,12 @@
     case FilterOperation::BRIGHTNESS: {
 #if USE_CA_FILTERS
         // Brightness CAFilter: inputColorMatrix
-        const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
-        value = PlatformCAFilters::colorMatrixValueForFilter(*op);
+        value = PlatformCAFilters::colorMatrixValueForFilter(*operation);
 #else
         // Brightness CIFilter: inputColorMatrix
         double amount = 1;
         if (!operation->isDefault()) {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(operation);
+            const BasicComponentTransferFilterOperation* op = toBasicComponentTransferFilterOperation(operation);
             amount = op->amount();
         }
         
@@ -446,13 +437,12 @@
     case FilterOperation::CONTRAST: {
 #if USE_CA_FILTERS
         // Contrast CAFilter: inputColorMatrix
-        const BasicColorMatrixFilterOperation* op = static_cast<const BasicColorMatrixFilterOperation*>(operation);
-        value = PlatformCAFilters::colorMatrixValueForFilter(*op);
+        value = PlatformCAFilters::colorMatrixValueForFilter(*operation);
 #else
         // Contrast CIFilter: inputContrast
         double amount = 1;
         if (!operation->isDefault()) {
-            const BasicComponentTransferFilterOperation* op = static_cast<const BasicComponentTransferFilterOperation*>(operation);
+            const BasicComponentTransferFilterOperation* op = toBasicComponentTransferFilterOperation(operation);
             amount = op->amount();
         }
 
@@ -466,7 +456,7 @@
         double amount = 0;
 
         if (!operation->isDefault()) {
-            const BlurFilterOperation* op = static_cast<const BlurFilterOperation*>(operation);
+            const BlurFilterOperation* op = toBlurFilterOperation(operation);
             amount = floatValueForLength(op->stdDeviation(), 0);
         }
         
@@ -485,7 +475,7 @@
 {
     switch (filterOperation.type()) {
     case FilterOperation::SEPIA: {
-        const BasicColorMatrixFilterOperation& op = static_cast<const BasicColorMatrixFilterOperation&>(filterOperation);
+        const BasicColorMatrixFilterOperation& op = toBasicColorMatrixFilterOperation(filterOperation);
         double t = op.amount();
         t = std::min(std::max(0.0, t), 1.0);
         CAColorMatrix colorMatrix = {
@@ -505,7 +495,7 @@
         return [NSValue valueWithCAColorMatrix:colorMatrix];
     }
     case FilterOperation::INVERT: {
-        const BasicComponentTransferFilterOperation& op = static_cast<const BasicComponentTransferFilterOperation&>(filterOperation);
+        const BasicComponentTransferFilterOperation& op = toBasicComponentTransferFilterOperation(filterOperation);
         float amount = op.amount();
         if (op.isDefault())
             amount = 0;
@@ -520,7 +510,7 @@
         return [NSValue valueWithCAColorMatrix:colorMatrix];
     }
     case FilterOperation::OPACITY: {
-        const BasicComponentTransferFilterOperation& op = static_cast<const BasicComponentTransferFilterOperation&>(filterOperation);
+        const BasicComponentTransferFilterOperation& op = toBasicComponentTransferFilterOperation(filterOperation);
         float amount = op.amount();
         if (op.isDefault())
             amount = 1;
@@ -534,7 +524,7 @@
         return [NSValue valueWithCAColorMatrix:colorMatrix];
     }
     case FilterOperation::CONTRAST: {
-        const BasicComponentTransferFilterOperation& op = static_cast<const BasicComponentTransferFilterOperation&>(filterOperation);
+        const BasicComponentTransferFilterOperation& op = toBasicComponentTransferFilterOperation(filterOperation);
         float amount = op.amount();
         if (op.isDefault())
             amount = 1;
@@ -549,7 +539,7 @@
         return [NSValue valueWithCAColorMatrix:colorMatrix];
     }
     case FilterOperation::BRIGHTNESS: {
-        const BasicComponentTransferFilterOperation& op = static_cast<const BasicComponentTransferFilterOperation&>(filterOperation);
+        const BasicComponentTransferFilterOperation& op = toBasicComponentTransferFilterOperation(filterOperation);
         float amount = op.amount();
         if (op.isDefault())
             amount = 1;

Modified: trunk/Source/WebCore/platform/graphics/filters/FilterOperation.cpp (164949 => 164950)


--- trunk/Source/WebCore/platform/graphics/filters/FilterOperation.cpp	2014-03-02 22:22:10 UTC (rev 164949)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterOperation.cpp	2014-03-02 22:26:05 UTC (rev 164950)
@@ -59,11 +59,19 @@
     if (blendToPassthrough)
         return BasicColorMatrixFilterOperation::create(WebCore::blend(m_amount, passthroughAmount(), progress), m_type);
         
-    const BasicColorMatrixFilterOperation* fromOp = static_cast<const BasicColorMatrixFilterOperation*>(from);
+    const BasicColorMatrixFilterOperation* fromOp = toBasicColorMatrixFilterOperation(from);
     double fromAmount = fromOp ? fromOp->amount() : passthroughAmount();
     return BasicColorMatrixFilterOperation::create(WebCore::blend(fromAmount, m_amount, progress), m_type);
 }
 
+inline bool BasicColorMatrixFilterOperation::operator==(const FilterOperation& o) const
+{
+    if (!isSameType(o))
+        return false;
+    const BasicColorMatrixFilterOperation& other = toBasicColorMatrixFilterOperation(o);
+    return m_amount == other.m_amount;
+}
+
 double BasicColorMatrixFilterOperation::passthroughAmount() const
 {
     switch (m_type) {
@@ -87,11 +95,19 @@
     if (blendToPassthrough)
         return BasicComponentTransferFilterOperation::create(WebCore::blend(m_amount, passthroughAmount(), progress), m_type);
         
-    const BasicComponentTransferFilterOperation* fromOp = static_cast<const BasicComponentTransferFilterOperation*>(from);
+    const BasicComponentTransferFilterOperation* fromOp = toBasicComponentTransferFilterOperation(from);
     double fromAmount = fromOp ? fromOp->amount() : passthroughAmount();
     return BasicComponentTransferFilterOperation::create(WebCore::blend(fromAmount, m_amount, progress), m_type);
 }
 
+inline bool BasicComponentTransferFilterOperation::operator==(const FilterOperation& o) const
+{
+    if (!isSameType(o))
+        return false;
+    const BasicComponentTransferFilterOperation& other = toBasicComponentTransferFilterOperation(o);
+    return m_amount == other.m_amount;
+}
+
 double BasicComponentTransferFilterOperation::passthroughAmount() const
 {
     switch (m_type) {

Modified: trunk/Source/WebCore/platform/graphics/filters/FilterOperation.h (164949 => 164950)


--- trunk/Source/WebCore/platform/graphics/filters/FilterOperation.h	2014-03-02 22:22:10 UTC (rev 164949)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterOperation.h	2014-03-02 22:26:05 UTC (rev 164950)
@@ -195,16 +195,10 @@
     virtual PassRefPtr<FilterOperation> blend(const FilterOperation* from, double progress, bool blendToPassthrough = false) override;
 
 private:
-    virtual bool operator==(const FilterOperation& o) const override
-    {
-        if (!isSameType(o))
-            return false;
-        const BasicColorMatrixFilterOperation* other = static_cast<const BasicColorMatrixFilterOperation*>(&o);
-        return m_amount == other->m_amount;
-    }
-    
+    virtual bool operator==(const FilterOperation&) const override;
+
     double passthroughAmount() const;
-    
+
     BasicColorMatrixFilterOperation(double amount, OperationType type)
         : FilterOperation(type)
         , m_amount(amount)
@@ -229,13 +223,7 @@
     virtual PassRefPtr<FilterOperation> blend(const FilterOperation* from, double progress, bool blendToPassthrough = false) override;
 
 private:
-    virtual bool operator==(const FilterOperation& o) const override
-    {
-        if (!isSameType(o))
-            return false;
-        const BasicComponentTransferFilterOperation* other = static_cast<const BasicComponentTransferFilterOperation*>(&o);
-        return m_amount == other->m_amount;
-    }
+    virtual bool operator==(const FilterOperation&) const override;
 
     double passthroughAmount() const;
 
@@ -320,11 +308,16 @@
     Color m_color;
 };
 
-#define FILTER_OPERATION_CASTS(ToValueTypeName, predicate) \
+#define SIMPLE_FILTER_OPERATION_CASTS(ToValueTypeName, predicate) \
     TYPE_CASTS_BASE(ToValueTypeName, FilterOperation, operation, operation->type() == FilterOperation::predicate, operation.type() == FilterOperation::predicate)
 
-FILTER_OPERATION_CASTS(ReferenceFilterOperation, REFERENCE)
+SIMPLE_FILTER_OPERATION_CASTS(ReferenceFilterOperation, REFERENCE)
+SIMPLE_FILTER_OPERATION_CASTS(BlurFilterOperation, BLUR)
+SIMPLE_FILTER_OPERATION_CASTS(DropShadowFilterOperation, DROP_SHADOW)
 
+TYPE_CASTS_BASE(BasicColorMatrixFilterOperation, FilterOperation, operation, operation->type() == FilterOperation::GRAYSCALE || operation->type() == FilterOperation::SEPIA || operation->type() == FilterOperation::SATURATE || operation->type() == FilterOperation::HUE_ROTATE, operation.type() == FilterOperation::GRAYSCALE || operation.type() == FilterOperation::SEPIA || operation.type() == FilterOperation::SATURATE || operation.type() == FilterOperation::HUE_ROTATE)
+TYPE_CASTS_BASE(BasicComponentTransferFilterOperation, FilterOperation, operation, operation->type() == FilterOperation::INVERT || operation->type() == FilterOperation::BRIGHTNESS || operation->type() == FilterOperation::CONTRAST || operation->type() == FilterOperation::OPACITY, operation.type() == FilterOperation::INVERT || operation.type() == FilterOperation::BRIGHTNESS || operation.type() == FilterOperation::CONTRAST || operation.type() == FilterOperation::OPACITY)
+
 } // namespace WebCore
 
 #endif // ENABLE(CSS_FILTERS)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to