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)