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

Side by Side Diff: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp

Issue 2349183002: Turn FilterEffectBuilder into a stack-allocated helper (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/canvas2d/CanvasRenderingContext2DState.h" 5 #include "modules/canvas2d/CanvasRenderingContext2DState.h"
6 6
7 #include "core/css/CSSFontSelector.h" 7 #include "core/css/CSSFontSelector.h"
8 #include "core/css/resolver/FilterOperationResolver.h" 8 #include "core/css/resolver/FilterOperationResolver.h"
9 #include "core/css/resolver/StyleBuilder.h" 9 #include "core/css/resolver/StyleBuilder.h"
10 #include "core/css/resolver/StyleResolverState.h" 10 #include "core/css/resolver/StyleResolverState.h"
11 #include "core/html/HTMLCanvasElement.h" 11 #include "core/html/HTMLCanvasElement.h"
12 #include "core/paint/FilterEffectBuilder.h" 12 #include "core/paint/FilterEffectBuilder.h"
13 #include "core/style/ComputedStyle.h" 13 #include "core/style/ComputedStyle.h"
14 #include "core/svg/SVGFilterElement.h" 14 #include "core/svg/SVGFilterElement.h"
15 #include "modules/canvas2d/CanvasGradient.h" 15 #include "modules/canvas2d/CanvasGradient.h"
16 #include "modules/canvas2d/CanvasPattern.h" 16 #include "modules/canvas2d/CanvasPattern.h"
17 #include "modules/canvas2d/CanvasRenderingContext2D.h" 17 #include "modules/canvas2d/CanvasRenderingContext2D.h"
18 #include "modules/canvas2d/CanvasStyle.h" 18 #include "modules/canvas2d/CanvasStyle.h"
19 #include "platform/graphics/DrawLooperBuilder.h" 19 #include "platform/graphics/DrawLooperBuilder.h"
20 #include "platform/graphics/filters/FilterEffect.h"
20 #include "platform/graphics/filters/FilterOperation.h" 21 #include "platform/graphics/filters/FilterOperation.h"
21 #include "platform/graphics/filters/SkiaImageFilterBuilder.h" 22 #include "platform/graphics/filters/SkiaImageFilterBuilder.h"
22 #include "platform/graphics/skia/SkiaUtils.h" 23 #include "platform/graphics/skia/SkiaUtils.h"
23 #include "third_party/skia/include/effects/SkDashPathEffect.h" 24 #include "third_party/skia/include/effects/SkDashPathEffect.h"
24 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" 25 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h"
25 #include <memory> 26 #include <memory>
26 27
27 static const char defaultFont[] = "10px sans-serif"; 28 static const char defaultFont[] = "10px sans-serif";
28 static const char defaultFilter[] = "none"; 29 static const char defaultFilter[] = "none";
29 30
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 if (!m_resolvedFilter) { 302 if (!m_resolvedFilter) {
302 RefPtr<ComputedStyle> filterStyle = ComputedStyle::create(); 303 RefPtr<ComputedStyle> filterStyle = ComputedStyle::create();
303 // Must set font in case the filter uses any font-relative units (em, ex ) 304 // Must set font in case the filter uses any font-relative units (em, ex )
304 filterStyle->setFont(m_fontForFilter); 305 filterStyle->setFont(m_fontForFilter);
305 306
306 StyleResolverState resolverState(styleResolutionHost->document(), styleR esolutionHost, filterStyle.get()); 307 StyleResolverState resolverState(styleResolutionHost->document(), styleR esolutionHost, filterStyle.get());
307 resolverState.setStyle(filterStyle); 308 resolverState.setStyle(filterStyle);
308 309
309 StyleBuilder::applyProperty(CSSPropertyFilter, resolverState, *m_filterV alue); 310 StyleBuilder::applyProperty(CSSPropertyFilter, resolverState, *m_filterV alue);
310 resolverState.loadPendingResources(); 311 resolverState.loadPendingResources();
311 FilterEffectBuilder* filterEffectBuilder = FilterEffectBuilder::create() ;
312 312
313 // We can't reuse m_fillPaint and m_strokePaint for the filter, since th ese incorporate 313 // We can't reuse m_fillPaint and m_strokePaint for the filter, since th ese incorporate
314 // the global alpha, which isn't applicable here. 314 // the global alpha, which isn't applicable here.
315 SkPaint fillPaintForFilter; 315 SkPaint fillPaintForFilter;
316 m_fillStyle->applyToPaint(fillPaintForFilter);
317 fillPaintForFilter.setColor(m_fillStyle->paintColor());
316 SkPaint strokePaintForFilter; 318 SkPaint strokePaintForFilter;
317 m_fillStyle->applyToPaint(fillPaintForFilter);
318 m_strokeStyle->applyToPaint(strokePaintForFilter); 319 m_strokeStyle->applyToPaint(strokePaintForFilter);
319 fillPaintForFilter.setColor(m_fillStyle->paintColor());
320 strokePaintForFilter.setColor(m_strokeStyle->paintColor()); 320 strokePaintForFilter.setColor(m_strokeStyle->paintColor());
321 FloatRect referenceBox((FloatPoint()), FloatSize(canvasSize));
322 const double effectiveZoom = 1.0; // Deliberately ignore zoom on the can vas element
323 filterEffectBuilder->build(styleResolutionHost, filterStyle->filter(), e ffectiveZoom, referenceBox, &fillPaintForFilter, &strokePaintForFilter);
324 321
325 if (FilterEffect* lastEffect = filterEffectBuilder->lastEffect()) { 322 FilterEffectBuilder filterEffectBuilder(
323 styleResolutionHost,
324 FloatRect((FloatPoint()), FloatSize(canvasSize)),
325 1.0f, // Deliberately ignore zoom on the canvas element.
326 &fillPaintForFilter, &strokePaintForFilter);
327
328 if (FilterEffect* lastEffect = filterEffectBuilder.buildFilterEffect(fil terStyle->filter())) {
326 m_resolvedFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSp aceDeviceRGB); 329 m_resolvedFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSp aceDeviceRGB);
327 if (m_resolvedFilter) { 330 if (m_resolvedFilter) {
328 updateFilterReferences(toHTMLCanvasElement(styleResolutionHost), context, filterStyle->filter()); 331 updateFilterReferences(toHTMLCanvasElement(styleResolutionHost), context, filterStyle->filter());
329 if (lastEffect->originTainted()) 332 if (lastEffect->originTainted())
330 context->setOriginTainted(); 333 context->setOriginTainted();
331 } 334 }
332 } 335 }
333 } 336 }
334 337
335 return m_resolvedFilter.get(); 338 return m_resolvedFilter.get();
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 paint->setLooper(0); 563 paint->setLooper(0);
561 paint->setImageFilter(shadowAndForegroundImageFilter()); 564 paint->setImageFilter(shadowAndForegroundImageFilter());
562 return paint; 565 return paint;
563 } 566 }
564 paint->setLooper(sk_ref_sp(shadowAndForegroundDrawLooper())); 567 paint->setLooper(sk_ref_sp(shadowAndForegroundDrawLooper()));
565 paint->setImageFilter(0); 568 paint->setImageFilter(0);
566 return paint; 569 return paint;
567 } 570 }
568 571
569 } // namespace blink 572 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698