| 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 "core/html/canvas/CanvasRenderingContext2DState.h" | 7 #include "core/html/canvas/CanvasRenderingContext2DState.h" |
| 8 | 8 |
| 9 #include "core/css/CSSFontSelector.h" | 9 #include "core/css/CSSFontSelector.h" |
| 10 #include "core/html/canvas/CanvasGradient.h" | 10 #include "core/html/canvas/CanvasGradient.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 , m_realizedFont(false) | 34 , m_realizedFont(false) |
| 35 , m_isTransformInvertible(true) | 35 , m_isTransformInvertible(true) |
| 36 , m_hasClip(false) | 36 , m_hasClip(false) |
| 37 , m_hasComplexClip(false) | 37 , m_hasComplexClip(false) |
| 38 , m_fillStyleDirty(true) | 38 , m_fillStyleDirty(true) |
| 39 , m_strokeStyleDirty(true) | 39 , m_strokeStyleDirty(true) |
| 40 , m_lineDashDirty(false) | 40 , m_lineDashDirty(false) |
| 41 { | 41 { |
| 42 m_fillPaint.setStyle(SkPaint::kFill_Style); | 42 m_fillPaint.setStyle(SkPaint::kFill_Style); |
| 43 m_fillPaint.setAntiAlias(true); | 43 m_fillPaint.setAntiAlias(true); |
| 44 m_imagePaint.setStyle(SkPaint::kFill_Style); |
| 45 m_imagePaint.setAntiAlias(true); |
| 44 m_strokePaint.setStyle(SkPaint::kStroke_Style); | 46 m_strokePaint.setStyle(SkPaint::kStroke_Style); |
| 45 m_strokePaint.setStrokeWidth(1); | 47 m_strokePaint.setStrokeWidth(1); |
| 46 m_strokePaint.setStrokeCap(SkPaint::kButt_Cap); | 48 m_strokePaint.setStrokeCap(SkPaint::kButt_Cap); |
| 47 m_strokePaint.setStrokeMiter(10); | 49 m_strokePaint.setStrokeMiter(10); |
| 48 m_strokePaint.setStrokeJoin(SkPaint::kMiter_Join); | 50 m_strokePaint.setStrokeJoin(SkPaint::kMiter_Join); |
| 49 m_strokePaint.setAntiAlias(true); | 51 m_strokePaint.setAntiAlias(true); |
| 50 setImageSmoothingEnabled(true); | 52 setImageSmoothingEnabled(true); |
| 51 } | 53 } |
| 52 | 54 |
| 53 CanvasRenderingContext2DState::CanvasRenderingContext2DState(const CanvasRenderi
ngContext2DState& other, ClipListCopyMode mode) | 55 CanvasRenderingContext2DState::CanvasRenderingContext2DState(const CanvasRenderi
ngContext2DState& other, ClipListCopyMode mode) |
| 54 : CSSFontSelectorClient() | 56 : CSSFontSelectorClient() |
| 55 , m_unrealizedSaveCount(other.m_unrealizedSaveCount) | 57 , m_unrealizedSaveCount(other.m_unrealizedSaveCount) |
| 56 , m_unparsedStrokeColor(other.m_unparsedStrokeColor) | 58 , m_unparsedStrokeColor(other.m_unparsedStrokeColor) |
| 57 , m_unparsedFillColor(other.m_unparsedFillColor) | 59 , m_unparsedFillColor(other.m_unparsedFillColor) |
| 58 , m_strokeStyle(other.m_strokeStyle) | 60 , m_strokeStyle(other.m_strokeStyle) |
| 59 , m_fillStyle(other.m_fillStyle) | 61 , m_fillStyle(other.m_fillStyle) |
| 60 , m_strokePaint(other.m_strokePaint) | 62 , m_strokePaint(other.m_strokePaint) |
| 61 , m_fillPaint(other.m_fillPaint) | 63 , m_fillPaint(other.m_fillPaint) |
| 64 , m_imagePaint(other.m_imagePaint) |
| 62 , m_shadowOffset(other.m_shadowOffset) | 65 , m_shadowOffset(other.m_shadowOffset) |
| 63 , m_shadowBlur(other.m_shadowBlur) | 66 , m_shadowBlur(other.m_shadowBlur) |
| 64 , m_shadowColor(other.m_shadowColor) | 67 , m_shadowColor(other.m_shadowColor) |
| 65 , m_emptyDrawLooper(other.m_emptyDrawLooper) | 68 , m_emptyDrawLooper(other.m_emptyDrawLooper) |
| 66 , m_shadowOnlyDrawLooper(other.m_shadowOnlyDrawLooper) | 69 , m_shadowOnlyDrawLooper(other.m_shadowOnlyDrawLooper) |
| 67 , m_shadowAndForegroundDrawLooper(other.m_shadowAndForegroundDrawLooper) | 70 , m_shadowAndForegroundDrawLooper(other.m_shadowAndForegroundDrawLooper) |
| 68 , m_shadowOnlyImageFilter(other.m_shadowOnlyImageFilter) | 71 , m_shadowOnlyImageFilter(other.m_shadowOnlyImageFilter) |
| 69 , m_shadowAndForegroundImageFilter(other.m_shadowAndForegroundImageFilter) | 72 , m_shadowAndForegroundImageFilter(other.m_shadowAndForegroundImageFilter) |
| 70 , m_globalAlpha(other.m_globalAlpha) | 73 , m_globalAlpha(other.m_globalAlpha) |
| 71 , m_transform(other.m_transform) | 74 , m_transform(other.m_transform) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 100 static_cast<CSSFontSelector*>(m_font.fontSelector())->unregisterForInval
idationCallbacks(this); | 103 static_cast<CSSFontSelector*>(m_font.fontSelector())->unregisterForInval
idationCallbacks(this); |
| 101 #endif | 104 #endif |
| 102 | 105 |
| 103 m_unrealizedSaveCount = other.m_unrealizedSaveCount; | 106 m_unrealizedSaveCount = other.m_unrealizedSaveCount; |
| 104 m_unparsedStrokeColor = other.m_unparsedStrokeColor; | 107 m_unparsedStrokeColor = other.m_unparsedStrokeColor; |
| 105 m_unparsedFillColor = other.m_unparsedFillColor; | 108 m_unparsedFillColor = other.m_unparsedFillColor; |
| 106 m_strokeStyle = other.m_strokeStyle; | 109 m_strokeStyle = other.m_strokeStyle; |
| 107 m_fillStyle = other.m_fillStyle; | 110 m_fillStyle = other.m_fillStyle; |
| 108 m_strokePaint = other.m_strokePaint; | 111 m_strokePaint = other.m_strokePaint; |
| 109 m_fillPaint = other.m_fillPaint; | 112 m_fillPaint = other.m_fillPaint; |
| 113 m_imagePaint = other.m_imagePaint; |
| 110 m_shadowOffset = other.m_shadowOffset; | 114 m_shadowOffset = other.m_shadowOffset; |
| 111 m_shadowBlur = other.m_shadowBlur; | 115 m_shadowBlur = other.m_shadowBlur; |
| 112 m_shadowColor = other.m_shadowColor; | 116 m_shadowColor = other.m_shadowColor; |
| 113 m_emptyDrawLooper = other.m_emptyDrawLooper; | 117 m_emptyDrawLooper = other.m_emptyDrawLooper; |
| 114 m_shadowOnlyDrawLooper = other.m_shadowOnlyDrawLooper; | 118 m_shadowOnlyDrawLooper = other.m_shadowOnlyDrawLooper; |
| 115 m_shadowAndForegroundDrawLooper = other.m_shadowAndForegroundDrawLooper; | 119 m_shadowAndForegroundDrawLooper = other.m_shadowAndForegroundDrawLooper; |
| 116 m_shadowOnlyImageFilter = other.m_shadowOnlyImageFilter; | 120 m_shadowOnlyImageFilter = other.m_shadowOnlyImageFilter; |
| 117 m_shadowAndForegroundImageFilter = other.m_shadowAndForegroundImageFilter; | 121 m_shadowAndForegroundImageFilter = other.m_shadowAndForegroundImageFilter; |
| 118 m_globalAlpha = other.m_globalAlpha; | 122 m_globalAlpha = other.m_globalAlpha; |
| 119 m_transform = other.m_transform; | 123 m_transform = other.m_transform; |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 m_fillStyleDirty = false; | 232 m_fillStyleDirty = false; |
| 229 } | 233 } |
| 230 | 234 |
| 231 CanvasStyle* CanvasRenderingContext2DState::style(PaintType paintType) const | 235 CanvasStyle* CanvasRenderingContext2DState::style(PaintType paintType) const |
| 232 { | 236 { |
| 233 switch (paintType) { | 237 switch (paintType) { |
| 234 case FillPaintType: | 238 case FillPaintType: |
| 235 return fillStyle(); | 239 return fillStyle(); |
| 236 case StrokePaintType: | 240 case StrokePaintType: |
| 237 return strokeStyle(); | 241 return strokeStyle(); |
| 242 case ImagePaintType: |
| 243 return nullptr; |
| 238 } | 244 } |
| 239 ASSERT_NOT_REACHED(); | 245 ASSERT_NOT_REACHED(); |
| 240 return nullptr; | 246 return nullptr; |
| 241 } | 247 } |
| 242 | 248 |
| 243 void CanvasRenderingContext2DState::setGlobalAlpha(float alpha) | 249 void CanvasRenderingContext2DState::setGlobalAlpha(float alpha) |
| 244 { | 250 { |
| 245 m_globalAlpha = alpha; | 251 m_globalAlpha = alpha; |
| 246 m_strokeStyleDirty = true; | 252 m_strokeStyleDirty = true; |
| 247 m_fillStyleDirty = true; | 253 m_fillStyleDirty = true; |
| 254 m_imagePaint.setColor(scaleAlpha(SK_ColorBLACK, clampedAlphaForBlending(m_gl
obalAlpha))); |
| 248 } | 255 } |
| 249 | 256 |
| 250 void CanvasRenderingContext2DState::clipPath(const SkPath& path, AntiAliasingMod
e antiAliasingMode) | 257 void CanvasRenderingContext2DState::clipPath(const SkPath& path, AntiAliasingMod
e antiAliasingMode) |
| 251 { | 258 { |
| 252 m_clipList.clipPath(path, antiAliasingMode, affineTransformToSkMatrix(m_tran
sform)); | 259 m_clipList.clipPath(path, antiAliasingMode, affineTransformToSkMatrix(m_tran
sform)); |
| 253 m_hasClip = true; | 260 m_hasClip = true; |
| 254 if (!path.isRect(0)) | 261 if (!path.isRect(0)) |
| 255 m_hasComplexClip = true; | 262 m_hasComplexClip = true; |
| 256 } | 263 } |
| 257 | 264 |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 void CanvasRenderingContext2DState::setShadowColor(SkColor shadowColor) | 369 void CanvasRenderingContext2DState::setShadowColor(SkColor shadowColor) |
| 363 { | 370 { |
| 364 m_shadowColor = shadowColor; | 371 m_shadowColor = shadowColor; |
| 365 shadowParameterChanged(); | 372 shadowParameterChanged(); |
| 366 } | 373 } |
| 367 | 374 |
| 368 void CanvasRenderingContext2DState::setGlobalComposite(SkXfermode::Mode mode) | 375 void CanvasRenderingContext2DState::setGlobalComposite(SkXfermode::Mode mode) |
| 369 { | 376 { |
| 370 m_strokePaint.setXfermodeMode(mode); | 377 m_strokePaint.setXfermodeMode(mode); |
| 371 m_fillPaint.setXfermodeMode(mode); | 378 m_fillPaint.setXfermodeMode(mode); |
| 379 m_imagePaint.setXfermodeMode(mode); |
| 372 } | 380 } |
| 373 | 381 |
| 374 SkXfermode::Mode CanvasRenderingContext2DState::globalComposite() const | 382 SkXfermode::Mode CanvasRenderingContext2DState::globalComposite() const |
| 375 { | 383 { |
| 376 SkXfermode* xferMode = m_strokePaint.getXfermode(); | 384 SkXfermode* xferMode = m_strokePaint.getXfermode(); |
| 377 SkXfermode::Mode mode; | 385 SkXfermode::Mode mode; |
| 378 if (!xferMode || !xferMode->asMode(&mode)) | 386 if (!xferMode || !xferMode->asMode(&mode)) |
| 379 return SkXfermode::kSrcOver_Mode; | 387 return SkXfermode::kSrcOver_Mode; |
| 380 return mode; | 388 return mode; |
| 381 } | 389 } |
| 382 | 390 |
| 383 void CanvasRenderingContext2DState::setImageSmoothingEnabled(bool enabled) | 391 void CanvasRenderingContext2DState::setImageSmoothingEnabled(bool enabled) |
| 384 { | 392 { |
| 385 SkFilterQuality filterQuality = enabled ? kLow_SkFilterQuality : kNone_SkFil
terQuality; | 393 SkFilterQuality filterQuality = enabled ? kLow_SkFilterQuality : kNone_SkFil
terQuality; |
| 386 m_strokePaint.setFilterQuality(filterQuality); | 394 m_strokePaint.setFilterQuality(filterQuality); |
| 387 m_fillPaint.setFilterQuality(filterQuality); | 395 m_fillPaint.setFilterQuality(filterQuality); |
| 396 m_imagePaint.setFilterQuality(filterQuality); |
| 388 } | 397 } |
| 389 | 398 |
| 390 bool CanvasRenderingContext2DState::imageSmoothingEnabled() const | 399 bool CanvasRenderingContext2DState::imageSmoothingEnabled() const |
| 391 { | 400 { |
| 392 return m_strokePaint.getFilterQuality() == kLow_SkFilterQuality; | 401 return m_imagePaint.getFilterQuality() == kLow_SkFilterQuality; |
| 393 } | 402 } |
| 394 | 403 |
| 395 bool CanvasRenderingContext2DState::shouldDrawShadows() const | 404 bool CanvasRenderingContext2DState::shouldDrawShadows() const |
| 396 { | 405 { |
| 397 return alphaChannel(m_shadowColor) && (m_shadowBlur || !m_shadowOffset.isZer
o()); | 406 return alphaChannel(m_shadowColor) && (m_shadowBlur || !m_shadowOffset.isZer
o()); |
| 398 } | 407 } |
| 399 | 408 |
| 400 const SkPaint* CanvasRenderingContext2DState::getPaint(PaintType paintType, Shad
owMode shadowMode, ImageType imageType) const | 409 const SkPaint* CanvasRenderingContext2DState::getPaint(PaintType paintType, Shad
owMode shadowMode, ImageType imageType) const |
| 401 { | 410 { |
| 402 SkPaint* paint; | 411 SkPaint* paint; |
| 403 if (paintType == StrokePaintType) { | 412 switch (paintType) { |
| 413 case StrokePaintType: |
| 404 updateLineDash(); | 414 updateLineDash(); |
| 405 updateStrokeStyle(); | 415 updateStrokeStyle(); |
| 406 paint = &m_strokePaint; | 416 paint = &m_strokePaint; |
| 407 } else { | 417 break; |
| 418 case FillPaintType: |
| 408 updateFillStyle(); | 419 updateFillStyle(); |
| 409 paint = &m_fillPaint; | 420 paint = &m_fillPaint; |
| 421 break; |
| 422 case ImagePaintType: |
| 423 paint = &m_imagePaint; |
| 424 break; |
| 425 default: |
| 426 ASSERT_NOT_REACHED(); |
| 410 } | 427 } |
| 411 | 428 |
| 412 if ((!shouldDrawShadows() && shadowMode == DrawShadowAndForeground) || shado
wMode == DrawForegroundOnly) { | 429 if ((!shouldDrawShadows() && shadowMode == DrawShadowAndForeground) || shado
wMode == DrawForegroundOnly) { |
| 413 paint->setLooper(0); | 430 paint->setLooper(0); |
| 414 paint->setImageFilter(0); | 431 paint->setImageFilter(0); |
| 415 return paint; | 432 return paint; |
| 416 } | 433 } |
| 417 | 434 |
| 418 if (!shouldDrawShadows() && shadowMode == DrawShadowOnly) { | 435 if (!shouldDrawShadows() && shadowMode == DrawShadowOnly) { |
| 419 paint->setLooper(emptyDrawLooper()); // draw nothing | 436 paint->setLooper(emptyDrawLooper()); // draw nothing |
| (...skipping 17 matching lines...) Expand all Loading... |
| 437 paint->setLooper(0); | 454 paint->setLooper(0); |
| 438 paint->setImageFilter(shadowAndForegroundImageFilter()); | 455 paint->setImageFilter(shadowAndForegroundImageFilter()); |
| 439 return paint; | 456 return paint; |
| 440 } | 457 } |
| 441 paint->setLooper(shadowAndForegroundDrawLooper()); | 458 paint->setLooper(shadowAndForegroundDrawLooper()); |
| 442 paint->setImageFilter(0); | 459 paint->setImageFilter(0); |
| 443 return paint; | 460 return paint; |
| 444 } | 461 } |
| 445 | 462 |
| 446 } // blink | 463 } // blink |
| OLD | NEW |