| Index: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
|
| diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
|
| index 438a159f3daabc6c64b661a26776ce4eb54e773d..a381eb5918afad26f9b7b43925ea060fd0b65a44 100644
|
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
|
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
|
| @@ -12,12 +12,11 @@
|
| #include "core/paint/FilterEffectBuilder.h"
|
| #include "core/style/ComputedStyle.h"
|
| #include "core/svg/SVGFilterElement.h"
|
| +#include "modules/canvas2d/BaseRenderingContext2D.h"
|
| #include "modules/canvas2d/CanvasGradient.h"
|
| #include "modules/canvas2d/CanvasPattern.h"
|
| -#include "modules/canvas2d/CanvasRenderingContext2D.h"
|
| #include "modules/canvas2d/CanvasStyle.h"
|
| #include "platform/graphics/DrawLooperBuilder.h"
|
| -#include "platform/graphics/filters/FilterOperation.h"
|
| #include "platform/graphics/filters/SkiaImageFilterBuilder.h"
|
| #include "platform/graphics/skia/SkiaUtils.h"
|
| #include "third_party/skia/include/effects/SkDashPathEffect.h"
|
| @@ -293,13 +292,7 @@ void CanvasRenderingContext2DState::resetTransform()
|
| m_isTransformInvertible = true;
|
| }
|
|
|
| -static void updateFilterReferences(HTMLCanvasElement* canvasElement, CanvasRenderingContext2D* context, const FilterOperations& filters)
|
| -{
|
| - context->clearFilterReferences();
|
| - context->addFilterReferences(filters, canvasElement->document());
|
| -}
|
| -
|
| -SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolutionHost, const Font& font, IntSize canvasSize, CanvasRenderingContext2D* context) const
|
| +SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolutionHost, const Font* font, IntSize canvasSize, BaseRenderingContext2D* context) const
|
| {
|
| if (!m_filterValue)
|
| return nullptr;
|
| @@ -307,13 +300,16 @@ SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution
|
| if (!m_resolvedFilter) {
|
| RefPtr<ComputedStyle> filterStyle = ComputedStyle::create();
|
| // Must set font in case the filter uses any font-relative units (em, ex)
|
| - filterStyle->setFont(font);
|
| -
|
| - StyleResolverState resolverState(styleResolutionHost->document(), styleResolutionHost, filterStyle.get());
|
| - resolverState.setStyle(filterStyle);
|
| + if (font)
|
| + filterStyle->setFont(*font);
|
| +
|
| + if (styleResolutionHost) {
|
| + StyleResolverState resolverState(styleResolutionHost->document(), styleResolutionHost, filterStyle.get());
|
| + resolverState.setStyle(filterStyle);
|
| + StyleBuilder::applyProperty(CSSPropertyWebkitFilter, resolverState, m_filterValue.get());
|
| + resolverState.loadPendingResources();
|
| + }
|
|
|
| - StyleBuilder::applyProperty(CSSPropertyWebkitFilter, resolverState, m_filterValue.get());
|
| - resolverState.loadPendingResources();
|
| RefPtrWillBeRawPtr<FilterEffectBuilder> filterEffectBuilder = FilterEffectBuilder::create();
|
|
|
| // We can't reuse m_fillPaint and m_strokePaint for the filter, since these incorporate
|
| @@ -332,13 +328,13 @@ SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution
|
| RefPtrWillBeRawPtr<FilterEffect> lastEffect = filterEffectBuilder->lastEffect();
|
| m_resolvedFilter = imageFilterBuilder.build(lastEffect.get(), ColorSpaceDeviceRGB);
|
| if (m_resolvedFilter)
|
| - updateFilterReferences(toHTMLCanvasElement(styleResolutionHost), context, filterStyle->filter());
|
| + context->updateFilterReferences(filterStyle->filter());
|
| }
|
|
|
| return m_resolvedFilter.get();
|
| }
|
|
|
| -bool CanvasRenderingContext2DState::hasFilter(Element* styleResolutionHost, const Font& font, IntSize canvasSize, CanvasRenderingContext2D* context) const
|
| +bool CanvasRenderingContext2DState::hasFilter(Element* styleResolutionHost, const Font* font, IntSize canvasSize, BaseRenderingContext2D* context) const
|
| {
|
| // Checking for a non-null m_filterValue isn't sufficient, since this value
|
| // might refer to a non-existent filter.
|
|
|