Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1615)

Unified Diff: Source/core/platform/graphics/filters/FilterOperations.cpp

Issue 14652016: Implement filter primitive subregion for reference CSS filters. This required refactoring determin… (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix test failures: ReferenceFilterOperation should ref the Filter which owns its FilterEffects Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.
« no previous file with comments | « Source/core/platform/graphics/filters/FilterOperation.h ('k') | Source/core/rendering/FilterEffectRenderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698