| 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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "modules/canvas2d/CanvasRenderingContext2DState.h" | 7 #include "modules/canvas2d/CanvasRenderingContext2DState.h" |
| 8 | 8 |
| 9 #include "core/css/CSSFontSelector.h" | 9 #include "core/css/CSSFontSelector.h" |
| 10 #include "core/css/resolver/FilterOperationResolver.h" | 10 #include "core/css/resolver/FilterOperationResolver.h" |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 } | 180 } |
| 181 | 181 |
| 182 DEFINE_TRACE(CanvasRenderingContext2DState) | 182 DEFINE_TRACE(CanvasRenderingContext2DState) |
| 183 { | 183 { |
| 184 visitor->trace(m_strokeStyle); | 184 visitor->trace(m_strokeStyle); |
| 185 visitor->trace(m_fillStyle); | 185 visitor->trace(m_fillStyle); |
| 186 visitor->trace(m_filterValue); | 186 visitor->trace(m_filterValue); |
| 187 CSSFontSelectorClient::trace(visitor); | 187 CSSFontSelectorClient::trace(visitor); |
| 188 } | 188 } |
| 189 | 189 |
| 190 void CanvasRenderingContext2DState::setLineDashOffset(float offset) | 190 void CanvasRenderingContext2DState::setLineDashOffset(double offset) |
| 191 { | 191 { |
| 192 m_lineDashOffset = offset; | 192 m_lineDashOffset = offset; |
| 193 m_lineDashDirty = true; | 193 m_lineDashDirty = true; |
| 194 } | 194 } |
| 195 | 195 |
| 196 void CanvasRenderingContext2DState::setLineDash(const Vector<float>& dash) | 196 void CanvasRenderingContext2DState::setLineDash(const Vector<float>& dash) |
| 197 { | 197 { |
| 198 m_lineDash = dash; | 198 m_lineDash = dash; |
| 199 // Spec requires the concatenation of two copies the dash list when the | 199 // Spec requires the concatenation of two copies the dash list when the |
| 200 // number of elements is odd | 200 // number of elements is odd |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 m_strokePaint.setAntiAlias(shouldAntialias); | 294 m_strokePaint.setAntiAlias(shouldAntialias); |
| 295 m_imagePaint.setAntiAlias(shouldAntialias); | 295 m_imagePaint.setAntiAlias(shouldAntialias); |
| 296 } | 296 } |
| 297 | 297 |
| 298 bool CanvasRenderingContext2DState::shouldAntialias() const | 298 bool CanvasRenderingContext2DState::shouldAntialias() const |
| 299 { | 299 { |
| 300 ASSERT(m_fillPaint.isAntiAlias() == m_strokePaint.isAntiAlias() && m_fillPai
nt.isAntiAlias() == m_imagePaint.isAntiAlias()); | 300 ASSERT(m_fillPaint.isAntiAlias() == m_strokePaint.isAntiAlias() && m_fillPai
nt.isAntiAlias() == m_imagePaint.isAntiAlias()); |
| 301 return m_fillPaint.isAntiAlias(); | 301 return m_fillPaint.isAntiAlias(); |
| 302 } | 302 } |
| 303 | 303 |
| 304 void CanvasRenderingContext2DState::setGlobalAlpha(float alpha) | 304 void CanvasRenderingContext2DState::setGlobalAlpha(double alpha) |
| 305 { | 305 { |
| 306 m_globalAlpha = alpha; | 306 m_globalAlpha = alpha; |
| 307 m_strokeStyleDirty = true; | 307 m_strokeStyleDirty = true; |
| 308 m_fillStyleDirty = true; | 308 m_fillStyleDirty = true; |
| 309 int imageAlpha = clampedAlphaForBlending(alpha); | 309 int imageAlpha = clampedAlphaForBlending(alpha); |
| 310 m_imagePaint.setAlpha(imageAlpha > 255 ? 255 : imageAlpha); | 310 m_imagePaint.setAlpha(imageAlpha > 255 ? 255 : imageAlpha); |
| 311 } | 311 } |
| 312 | 312 |
| 313 void CanvasRenderingContext2DState::clipPath(const SkPath& path, AntiAliasingMod
e antiAliasingMode) | 313 void CanvasRenderingContext2DState::clipPath(const SkPath& path, AntiAliasingMod
e antiAliasingMode) |
| 314 { | 314 { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 // Must set font in case the filter uses any font-relative units (em, ex
) | 361 // Must set font in case the filter uses any font-relative units (em, ex
) |
| 362 filterStyle->setFont(font); | 362 filterStyle->setFont(font); |
| 363 | 363 |
| 364 StyleResolverState resolverState(styleResolutionHost->document(), styleR
esolutionHost, filterStyle.get()); | 364 StyleResolverState resolverState(styleResolutionHost->document(), styleR
esolutionHost, filterStyle.get()); |
| 365 resolverState.setStyle(filterStyle); | 365 resolverState.setStyle(filterStyle); |
| 366 | 366 |
| 367 // TODO(junov): crbug.com/502877 Feed m_fillStyle and m_strokeStyle into
FillPaint and | 367 // TODO(junov): crbug.com/502877 Feed m_fillStyle and m_strokeStyle into
FillPaint and |
| 368 // StrokePaint respectively for filters that reference SVG. | 368 // StrokePaint respectively for filters that reference SVG. |
| 369 StyleBuilder::applyProperty(CSSPropertyWebkitFilter, resolverState, m_fi
lterValue.get()); | 369 StyleBuilder::applyProperty(CSSPropertyWebkitFilter, resolverState, m_fi
lterValue.get()); |
| 370 RefPtrWillBeRawPtr<FilterEffectBuilder> filterEffectBuilder = FilterEffe
ctBuilder::create(); | 370 RefPtrWillBeRawPtr<FilterEffectBuilder> filterEffectBuilder = FilterEffe
ctBuilder::create(); |
| 371 const float effectiveZoom = 1.0f; // Deliberately ignore zoom on the can
vas element | 371 const double effectiveZoom = 1.0; // Deliberately ignore zoom on the can
vas element |
| 372 filterEffectBuilder->build(styleResolutionHost, filterStyle->filter(), e
ffectiveZoom); | 372 filterEffectBuilder->build(styleResolutionHost, filterStyle->filter(), e
ffectiveZoom); |
| 373 | 373 |
| 374 SkiaImageFilterBuilder imageFilterBuilder; | 374 SkiaImageFilterBuilder imageFilterBuilder; |
| 375 RefPtrWillBeRawPtr<FilterEffect> lastEffect = filterEffectBuilder->lastE
ffect(); | 375 RefPtrWillBeRawPtr<FilterEffect> lastEffect = filterEffectBuilder->lastE
ffect(); |
| 376 m_resolvedFilter = imageFilterBuilder.build(lastEffect.get(), ColorSpace
DeviceRGB); | 376 m_resolvedFilter = imageFilterBuilder.build(lastEffect.get(), ColorSpace
DeviceRGB); |
| 377 } | 377 } |
| 378 | 378 |
| 379 return m_resolvedFilter.get(); | 379 return m_resolvedFilter.get(); |
| 380 } | 380 } |
| 381 | 381 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 405 drawLooperBuilder->addShadow(m_shadowOffset, m_shadowBlur, m_shadowColor
, DrawLooperBuilder::ShadowIgnoresTransforms, DrawLooperBuilder::ShadowRespectsA
lpha); | 405 drawLooperBuilder->addShadow(m_shadowOffset, m_shadowBlur, m_shadowColor
, DrawLooperBuilder::ShadowIgnoresTransforms, DrawLooperBuilder::ShadowRespectsA
lpha); |
| 406 drawLooperBuilder->addUnmodifiedContent(); | 406 drawLooperBuilder->addUnmodifiedContent(); |
| 407 m_shadowAndForegroundDrawLooper = drawLooperBuilder->detachDrawLooper(); | 407 m_shadowAndForegroundDrawLooper = drawLooperBuilder->detachDrawLooper(); |
| 408 } | 408 } |
| 409 return m_shadowAndForegroundDrawLooper.get(); | 409 return m_shadowAndForegroundDrawLooper.get(); |
| 410 } | 410 } |
| 411 | 411 |
| 412 SkImageFilter* CanvasRenderingContext2DState::shadowOnlyImageFilter() const | 412 SkImageFilter* CanvasRenderingContext2DState::shadowOnlyImageFilter() const |
| 413 { | 413 { |
| 414 if (!m_shadowOnlyImageFilter) { | 414 if (!m_shadowOnlyImageFilter) { |
| 415 float sigma = skBlurRadiusToSigma(m_shadowBlur); | 415 double sigma = skBlurRadiusToSigma(m_shadowBlur); |
| 416 m_shadowOnlyImageFilter = adoptRef(SkDropShadowImageFilter::Create(m_sha
dowOffset.width(), m_shadowOffset.height(), sigma, sigma, m_shadowColor, SkDropS
hadowImageFilter::kDrawShadowOnly_ShadowMode)); | 416 m_shadowOnlyImageFilter = adoptRef(SkDropShadowImageFilter::Create(m_sha
dowOffset.width(), m_shadowOffset.height(), sigma, sigma, m_shadowColor, SkDropS
hadowImageFilter::kDrawShadowOnly_ShadowMode)); |
| 417 } | 417 } |
| 418 return m_shadowOnlyImageFilter.get(); | 418 return m_shadowOnlyImageFilter.get(); |
| 419 } | 419 } |
| 420 | 420 |
| 421 SkImageFilter* CanvasRenderingContext2DState::shadowAndForegroundImageFilter() c
onst | 421 SkImageFilter* CanvasRenderingContext2DState::shadowAndForegroundImageFilter() c
onst |
| 422 { | 422 { |
| 423 if (!m_shadowAndForegroundImageFilter) { | 423 if (!m_shadowAndForegroundImageFilter) { |
| 424 float sigma = skBlurRadiusToSigma(m_shadowBlur); | 424 double sigma = skBlurRadiusToSigma(m_shadowBlur); |
| 425 m_shadowAndForegroundImageFilter = adoptRef(SkDropShadowImageFilter::Cre
ate(m_shadowOffset.width(), m_shadowOffset.height(), sigma, sigma, m_shadowColor
, SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode)); | 425 m_shadowAndForegroundImageFilter = adoptRef(SkDropShadowImageFilter::Cre
ate(m_shadowOffset.width(), m_shadowOffset.height(), sigma, sigma, m_shadowColor
, SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode)); |
| 426 } | 426 } |
| 427 return m_shadowAndForegroundImageFilter.get(); | 427 return m_shadowAndForegroundImageFilter.get(); |
| 428 } | 428 } |
| 429 | 429 |
| 430 void CanvasRenderingContext2DState::shadowParameterChanged() | 430 void CanvasRenderingContext2DState::shadowParameterChanged() |
| 431 { | 431 { |
| 432 m_shadowOnlyDrawLooper.clear(); | 432 m_shadowOnlyDrawLooper.clear(); |
| 433 m_shadowAndForegroundDrawLooper.clear(); | 433 m_shadowAndForegroundDrawLooper.clear(); |
| 434 m_shadowOnlyImageFilter.clear(); | 434 m_shadowOnlyImageFilter.clear(); |
| 435 m_shadowAndForegroundImageFilter.clear(); | 435 m_shadowAndForegroundImageFilter.clear(); |
| 436 } | 436 } |
| 437 | 437 |
| 438 void CanvasRenderingContext2DState::setShadowOffsetX(float x) | 438 void CanvasRenderingContext2DState::setShadowOffsetX(double x) |
| 439 { | 439 { |
| 440 m_shadowOffset.setWidth(x); | 440 m_shadowOffset.setWidth(x); |
| 441 shadowParameterChanged(); | 441 shadowParameterChanged(); |
| 442 } | 442 } |
| 443 | 443 |
| 444 void CanvasRenderingContext2DState::setShadowOffsetY(float y) | 444 void CanvasRenderingContext2DState::setShadowOffsetY(double y) |
| 445 { | 445 { |
| 446 m_shadowOffset.setHeight(y); | 446 m_shadowOffset.setHeight(y); |
| 447 shadowParameterChanged(); | 447 shadowParameterChanged(); |
| 448 } | 448 } |
| 449 | 449 |
| 450 void CanvasRenderingContext2DState::setShadowBlur(float shadowBlur) | 450 void CanvasRenderingContext2DState::setShadowBlur(double shadowBlur) |
| 451 { | 451 { |
| 452 m_shadowBlur = shadowBlur; | 452 m_shadowBlur = shadowBlur; |
| 453 shadowParameterChanged(); | 453 shadowParameterChanged(); |
| 454 } | 454 } |
| 455 | 455 |
| 456 void CanvasRenderingContext2DState::setShadowColor(SkColor shadowColor) | 456 void CanvasRenderingContext2DState::setShadowColor(SkColor shadowColor) |
| 457 { | 457 { |
| 458 m_shadowColor = shadowColor; | 458 m_shadowColor = shadowColor; |
| 459 shadowParameterChanged(); | 459 shadowParameterChanged(); |
| 460 } | 460 } |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 paint->setLooper(0); | 592 paint->setLooper(0); |
| 593 paint->setImageFilter(shadowAndForegroundImageFilter()); | 593 paint->setImageFilter(shadowAndForegroundImageFilter()); |
| 594 return paint; | 594 return paint; |
| 595 } | 595 } |
| 596 paint->setLooper(shadowAndForegroundDrawLooper()); | 596 paint->setLooper(shadowAndForegroundDrawLooper()); |
| 597 paint->setImageFilter(0); | 597 paint->setImageFilter(0); |
| 598 return paint; | 598 return paint; |
| 599 } | 599 } |
| 600 | 600 |
| 601 } // blink | 601 } // blink |
| OLD | NEW |