Chromium Code Reviews| 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" |
| 11 #include "core/css/resolver/StyleBuilder.h" | 11 #include "core/css/resolver/StyleBuilder.h" |
| 12 #include "core/css/resolver/StyleResolverState.h" | 12 #include "core/css/resolver/StyleResolverState.h" |
| 13 #include "core/paint/FilterEffectBuilder.h" | 13 #include "core/paint/FilterEffectBuilder.h" |
| 14 #include "core/style/ComputedStyle.h" | 14 #include "core/style/ComputedStyle.h" |
| 15 #include "modules/canvas2d/CanvasGradient.h" | 15 #include "modules/canvas2d/CanvasGradient.h" |
| 16 #include "modules/canvas2d/CanvasPattern.h" | 16 #include "modules/canvas2d/CanvasPattern.h" |
| 17 #include "modules/canvas2d/CanvasStyle.h" | 17 #include "modules/canvas2d/CanvasStyle.h" |
| 18 #include "platform/graphics/DrawLooperBuilder.h" | 18 #include "platform/graphics/DrawLooperBuilder.h" |
| 19 #include "platform/graphics/filters/SkiaImageFilterBuilder.h" | 19 #include "platform/graphics/filters/SkiaImageFilterBuilder.h" |
| 20 #include "platform/graphics/skia/SkiaUtils.h" | 20 #include "platform/graphics/skia/SkiaUtils.h" |
| 21 #include "third_party/skia/include/effects/SkDashPathEffect.h" | 21 #include "third_party/skia/include/effects/SkDashPathEffect.h" |
| 22 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" | 22 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h" |
| 23 | 23 |
| 24 static const char defaultFont[] = "10px sans-serif"; | 24 static const char defaultFont[] = "10px sans-serif"; |
| 25 static const char defaultFilter[] = "none"; | 25 static const char defaultFilter[] = "none"; |
| 26 static const char defaultImageSmoothingQuality[] = "low"; | |
| 26 | 27 |
| 27 namespace blink { | 28 namespace blink { |
| 28 | 29 |
| 29 CanvasRenderingContext2DState::CanvasRenderingContext2DState() | 30 CanvasRenderingContext2DState::CanvasRenderingContext2DState() |
| 30 : m_unrealizedSaveCount(0) | 31 : m_unrealizedSaveCount(0) |
| 31 , m_strokeStyle(CanvasStyle::createFromRGBA(SK_ColorBLACK)) | 32 , m_strokeStyle(CanvasStyle::createFromRGBA(SK_ColorBLACK)) |
| 32 , m_fillStyle(CanvasStyle::createFromRGBA(SK_ColorBLACK)) | 33 , m_fillStyle(CanvasStyle::createFromRGBA(SK_ColorBLACK)) |
| 33 , m_shadowBlur(0) | 34 , m_shadowBlur(0) |
| 34 , m_shadowColor(Color::transparent) | 35 , m_shadowColor(Color::transparent) |
| 35 , m_globalAlpha(1) | 36 , m_globalAlpha(1) |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 51 m_fillPaint.setAntiAlias(true); | 52 m_fillPaint.setAntiAlias(true); |
| 52 m_imagePaint.setStyle(SkPaint::kFill_Style); | 53 m_imagePaint.setStyle(SkPaint::kFill_Style); |
| 53 m_imagePaint.setAntiAlias(true); | 54 m_imagePaint.setAntiAlias(true); |
| 54 m_strokePaint.setStyle(SkPaint::kStroke_Style); | 55 m_strokePaint.setStyle(SkPaint::kStroke_Style); |
| 55 m_strokePaint.setStrokeWidth(1); | 56 m_strokePaint.setStrokeWidth(1); |
| 56 m_strokePaint.setStrokeCap(SkPaint::kButt_Cap); | 57 m_strokePaint.setStrokeCap(SkPaint::kButt_Cap); |
| 57 m_strokePaint.setStrokeMiter(10); | 58 m_strokePaint.setStrokeMiter(10); |
| 58 m_strokePaint.setStrokeJoin(SkPaint::kMiter_Join); | 59 m_strokePaint.setStrokeJoin(SkPaint::kMiter_Join); |
| 59 m_strokePaint.setAntiAlias(true); | 60 m_strokePaint.setAntiAlias(true); |
| 60 setImageSmoothingEnabled(true); | 61 setImageSmoothingEnabled(true); |
| 62 setImageSmoothingQuality(defaultImageSmoothingQuality); | |
| 61 } | 63 } |
| 62 | 64 |
| 63 CanvasRenderingContext2DState::CanvasRenderingContext2DState(const CanvasRenderi ngContext2DState& other, ClipListCopyMode mode) | 65 CanvasRenderingContext2DState::CanvasRenderingContext2DState(const CanvasRenderi ngContext2DState& other, ClipListCopyMode mode) |
| 64 : CSSFontSelectorClient() | 66 : CSSFontSelectorClient() |
| 65 , m_unrealizedSaveCount(other.m_unrealizedSaveCount) | 67 , m_unrealizedSaveCount(other.m_unrealizedSaveCount) |
| 66 , m_unparsedStrokeColor(other.m_unparsedStrokeColor) | 68 , m_unparsedStrokeColor(other.m_unparsedStrokeColor) |
| 67 , m_unparsedFillColor(other.m_unparsedFillColor) | 69 , m_unparsedFillColor(other.m_unparsedFillColor) |
| 68 , m_strokeStyle(other.m_strokeStyle) | 70 , m_strokeStyle(other.m_strokeStyle) |
| 69 , m_fillStyle(other.m_fillStyle) | 71 , m_fillStyle(other.m_fillStyle) |
| 70 , m_strokePaint(other.m_strokePaint) | 72 , m_strokePaint(other.m_strokePaint) |
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 469 void CanvasRenderingContext2DState::setImageSmoothingEnabled(bool enabled) | 471 void CanvasRenderingContext2DState::setImageSmoothingEnabled(bool enabled) |
| 470 { | 472 { |
| 471 SkFilterQuality filterQuality = enabled ? kLow_SkFilterQuality : kNone_SkFil terQuality; | 473 SkFilterQuality filterQuality = enabled ? kLow_SkFilterQuality : kNone_SkFil terQuality; |
| 472 m_strokePaint.setFilterQuality(filterQuality); | 474 m_strokePaint.setFilterQuality(filterQuality); |
| 473 m_fillPaint.setFilterQuality(filterQuality); | 475 m_fillPaint.setFilterQuality(filterQuality); |
| 474 m_imagePaint.setFilterQuality(filterQuality); | 476 m_imagePaint.setFilterQuality(filterQuality); |
| 475 } | 477 } |
| 476 | 478 |
| 477 bool CanvasRenderingContext2DState::imageSmoothingEnabled() const | 479 bool CanvasRenderingContext2DState::imageSmoothingEnabled() const |
| 478 { | 480 { |
| 479 return m_imagePaint.getFilterQuality() == kLow_SkFilterQuality; | 481 return m_imagePaint.getFilterQuality() == kLow_SkFilterQuality; |
|
zino
2015/10/14 07:51:36
I think you will have to modify the imageSmoothing
| |
| 480 } | 482 } |
| 481 | 483 |
| 484 void CanvasRenderingContext2DState::setImageSmoothingQuality(String quality) | |
| 485 { | |
| 486 SkFilterQuality filterQuality = imageSmoothingQuality2SkFilterQuality(qualit y); | |
| 487 m_strokePaint.setFilterQuality(filterQuality); | |
| 488 m_fillPaint.setFilterQuality(filterQuality); | |
| 489 m_imagePaint.setFilterQuality(filterQuality); | |
| 490 } | |
| 491 | |
| 492 String CanvasRenderingContext2DState::imageSmoothingQuality() const | |
| 493 { | |
| 494 return SkFilterQuality2imageSmoothingQuality(m_imagePaint.getFilterQuality() ); | |
| 495 } | |
| 496 | |
| 497 String CanvasRenderingContext2DState::SkFilterQuality2imageSmoothingQuality(SkFi lterQuality quality) const | |
|
zino
2015/10/14 07:51:36
I think it is better to avoid unnecessary addition
| |
| 498 { | |
| 499 if (quality == kLow_SkFilterQuality) | |
|
zino
2015/10/14 07:51:36
Please see: http://www.chromium.org/blink/coding-s
| |
| 500 return "low"; | |
| 501 else if (quality == kMedium_SkFilterQuality) | |
| 502 return "medium"; | |
| 503 else if (quality == kHigh_SkFilterQuality) | |
| 504 return "high"; | |
| 505 else | |
| 506 return "none"; | |
| 507 } | |
| 508 | |
| 509 SkFilterQuality CanvasRenderingContext2DState::imageSmoothingQuality2SkFilterQua lity(String quality) const | |
| 510 { | |
| 511 if (quality == "low") | |
|
zino
2015/10/14 07:51:36
ditto
('ditto' means that this is the same as abov
| |
| 512 return kLow_SkFilterQuality; | |
| 513 else if (quality == "medium") | |
| 514 return kMedium_SkFilterQuality; | |
| 515 else if (quality == "high") | |
| 516 return kHigh_SkFilterQuality; | |
| 517 else | |
| 518 return kNone_SkFilterQuality; | |
| 519 } | |
| 520 | |
| 482 bool CanvasRenderingContext2DState::shouldDrawShadows() const | 521 bool CanvasRenderingContext2DState::shouldDrawShadows() const |
| 483 { | 522 { |
| 484 return alphaChannel(m_shadowColor) && (m_shadowBlur || !m_shadowOffset.isZer o()); | 523 return alphaChannel(m_shadowColor) && (m_shadowBlur || !m_shadowOffset.isZer o()); |
| 485 } | 524 } |
| 486 | 525 |
| 487 const SkPaint* CanvasRenderingContext2DState::getPaint(PaintType paintType, Shad owMode shadowMode, ImageType imageType) const | 526 const SkPaint* CanvasRenderingContext2DState::getPaint(PaintType paintType, Shad owMode shadowMode, ImageType imageType) const |
| 488 { | 527 { |
| 489 SkPaint* paint; | 528 SkPaint* paint; |
| 490 switch (paintType) { | 529 switch (paintType) { |
| 491 case StrokePaintType: | 530 case StrokePaintType: |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 533 paint->setLooper(0); | 572 paint->setLooper(0); |
| 534 paint->setImageFilter(shadowAndForegroundImageFilter()); | 573 paint->setImageFilter(shadowAndForegroundImageFilter()); |
| 535 return paint; | 574 return paint; |
| 536 } | 575 } |
| 537 paint->setLooper(shadowAndForegroundDrawLooper()); | 576 paint->setLooper(shadowAndForegroundDrawLooper()); |
| 538 paint->setImageFilter(0); | 577 paint->setImageFilter(0); |
| 539 return paint; | 578 return paint; |
| 540 } | 579 } |
| 541 | 580 |
| 542 } // blink | 581 } // blink |
| OLD | NEW |