| OLD | NEW |
| 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" |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 m_isTransformInvertible = true; | 272 m_isTransformInvertible = true; |
| 273 } | 273 } |
| 274 | 274 |
| 275 static void updateFilterReferences(HTMLCanvasElement* canvasElement, | 275 static void updateFilterReferences(HTMLCanvasElement* canvasElement, |
| 276 CanvasRenderingContext2D* context, | 276 CanvasRenderingContext2D* context, |
| 277 const FilterOperations& filters) { | 277 const FilterOperations& filters) { |
| 278 context->clearFilterReferences(); | 278 context->clearFilterReferences(); |
| 279 context->addFilterReferences(filters, canvasElement->document()); | 279 context->addFilterReferences(filters, canvasElement->document()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 SkImageFilter* CanvasRenderingContext2DState::getFilter( | 282 sk_sp<SkImageFilter> CanvasRenderingContext2DState::getFilter( |
| 283 Element* styleResolutionHost, | 283 Element* styleResolutionHost, |
| 284 IntSize canvasSize, | 284 IntSize canvasSize, |
| 285 CanvasRenderingContext2D* context) const { | 285 CanvasRenderingContext2D* context) const { |
| 286 if (!m_filterValue) | 286 if (!m_filterValue) |
| 287 return nullptr; | 287 return nullptr; |
| 288 | 288 |
| 289 // StyleResolverState cannot be used in frame-less documents. | 289 // StyleResolverState cannot be used in frame-less documents. |
| 290 if (!styleResolutionHost->document().frame()) | 290 if (!styleResolutionHost->document().frame()) |
| 291 return nullptr; | 291 return nullptr; |
| 292 | 292 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 323 SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB); | 323 SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB); |
| 324 if (m_resolvedFilter) { | 324 if (m_resolvedFilter) { |
| 325 updateFilterReferences(toHTMLCanvasElement(styleResolutionHost), | 325 updateFilterReferences(toHTMLCanvasElement(styleResolutionHost), |
| 326 context, filterStyle->filter()); | 326 context, filterStyle->filter()); |
| 327 if (lastEffect->originTainted()) | 327 if (lastEffect->originTainted()) |
| 328 context->setOriginTainted(); | 328 context->setOriginTainted(); |
| 329 } | 329 } |
| 330 } | 330 } |
| 331 } | 331 } |
| 332 | 332 |
| 333 return m_resolvedFilter.get(); | 333 return m_resolvedFilter; |
| 334 } | 334 } |
| 335 | 335 |
| 336 bool CanvasRenderingContext2DState::hasFilter( | 336 bool CanvasRenderingContext2DState::hasFilter( |
| 337 Element* styleResolutionHost, | 337 Element* styleResolutionHost, |
| 338 IntSize canvasSize, | 338 IntSize canvasSize, |
| 339 CanvasRenderingContext2D* context) const { | 339 CanvasRenderingContext2D* context) const { |
| 340 // Checking for a non-null m_filterValue isn't sufficient, since this value | 340 // Checking for a non-null m_filterValue isn't sufficient, since this value |
| 341 // might refer to a non-existent filter. | 341 // might refer to a non-existent filter. |
| 342 return !!getFilter(styleResolutionHost, canvasSize, context); | 342 return !!getFilter(styleResolutionHost, canvasSize, context); |
| 343 } | 343 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 374 DrawLooperBuilder::create(); | 374 DrawLooperBuilder::create(); |
| 375 drawLooperBuilder->addShadow(m_shadowOffset, m_shadowBlur, m_shadowColor, | 375 drawLooperBuilder->addShadow(m_shadowOffset, m_shadowBlur, m_shadowColor, |
| 376 DrawLooperBuilder::ShadowIgnoresTransforms, | 376 DrawLooperBuilder::ShadowIgnoresTransforms, |
| 377 DrawLooperBuilder::ShadowRespectsAlpha); | 377 DrawLooperBuilder::ShadowRespectsAlpha); |
| 378 drawLooperBuilder->addUnmodifiedContent(); | 378 drawLooperBuilder->addUnmodifiedContent(); |
| 379 m_shadowAndForegroundDrawLooper = drawLooperBuilder->detachDrawLooper(); | 379 m_shadowAndForegroundDrawLooper = drawLooperBuilder->detachDrawLooper(); |
| 380 } | 380 } |
| 381 return m_shadowAndForegroundDrawLooper.get(); | 381 return m_shadowAndForegroundDrawLooper.get(); |
| 382 } | 382 } |
| 383 | 383 |
| 384 SkImageFilter* CanvasRenderingContext2DState::shadowOnlyImageFilter() const { | 384 sk_sp<SkImageFilter> CanvasRenderingContext2DState::shadowOnlyImageFilter() |
| 385 const { |
| 385 if (!m_shadowOnlyImageFilter) { | 386 if (!m_shadowOnlyImageFilter) { |
| 386 double sigma = skBlurRadiusToSigma(m_shadowBlur); | 387 double sigma = skBlurRadiusToSigma(m_shadowBlur); |
| 387 m_shadowOnlyImageFilter = SkDropShadowImageFilter::Make( | 388 m_shadowOnlyImageFilter = SkDropShadowImageFilter::Make( |
| 388 m_shadowOffset.width(), m_shadowOffset.height(), sigma, sigma, | 389 m_shadowOffset.width(), m_shadowOffset.height(), sigma, sigma, |
| 389 m_shadowColor, SkDropShadowImageFilter::kDrawShadowOnly_ShadowMode, | 390 m_shadowColor, SkDropShadowImageFilter::kDrawShadowOnly_ShadowMode, |
| 390 nullptr); | 391 nullptr); |
| 391 } | 392 } |
| 392 return m_shadowOnlyImageFilter.get(); | 393 return m_shadowOnlyImageFilter; |
| 393 } | 394 } |
| 394 | 395 |
| 395 SkImageFilter* CanvasRenderingContext2DState::shadowAndForegroundImageFilter() | 396 sk_sp<SkImageFilter> |
| 396 const { | 397 CanvasRenderingContext2DState::shadowAndForegroundImageFilter() const { |
| 397 if (!m_shadowAndForegroundImageFilter) { | 398 if (!m_shadowAndForegroundImageFilter) { |
| 398 double sigma = skBlurRadiusToSigma(m_shadowBlur); | 399 double sigma = skBlurRadiusToSigma(m_shadowBlur); |
| 399 m_shadowAndForegroundImageFilter = SkDropShadowImageFilter::Make( | 400 m_shadowAndForegroundImageFilter = SkDropShadowImageFilter::Make( |
| 400 m_shadowOffset.width(), m_shadowOffset.height(), sigma, sigma, | 401 m_shadowOffset.width(), m_shadowOffset.height(), sigma, sigma, |
| 401 m_shadowColor, | 402 m_shadowColor, |
| 402 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr); | 403 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr); |
| 403 } | 404 } |
| 404 return m_shadowAndForegroundImageFilter.get(); | 405 return m_shadowAndForegroundImageFilter; |
| 405 } | 406 } |
| 406 | 407 |
| 407 void CanvasRenderingContext2DState::shadowParameterChanged() { | 408 void CanvasRenderingContext2DState::shadowParameterChanged() { |
| 408 m_shadowOnlyDrawLooper.reset(); | 409 m_shadowOnlyDrawLooper.reset(); |
| 409 m_shadowAndForegroundDrawLooper.reset(); | 410 m_shadowAndForegroundDrawLooper.reset(); |
| 410 m_shadowOnlyImageFilter.reset(); | 411 m_shadowOnlyImageFilter.reset(); |
| 411 m_shadowAndForegroundImageFilter.reset(); | 412 m_shadowAndForegroundImageFilter.reset(); |
| 412 } | 413 } |
| 413 | 414 |
| 414 void CanvasRenderingContext2DState::setShadowOffsetX(double x) { | 415 void CanvasRenderingContext2DState::setShadowOffsetX(double x) { |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 paint->setLooper(0); | 557 paint->setLooper(0); |
| 557 paint->setImageFilter(shadowAndForegroundImageFilter()); | 558 paint->setImageFilter(shadowAndForegroundImageFilter()); |
| 558 return paint; | 559 return paint; |
| 559 } | 560 } |
| 560 paint->setLooper(sk_ref_sp(shadowAndForegroundDrawLooper())); | 561 paint->setLooper(sk_ref_sp(shadowAndForegroundDrawLooper())); |
| 561 paint->setImageFilter(0); | 562 paint->setImageFilter(0); |
| 562 return paint; | 563 return paint; |
| 563 } | 564 } |
| 564 | 565 |
| 565 } // namespace blink | 566 } // namespace blink |
| OLD | NEW |