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

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

Issue 1775153002: Make OffscreenCanvasRenderingContext2D renderable on a worker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix non-oilpan build Created 4 years, 9 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/BaseRenderingContext2D.h"
15 #include "modules/canvas2d/CanvasGradient.h" 16 #include "modules/canvas2d/CanvasGradient.h"
16 #include "modules/canvas2d/CanvasPattern.h" 17 #include "modules/canvas2d/CanvasPattern.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/FilterOperation.h"
21 #include "platform/graphics/filters/SkiaImageFilterBuilder.h" 20 #include "platform/graphics/filters/SkiaImageFilterBuilder.h"
22 #include "platform/graphics/skia/SkiaUtils.h" 21 #include "platform/graphics/skia/SkiaUtils.h"
23 #include "third_party/skia/include/effects/SkDashPathEffect.h" 22 #include "third_party/skia/include/effects/SkDashPathEffect.h"
24 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" 23 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h"
25 24
26 static const char defaultFont[] = "10px sans-serif"; 25 static const char defaultFont[] = "10px sans-serif";
27 static const char defaultFilter[] = "none"; 26 static const char defaultFilter[] = "none";
28 27
29 namespace blink { 28 namespace blink {
30 29
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 m_isTransformInvertible = transform.isInvertible(); 285 m_isTransformInvertible = transform.isInvertible();
287 m_transform = transform; 286 m_transform = transform;
288 } 287 }
289 288
290 void CanvasRenderingContext2DState::resetTransform() 289 void CanvasRenderingContext2DState::resetTransform()
291 { 290 {
292 m_transform.makeIdentity(); 291 m_transform.makeIdentity();
293 m_isTransformInvertible = true; 292 m_isTransformInvertible = true;
294 } 293 }
295 294
296 static void updateFilterReferences(HTMLCanvasElement* canvasElement, CanvasRende ringContext2D* context, const FilterOperations& filters) 295 SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution Host, const Font* font, IntSize canvasSize, BaseRenderingContext2D* context) con st
297 {
298 context->clearFilterReferences();
299 context->addFilterReferences(filters, canvasElement->document());
300 }
301
302 SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution Host, const Font& font, IntSize canvasSize, CanvasRenderingContext2D* context) c onst
303 { 296 {
304 if (!m_filterValue) 297 if (!m_filterValue)
305 return nullptr; 298 return nullptr;
306 299
307 if (!m_resolvedFilter) { 300 if (!m_resolvedFilter) {
308 RefPtr<ComputedStyle> filterStyle = ComputedStyle::create(); 301 RefPtr<ComputedStyle> filterStyle = ComputedStyle::create();
309 // Must set font in case the filter uses any font-relative units (em, ex ) 302 // Must set font in case the filter uses any font-relative units (em, ex )
310 filterStyle->setFont(font); 303 if (font)
304 filterStyle->setFont(*font);
311 305
312 StyleResolverState resolverState(styleResolutionHost->document(), styleR esolutionHost, filterStyle.get()); 306 if (styleResolutionHost) {
313 resolverState.setStyle(filterStyle); 307 StyleResolverState resolverState(styleResolutionHost->document(), st yleResolutionHost, filterStyle.get());
308 resolverState.setStyle(filterStyle);
309 StyleBuilder::applyProperty(CSSPropertyWebkitFilter, resolverState, m_filterValue.get());
310 resolverState.loadPendingResources();
311 }
314 312
315 StyleBuilder::applyProperty(CSSPropertyWebkitFilter, resolverState, m_fi lterValue.get());
316 resolverState.loadPendingResources();
317 RefPtrWillBeRawPtr<FilterEffectBuilder> filterEffectBuilder = FilterEffe ctBuilder::create(); 313 RefPtrWillBeRawPtr<FilterEffectBuilder> filterEffectBuilder = FilterEffe ctBuilder::create();
318 314
319 // We can't reuse m_fillPaint and m_strokePaint for the filter, since th ese incorporate 315 // We can't reuse m_fillPaint and m_strokePaint for the filter, since th ese incorporate
320 // the global alpha, which isn't applicable here. 316 // the global alpha, which isn't applicable here.
321 SkPaint fillPaintForFilter; 317 SkPaint fillPaintForFilter;
322 SkPaint strokePaintForFilter; 318 SkPaint strokePaintForFilter;
323 m_fillStyle->applyToPaint(fillPaintForFilter); 319 m_fillStyle->applyToPaint(fillPaintForFilter);
324 m_strokeStyle->applyToPaint(strokePaintForFilter); 320 m_strokeStyle->applyToPaint(strokePaintForFilter);
325 fillPaintForFilter.setColor(m_fillStyle->paintColor()); 321 fillPaintForFilter.setColor(m_fillStyle->paintColor());
326 strokePaintForFilter.setColor(m_strokeStyle->paintColor()); 322 strokePaintForFilter.setColor(m_strokeStyle->paintColor());
327 FloatSize floatCanvasSize(canvasSize); 323 FloatSize floatCanvasSize(canvasSize);
328 const double effectiveZoom = 1.0; // Deliberately ignore zoom on the can vas element 324 const double effectiveZoom = 1.0; // Deliberately ignore zoom on the can vas element
329 filterEffectBuilder->build(styleResolutionHost, filterStyle->filter(), e ffectiveZoom, &floatCanvasSize, &fillPaintForFilter, &strokePaintForFilter); 325 filterEffectBuilder->build(styleResolutionHost, filterStyle->filter(), e ffectiveZoom, &floatCanvasSize, &fillPaintForFilter, &strokePaintForFilter);
330 326
331 SkiaImageFilterBuilder imageFilterBuilder; 327 SkiaImageFilterBuilder imageFilterBuilder;
332 RefPtrWillBeRawPtr<FilterEffect> lastEffect = filterEffectBuilder->lastE ffect(); 328 RefPtrWillBeRawPtr<FilterEffect> lastEffect = filterEffectBuilder->lastE ffect();
333 m_resolvedFilter = imageFilterBuilder.build(lastEffect.get(), ColorSpace DeviceRGB); 329 m_resolvedFilter = imageFilterBuilder.build(lastEffect.get(), ColorSpace DeviceRGB);
334 if (m_resolvedFilter) 330 if (m_resolvedFilter)
335 updateFilterReferences(toHTMLCanvasElement(styleResolutionHost), con text, filterStyle->filter()); 331 context->updateFilterReferences(filterStyle->filter());
336 } 332 }
337 333
338 return m_resolvedFilter.get(); 334 return m_resolvedFilter.get();
339 } 335 }
340 336
341 bool CanvasRenderingContext2DState::hasFilter(Element* styleResolutionHost, cons t Font& font, IntSize canvasSize, CanvasRenderingContext2D* context) const 337 bool CanvasRenderingContext2DState::hasFilter(Element* styleResolutionHost, cons t Font* font, IntSize canvasSize, BaseRenderingContext2D* context) const
342 { 338 {
343 // Checking for a non-null m_filterValue isn't sufficient, since this value 339 // Checking for a non-null m_filterValue isn't sufficient, since this value
344 // might refer to a non-existent filter. 340 // might refer to a non-existent filter.
345 return !!getFilter(styleResolutionHost, font, canvasSize, context); 341 return !!getFilter(styleResolutionHost, font, canvasSize, context);
346 } 342 }
347 343
348 void CanvasRenderingContext2DState::clearResolvedFilter() const 344 void CanvasRenderingContext2DState::clearResolvedFilter() const
349 { 345 {
350 m_resolvedFilter.clear(); 346 m_resolvedFilter.clear();
351 } 347 }
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 paint->setLooper(0); 559 paint->setLooper(0);
564 paint->setImageFilter(shadowAndForegroundImageFilter()); 560 paint->setImageFilter(shadowAndForegroundImageFilter());
565 return paint; 561 return paint;
566 } 562 }
567 paint->setLooper(shadowAndForegroundDrawLooper()); 563 paint->setLooper(shadowAndForegroundDrawLooper());
568 paint->setImageFilter(0); 564 paint->setImageFilter(0);
569 return paint; 565 return paint;
570 } 566 }
571 567
572 } // namespace blink 568 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698