Title: [169206] branches/safari-537.77-branch

Diff

Modified: branches/safari-537.77-branch/LayoutTests/ChangeLog (169205 => 169206)


--- branches/safari-537.77-branch/LayoutTests/ChangeLog	2014-05-22 17:00:31 UTC (rev 169205)
+++ branches/safari-537.77-branch/LayoutTests/ChangeLog	2014-05-22 17:09:59 UTC (rev 169206)
@@ -1,3 +1,17 @@
+2014-05-22  Lucas Forschler  <[email protected]>
+
+        Merge r164950
+
+    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-05-19  Lucas Forschler  <[email protected]>
 
         Merge r169098

Copied: branches/safari-537.77-branch/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix-expected.html (from rev 164950, trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix-expected.html) (0 => 169206)


--- branches/safari-537.77-branch/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix-expected.html	                        (rev 0)
+++ branches/safari-537.77-branch/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix-expected.html	2014-05-22 17:09:59 UTC (rev 169206)
@@ -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>

Copied: branches/safari-537.77-branch/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix.html (from rev 164950, trunk/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix.html) (0 => 169206)


--- branches/safari-537.77-branch/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix.html	                        (rev 0)
+++ branches/safari-537.77-branch/LayoutTests/css3/filters/animation-from-initial-values-with-color-matrix.html	2014-05-22 17:09:59 UTC (rev 169206)
@@ -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

Modified: branches/safari-537.77-branch/Source/WebCore/ChangeLog (169205 => 169206)


--- branches/safari-537.77-branch/Source/WebCore/ChangeLog	2014-05-22 17:00:31 UTC (rev 169205)
+++ branches/safari-537.77-branch/Source/WebCore/ChangeLog	2014-05-22 17:09:59 UTC (rev 169206)
@@ -1,5 +1,32 @@
 2014-05-22  Lucas Forschler  <[email protected]>
 
+        Merge r164950
+
+    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-05-22  Lucas Forschler  <[email protected]>
+
         Merge r157816
 
     2013-10-22  Tim Horton  <[email protected]>

Modified: branches/safari-537.77-branch/Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm (169205 => 169206)


--- branches/safari-537.77-branch/Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm	2014-05-22 17:00:31 UTC (rev 169205)
+++ branches/safari-537.77-branch/Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm	2014-05-22 17:09:59 UTC (rev 169206)
@@ -111,7 +111,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];
@@ -125,7 +125,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];
@@ -133,8 +133,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];
@@ -142,7 +141,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];
@@ -150,7 +149,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"];
@@ -159,8 +158,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];
@@ -168,8 +166,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];
@@ -177,8 +174,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];
@@ -186,8 +182,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];
@@ -195,7 +190,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];
@@ -204,7 +199,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"];
@@ -214,7 +209,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];
 
@@ -235,7 +230,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"];
@@ -244,7 +239,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];
 
@@ -254,7 +249,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];
 
@@ -271,7 +266,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];
 
@@ -285,7 +280,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();
@@ -298,7 +293,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"];
@@ -308,7 +303,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"];
@@ -345,7 +340,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];
@@ -354,13 +349,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();
         }
 
@@ -385,7 +379,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();
         }
         
@@ -397,7 +391,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);
@@ -407,13 +401,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();
         }
 
@@ -436,13 +429,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();
         }
         
@@ -454,13 +446,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();
         }
         
@@ -478,13 +469,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();
         }
 
@@ -498,7 +488,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);
         }
         
@@ -517,7 +507,7 @@
 {
     switch (filterOperation.getOperationType()) {
     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 = {
@@ -537,7 +527,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;
@@ -552,7 +542,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;
@@ -566,7 +556,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;
@@ -581,7 +571,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: branches/safari-537.77-branch/Source/WebCore/platform/graphics/filters/FilterOperation.cpp (169205 => 169206)


--- branches/safari-537.77-branch/Source/WebCore/platform/graphics/filters/FilterOperation.cpp	2014-05-22 17:00:31 UTC (rev 169205)
+++ branches/safari-537.77-branch/Source/WebCore/platform/graphics/filters/FilterOperation.cpp	2014-05-22 17:09:59 UTC (rev 169206)
@@ -62,11 +62,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) {
@@ -90,11 +98,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: branches/safari-537.77-branch/Source/WebCore/platform/graphics/filters/FilterOperation.h (169205 => 169206)


--- branches/safari-537.77-branch/Source/WebCore/platform/graphics/filters/FilterOperation.h	2014-05-22 17:00:31 UTC (rev 169205)
+++ branches/safari-537.77-branch/Source/WebCore/platform/graphics/filters/FilterOperation.h	2014-05-22 17:09:59 UTC (rev 169206)
@@ -215,16 +215,10 @@
     virtual PassRefPtr<FilterOperation> blend(const FilterOperation* from, double progress, bool blendToPassthrough = false);
 
 private:
-    virtual bool operator==(const FilterOperation& o) const
-    {
-        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)
@@ -249,13 +243,7 @@
     virtual PassRefPtr<FilterOperation> blend(const FilterOperation* from, double progress, bool blendToPassthrough = false);
 
 private:
-    virtual bool operator==(const FilterOperation& o) const
-    {
-        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;
 
@@ -341,6 +329,16 @@
     Color m_color;
 };
 
+#define SIMPLE_FILTER_OPERATION_CASTS(ToValueTypeName, predicate) \
+    TYPE_CASTS_BASE(ToValueTypeName, FilterOperation, operation, operation->type() == FilterOperation::predicate, operation.type() == FilterOperation::predicate)
+
+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