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

Unified Diff: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp

Issue 2326633002: Adds filter support for offscreen canvas (Closed)
Patch Set: Working version of filters on offscreen canvas Created 4 years, 3 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: 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 c44f731220e1586fb447203da300f79dff3e1419..57e405eba1a1298b0d4318878acd5abe834d81f7 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
@@ -295,7 +295,7 @@ SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution
return nullptr;
// StyleResolverState cannot be used in frame-less documents.
- if (!styleResolutionHost->document().frame())
+ if (styleResolutionHost && !styleResolutionHost->document().frame())
return nullptr;
if (!m_resolvedFilter) {
@@ -303,11 +303,21 @@ SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution
// Must set font in case the filter uses any font-relative units (em, ex)
filterStyle->setFont(m_fontForFilter);
- StyleResolverState resolverState(styleResolutionHost->document(), styleResolutionHost, filterStyle.get());
- resolverState.setStyle(filterStyle);
+ if (styleResolutionHost) {
+ StyleResolverState resolverState(styleResolutionHost->document(), styleResolutionHost, filterStyle.get());
+ resolverState.setStyle(filterStyle);
+
+ StyleBuilder::applyProperty(CSSPropertyFilter, resolverState, *m_filterValue);
+ resolverState.loadPendingResources();
+ } else {
+ StyleResolverState resolverState(filterStyle.get());
+ resolverState.setStyle(filterStyle);
+
+ StyleBuilder::applyProperty(CSSPropertyFilter, resolverState, *m_filterValue);
+ resolverState.loadPendingResources();
+ }
+
- StyleBuilder::applyProperty(CSSPropertyFilter, resolverState, *m_filterValue);
- resolverState.loadPendingResources();
FilterEffectBuilder* filterEffectBuilder = FilterEffectBuilder::create();
// We can't reuse m_fillPaint and m_strokePaint for the filter, since these incorporate
@@ -325,7 +335,7 @@ SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution
if (FilterEffect* lastEffect = filterEffectBuilder->lastEffect()) {
lastEffect->determineMaximumEffectRect(DetermineMaxEffectRectNone);
m_resolvedFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB);
- if (m_resolvedFilter) {
+ if (styleResolutionHost && m_resolvedFilter) {
updateFilterReferences(toHTMLCanvasElement(styleResolutionHost), context, filterStyle->filter());
if (lastEffect->originTainted())
context->setOriginTainted();

Powered by Google App Engine
This is Rietveld 408576698