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)