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 |