| Index: Source/core/platform/graphics/filters/FilterOperations.cpp
|
| diff --git a/Source/core/platform/graphics/filters/FilterOperations.cpp b/Source/core/platform/graphics/filters/FilterOperations.cpp
|
| index 28ac9f7f1a1a6df3578fb2ba9e053a125fe8d1d5..870148231d4fc1197d8d4be0f5068f6336c7cb6a 100644
|
| --- a/Source/core/platform/graphics/filters/FilterOperations.cpp
|
| +++ b/Source/core/platform/graphics/filters/FilterOperations.cpp
|
| @@ -108,7 +108,7 @@ bool FilterOperations::hasOutsets() const
|
| {
|
| for (size_t i = 0; i < m_operations.size(); ++i) {
|
| FilterOperation::OperationType operationType = m_operations.at(i).get()->getOperationType();
|
| - if (operationType == FilterOperation::BLUR || operationType == FilterOperation::DROP_SHADOW)
|
| + if (operationType == FilterOperation::BLUR || operationType == FilterOperation::DROP_SHADOW || operationType == FilterOperation::REFERENCE)
|
| return true;
|
| }
|
| return false;
|
| @@ -140,6 +140,21 @@ FilterOutsets FilterOperations::outsets() const
|
| totalOutsets += outsets;
|
| break;
|
| }
|
| + case FilterOperation::REFERENCE: {
|
| + ReferenceFilterOperation* referenceOperation = static_cast<ReferenceFilterOperation*>(filterOperation);
|
| + if (referenceOperation->filterEffect()) {
|
| + FloatRect outsetRect(0, 0, 1, 1);
|
| + outsetRect = referenceOperation->filterEffect()->mapRectRecursive(outsetRect);
|
| + FilterOutsets outsets(
|
| + std::max(0.0f, -outsetRect.y()),
|
| + std::max(0.0f, outsetRect.x() + outsetRect.width() - 1),
|
| + std::max(0.0f, outsetRect.y() + outsetRect.height() - 1),
|
| + std::max(0.0f, -outsetRect.x())
|
| + );
|
| + totalOutsets += outsets;
|
| + }
|
| + break;
|
| + }
|
| case FilterOperation::CUSTOM:
|
| case FilterOperation::VALIDATED_CUSTOM: {
|
| // FIXME: Need to include the filter margins here.
|
|
|