| Index: Source/core/html/canvas/CanvasRenderingContext2DState.cpp
|
| diff --git a/Source/core/html/canvas/CanvasRenderingContext2DState.cpp b/Source/core/html/canvas/CanvasRenderingContext2DState.cpp
|
| index f7827fa8e0fde02214202e47ba9558d5487e9840..fc4102e0c6e20136fd2454e8aaafa1cf9d17859c 100644
|
| --- a/Source/core/html/canvas/CanvasRenderingContext2DState.cpp
|
| +++ b/Source/core/html/canvas/CanvasRenderingContext2DState.cpp
|
| @@ -41,6 +41,8 @@ CanvasRenderingContext2DState::CanvasRenderingContext2DState()
|
| {
|
| m_fillPaint.setStyle(SkPaint::kFill_Style);
|
| m_fillPaint.setAntiAlias(true);
|
| + m_imagePaint.setStyle(SkPaint::kFill_Style);
|
| + m_imagePaint.setAntiAlias(true);
|
| m_strokePaint.setStyle(SkPaint::kStroke_Style);
|
| m_strokePaint.setStrokeWidth(1);
|
| m_strokePaint.setStrokeCap(SkPaint::kButt_Cap);
|
| @@ -59,6 +61,7 @@ CanvasRenderingContext2DState::CanvasRenderingContext2DState(const CanvasRenderi
|
| , m_fillStyle(other.m_fillStyle)
|
| , m_strokePaint(other.m_strokePaint)
|
| , m_fillPaint(other.m_fillPaint)
|
| + , m_imagePaint(other.m_imagePaint)
|
| , m_shadowOffset(other.m_shadowOffset)
|
| , m_shadowBlur(other.m_shadowBlur)
|
| , m_shadowColor(other.m_shadowColor)
|
| @@ -107,6 +110,7 @@ CanvasRenderingContext2DState& CanvasRenderingContext2DState::operator=(const Ca
|
| m_fillStyle = other.m_fillStyle;
|
| m_strokePaint = other.m_strokePaint;
|
| m_fillPaint = other.m_fillPaint;
|
| + m_imagePaint = other.m_imagePaint;
|
| m_shadowOffset = other.m_shadowOffset;
|
| m_shadowBlur = other.m_shadowBlur;
|
| m_shadowColor = other.m_shadowColor;
|
| @@ -235,16 +239,33 @@ CanvasStyle* CanvasRenderingContext2DState::style(PaintType paintType) const
|
| return fillStyle();
|
| case StrokePaintType:
|
| return strokeStyle();
|
| + case ImagePaintType:
|
| + return nullptr;
|
| }
|
| ASSERT_NOT_REACHED();
|
| return nullptr;
|
| }
|
|
|
| +void CanvasRenderingContext2DState::setShouldAntialias(bool shouldAntialias)
|
| +{
|
| + m_fillPaint.setAntiAlias(shouldAntialias);
|
| + m_strokePaint.setAntiAlias(shouldAntialias);
|
| + m_imagePaint.setAntiAlias(shouldAntialias);
|
| +}
|
| +
|
| +bool CanvasRenderingContext2DState::shouldAntialias() const
|
| +{
|
| + ASSERT(m_fillPaint.isAntiAlias() == m_strokePaint.isAntiAlias() && m_fillPaint.isAntiAlias() == m_imagePaint.isAntiAlias());
|
| + return m_fillPaint.isAntiAlias();
|
| +}
|
| +
|
| void CanvasRenderingContext2DState::setGlobalAlpha(float alpha)
|
| {
|
| m_globalAlpha = alpha;
|
| m_strokeStyleDirty = true;
|
| m_fillStyleDirty = true;
|
| + int imageAlpha = clampedAlphaForBlending(alpha);
|
| + m_imagePaint.setAlpha(imageAlpha > 255 ? 255 : imageAlpha);
|
| }
|
|
|
| void CanvasRenderingContext2DState::clipPath(const SkPath& path, AntiAliasingMode antiAliasingMode)
|
| @@ -369,6 +390,7 @@ void CanvasRenderingContext2DState::setGlobalComposite(SkXfermode::Mode mode)
|
| {
|
| m_strokePaint.setXfermodeMode(mode);
|
| m_fillPaint.setXfermodeMode(mode);
|
| + m_imagePaint.setXfermodeMode(mode);
|
| }
|
|
|
| SkXfermode::Mode CanvasRenderingContext2DState::globalComposite() const
|
| @@ -385,11 +407,12 @@ void CanvasRenderingContext2DState::setImageSmoothingEnabled(bool enabled)
|
| SkFilterQuality filterQuality = enabled ? kLow_SkFilterQuality : kNone_SkFilterQuality;
|
| m_strokePaint.setFilterQuality(filterQuality);
|
| m_fillPaint.setFilterQuality(filterQuality);
|
| + m_imagePaint.setFilterQuality(filterQuality);
|
| }
|
|
|
| bool CanvasRenderingContext2DState::imageSmoothingEnabled() const
|
| {
|
| - return m_strokePaint.getFilterQuality() == kLow_SkFilterQuality;
|
| + return m_imagePaint.getFilterQuality() == kLow_SkFilterQuality;
|
| }
|
|
|
| bool CanvasRenderingContext2DState::shouldDrawShadows() const
|
| @@ -400,13 +423,22 @@ bool CanvasRenderingContext2DState::shouldDrawShadows() const
|
| const SkPaint* CanvasRenderingContext2DState::getPaint(PaintType paintType, ShadowMode shadowMode, ImageType imageType) const
|
| {
|
| SkPaint* paint;
|
| - if (paintType == StrokePaintType) {
|
| + switch (paintType) {
|
| + case StrokePaintType:
|
| updateLineDash();
|
| updateStrokeStyle();
|
| paint = &m_strokePaint;
|
| - } else {
|
| + break;
|
| + default:
|
| + ASSERT_NOT_REACHED();
|
| + // no break on purpose: paint needs to be assigned to avoid compiler warning about uninitialized variable
|
| + case FillPaintType:
|
| updateFillStyle();
|
| paint = &m_fillPaint;
|
| + break;
|
| + case ImagePaintType:
|
| + paint = &m_imagePaint;
|
| + break;
|
| }
|
|
|
| if ((!shouldDrawShadows() && shadowMode == DrawShadowAndForeground) || shadowMode == DrawForegroundOnly) {
|
|
|