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

Side by Side Diff: third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp

Issue 2490163002: Reland of "Tracking reference filter mutation via SVGElementProxy" (Closed)
Patch Set: Fix double observer unregistration; simplify scope selection; add tests Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the 11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution. 12 * documentation and/or other materials provided with the distribution.
13 * 13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */ 25 */
26 26
27 #include "core/paint/FilterEffectBuilder.h" 27 #include "core/paint/FilterEffectBuilder.h"
28 28
29 #include "core/layout/svg/ReferenceFilterBuilder.h"
30 #include "core/style/FilterOperations.h" 29 #include "core/style/FilterOperations.h"
30 #include "core/svg/SVGElementProxy.h"
31 #include "core/svg/SVGFilterElement.h" 31 #include "core/svg/SVGFilterElement.h"
32 #include "core/svg/SVGLengthContext.h" 32 #include "core/svg/SVGLengthContext.h"
33 #include "core/svg/graphics/filters/SVGFilterBuilder.h" 33 #include "core/svg/graphics/filters/SVGFilterBuilder.h"
34 #include "platform/LengthFunctions.h" 34 #include "platform/LengthFunctions.h"
35 #include "platform/graphics/ColorSpace.h" 35 #include "platform/graphics/ColorSpace.h"
36 #include "platform/graphics/CompositorFilterOperations.h" 36 #include "platform/graphics/CompositorFilterOperations.h"
37 #include "platform/graphics/filters/FEBoxReflect.h" 37 #include "platform/graphics/filters/FEBoxReflect.h"
38 #include "platform/graphics/filters/FEColorMatrix.h" 38 #include "platform/graphics/filters/FEColorMatrix.h"
39 #include "platform/graphics/filters/FEComponentTransfer.h" 39 #include "platform/graphics/filters/FEComponentTransfer.h"
40 #include "platform/graphics/filters/FEDropShadow.h" 40 #include "platform/graphics/filters/FEDropShadow.h"
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 sk_sp<SkImageFilter> filter = SkiaImageFilterBuilder::transformColorSpace( 397 sk_sp<SkImageFilter> filter = SkiaImageFilterBuilder::transformColorSpace(
398 nullptr, currentColorSpace, ColorSpaceDeviceRGB); 398 nullptr, currentColorSpace, ColorSpaceDeviceRGB);
399 filters.appendReferenceFilter(std::move(filter)); 399 filters.appendReferenceFilter(std::move(filter));
400 } 400 }
401 return filters; 401 return filters;
402 } 402 }
403 403
404 Filter* FilterEffectBuilder::buildReferenceFilter( 404 Filter* FilterEffectBuilder::buildReferenceFilter(
405 const ReferenceFilterOperation& referenceOperation, 405 const ReferenceFilterOperation& referenceOperation,
406 FilterEffect* previousEffect) const { 406 FilterEffect* previousEffect) const {
407 DCHECK(m_targetContext && m_targetContext->isElementNode()); 407 DCHECK(m_targetContext);
408 SVGFilterElement* filterElement = 408 Element* filterElement = referenceOperation.elementProxy().findElement(
409 ReferenceFilterBuilder::resolveFilterReference( 409 m_targetContext->treeScope());
410 referenceOperation, toElement(*m_targetContext)); 410 if (!isSVGFilterElement(filterElement))
411 if (!filterElement)
412 return nullptr; 411 return nullptr;
413 return buildReferenceFilter(*filterElement, previousEffect); 412 return buildReferenceFilter(toSVGFilterElement(*filterElement),
413 previousEffect);
414 } 414 }
415 415
416 Filter* FilterEffectBuilder::buildReferenceFilter( 416 Filter* FilterEffectBuilder::buildReferenceFilter(
417 SVGFilterElement& filterElement, 417 SVGFilterElement& filterElement,
418 FilterEffect* previousEffect, 418 FilterEffect* previousEffect,
419 SVGFilterGraphNodeMap* nodeMap) const { 419 SVGFilterGraphNodeMap* nodeMap) const {
420 FloatRect filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>( 420 FloatRect filterRegion = SVGLengthContext::resolveRectangle<SVGFilterElement>(
421 &filterElement, filterElement.filterUnits()->currentValue()->enumValue(), 421 &filterElement, filterElement.filterUnits()->currentValue()->enumValue(),
422 m_referenceBox); 422 m_referenceBox);
423 // TODO(fs): We rely on the presence of a node map here to opt-in to the 423 // TODO(fs): We rely on the presence of a node map here to opt-in to the
(...skipping 11 matching lines...) Expand all
435 Filter::create(m_referenceBox, filterRegion, m_zoom, unitScaling); 435 Filter::create(m_referenceBox, filterRegion, m_zoom, unitScaling);
436 if (!previousEffect) 436 if (!previousEffect)
437 previousEffect = result->getSourceGraphic(); 437 previousEffect = result->getSourceGraphic();
438 SVGFilterBuilder builder(previousEffect, nodeMap, m_fillPaint, m_strokePaint); 438 SVGFilterBuilder builder(previousEffect, nodeMap, m_fillPaint, m_strokePaint);
439 builder.buildGraph(result, filterElement, m_referenceBox); 439 builder.buildGraph(result, filterElement, m_referenceBox);
440 result->setLastEffect(builder.lastEffect()); 440 result->setLastEffect(builder.lastEffect());
441 return result; 441 return result;
442 } 442 }
443 443
444 } // namespace blink 444 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698