Chromium Code Reviews| Index: third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp |
| diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp |
| index 6d9f4a3e0bdd50b7fc6f5caae5f49e9ed7050cc9..db22add3821f8d580ccb8c6c8537c47ee33dd31e 100644 |
| --- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp |
| +++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp |
| @@ -26,6 +26,8 @@ |
| #include "platform/graphics/Image.h" |
| #include "platform/graphics/ImageBuffer.h" |
| #include "platform/graphics/StrokeData.h" |
| +#include "platform/graphics/paint/PaintCanvas.h" |
| +#include "platform/graphics/paint/PaintFlags.h" |
| #include "platform/graphics/skia/SkiaUtils.h" |
| namespace blink { |
| @@ -58,7 +60,7 @@ void BaseRenderingContext2D::realizeSaves() { |
| // state (in turn necessary to support correct resizing and unwinding of the |
| // stack). |
| m_stateStack.back()->resetUnrealizedSaveCount(); |
| - SkCanvas* canvas = drawingCanvas(); |
| + PaintCanvas* canvas = drawingCanvas(); |
| if (canvas) |
| canvas->save(); |
| validateStateStack(); |
| @@ -83,14 +85,14 @@ void BaseRenderingContext2D::restore() { |
| m_stateStack.pop_back(); |
| m_stateStack.back()->clearResolvedFilter(); |
| m_path.transform(state().transform().inverse()); |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (c) |
| c->restore(); |
| validateStateStack(); |
| } |
| -void BaseRenderingContext2D::restoreMatrixClipStack(SkCanvas* c) const { |
| +void BaseRenderingContext2D::restoreMatrixClipStack(PaintCanvas* c) const { |
| if (!c) |
| return; |
| HeapVector<Member<CanvasRenderingContext2DState>>::const_iterator currState; |
| @@ -110,7 +112,7 @@ void BaseRenderingContext2D::restoreMatrixClipStack(SkCanvas* c) const { |
| void BaseRenderingContext2D::unwindStateStack() { |
| if (size_t stackSize = m_stateStack.size()) { |
| - if (SkCanvas* skCanvas = existingDrawingCanvas()) { |
| + if (PaintCanvas* skCanvas = existingDrawingCanvas()) { |
|
danakj
2017/01/20 23:34:14
we should maybe keep track of some patterns for re
enne (OOO)
2017/01/24 01:51:28
Yeah, I will follow up with a patch. This patch i
|
| while (--stackSize) |
| skCanvas->restore(); |
| } |
| @@ -123,7 +125,7 @@ void BaseRenderingContext2D::reset() { |
| m_stateStack.resize(1); |
| m_stateStack.front() = CanvasRenderingContext2DState::create(); |
| m_path.clear(); |
| - if (SkCanvas* c = existingDrawingCanvas()) { |
| + if (PaintCanvas* c = existingDrawingCanvas()) { |
| // The canvas should always have an initial/unbalanced save frame, which |
| // we use to reset the top level matrix and clip here. |
| DCHECK_EQ(c->getSaveCount(), 2); |
| @@ -425,7 +427,7 @@ void BaseRenderingContext2D::setCurrentTransform( |
| } |
| void BaseRenderingContext2D::scale(double sx, double sy) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return; |
| @@ -446,7 +448,7 @@ void BaseRenderingContext2D::scale(double sx, double sy) { |
| } |
| void BaseRenderingContext2D::rotate(double angleInRadians) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return; |
| @@ -466,7 +468,7 @@ void BaseRenderingContext2D::rotate(double angleInRadians) { |
| } |
| void BaseRenderingContext2D::translate(double tx, double ty) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return; |
| if (!state().isTransformInvertible()) |
| @@ -493,7 +495,7 @@ void BaseRenderingContext2D::transform(double m11, |
| double m22, |
| double dx, |
| double dy) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return; |
| @@ -515,7 +517,7 @@ void BaseRenderingContext2D::transform(double m11, |
| } |
| void BaseRenderingContext2D::resetTransform() { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return; |
| @@ -544,7 +546,7 @@ void BaseRenderingContext2D::setTransform(double m11, |
| double m22, |
| double dx, |
| double dy) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return; |
| @@ -622,7 +624,7 @@ void BaseRenderingContext2D::drawPathInternal( |
| if (!drawingCanvas()) |
| return; |
| - if (draw([&skPath](SkCanvas* c, const SkPaint* paint) // draw lambda |
| + if (draw([&skPath](PaintCanvas* c, const PaintFlags* paint) // draw lambda |
| { c->drawPath(skPath, *paint); }, |
| [](const SkIRect& rect) // overdraw test lambda |
| { return false; }, |
| @@ -682,7 +684,7 @@ void BaseRenderingContext2D::fillRect(double x, |
| return; |
| SkRect rect = SkRect::MakeXYWH(x, y, width, height); |
| - draw([&rect](SkCanvas* c, const SkPaint* paint) // draw lambda |
| + draw([&rect](PaintCanvas* c, const PaintFlags* paint) // draw lambda |
| { c->drawRect(rect, *paint); }, |
| [&rect, this](const SkIRect& clipBounds) // overdraw test lambda |
| { return rectContainsTransformedRect(rect, clipBounds); }, |
| @@ -690,8 +692,8 @@ void BaseRenderingContext2D::fillRect(double x, |
| } |
| static void strokeRectOnCanvas(const FloatRect& rect, |
| - SkCanvas* canvas, |
| - const SkPaint* paint) { |
| + PaintCanvas* canvas, |
| + const PaintFlags* paint) { |
| ASSERT(paint->getStyle() == SkPaint::kStroke_Style); |
| if ((rect.width() > 0) != (rect.height() > 0)) { |
| // When stroking, we must skip the zero-dimension segments |
| @@ -719,7 +721,7 @@ void BaseRenderingContext2D::strokeRect(double x, |
| SkRect rect = SkRect::MakeXYWH(x, y, width, height); |
| FloatRect bounds = rect; |
| inflateStrokeRect(bounds); |
| - draw([&rect](SkCanvas* c, const SkPaint* paint) // draw lambda |
| + draw([&rect](PaintCanvas* c, const PaintFlags* paint) // draw lambda |
| { strokeRectOnCanvas(rect, c, paint); }, |
| [](const SkIRect& clipBounds) // overdraw test lambda |
| { return false; }, |
| @@ -728,7 +730,7 @@ void BaseRenderingContext2D::strokeRect(double x, |
| void BaseRenderingContext2D::clipInternal(const Path& path, |
| const String& windingRuleString) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) { |
| return; |
| } |
| @@ -773,7 +775,7 @@ bool BaseRenderingContext2D::isPointInPathInternal( |
| const double x, |
| const double y, |
| const String& windingRuleString) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return false; |
| if (!state().isTransformInvertible()) |
| @@ -802,7 +804,7 @@ bool BaseRenderingContext2D::isPointInStroke(Path2D* domPath, |
| bool BaseRenderingContext2D::isPointInStrokeInternal(const Path& path, |
| const double x, |
| const double y) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return false; |
| if (!state().isTransformInvertible()) |
| @@ -835,7 +837,7 @@ void BaseRenderingContext2D::clearRect(double x, |
| if (!validateRectForCanvas(x, y, width, height)) |
| return; |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c) |
| return; |
| if (!state().isTransformInvertible()) |
| @@ -845,9 +847,9 @@ void BaseRenderingContext2D::clearRect(double x, |
| if (!c->getClipDeviceBounds(&clipBounds)) |
| return; |
| - SkPaint clearPaint; |
| + PaintFlags clearPaint; |
| clearPaint.setBlendMode(SkBlendMode::kClear); |
| - clearPaint.setStyle(SkPaint::kFill_Style); |
| + clearPaint.setStyle(PaintFlags::kFill_Style); |
| FloatRect rect(x, y, width, height); |
| if (rectContainsTransformedRect(rect, clipBounds)) { |
| @@ -996,7 +998,7 @@ bool BaseRenderingContext2D::shouldDrawImageAntialiased( |
| const FloatRect& destRect) const { |
| if (!state().shouldAntialias()) |
| return false; |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| ASSERT(c); |
| const SkMatrix& ctm = c->getTotalMatrix(); |
| @@ -1032,12 +1034,12 @@ static bool isDrawScalingDown(const FloatRect& srcRect, |
| srcRect.height() * srcRect.height(); |
| } |
| -void BaseRenderingContext2D::drawImageInternal(SkCanvas* c, |
| +void BaseRenderingContext2D::drawImageInternal(PaintCanvas* c, |
| CanvasImageSource* imageSource, |
| Image* image, |
| const FloatRect& srcRect, |
| const FloatRect& dstRect, |
| - const SkPaint* paint) { |
| + const PaintFlags* paint) { |
| if (imageSource->isSVGSource()) { |
| trackDrawCall(DrawVectorImage, nullptr, dstRect.width(), dstRect.height()); |
| } else { |
| @@ -1045,7 +1047,7 @@ void BaseRenderingContext2D::drawImageInternal(SkCanvas* c, |
| } |
| int initialSaveCount = c->getSaveCount(); |
| - SkPaint imagePaint = *paint; |
| + PaintFlags imagePaint = *paint; |
| if (paint->getImageFilter()) { |
| SkMatrix ctm = c->getTotalMatrix(); |
| @@ -1061,7 +1063,7 @@ void BaseRenderingContext2D::drawImageInternal(SkCanvas* c, |
| c->concat(invCtm); |
| SkRect bounds = dstRect; |
| ctm.mapRect(&bounds); |
| - SkPaint layerPaint; |
| + PaintFlags layerPaint; |
| layerPaint.setBlendMode(paint->getBlendMode()); |
| layerPaint.setImageFilter(paint->refImageFilter()); |
| @@ -1307,7 +1309,7 @@ void BaseRenderingContext2D::drawImage(ExecutionContext* executionContext, |
| draw( |
| [this, &imageSource, &image, &srcRect, dstRect]( |
| - SkCanvas* c, const SkPaint* paint) // draw lambda |
| + PaintCanvas* c, const PaintFlags* paint) // draw lambda |
| { |
| drawImageInternal(c, imageSource, image.get(), srcRect, dstRect, paint); |
| }, |
| @@ -1344,7 +1346,7 @@ void BaseRenderingContext2D::clearCanvas() { |
| FloatRect canvasRect(0, 0, width(), height()); |
| checkOverdraw(canvasRect, 0, CanvasRenderingContext2DState::NoImage, |
| ClipFill); |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (c) |
| c->clear(hasAlpha() ? SK_ColorTRANSPARENT : SK_ColorBLACK); |
| } |
| @@ -1720,10 +1722,10 @@ void BaseRenderingContext2D::setImageSmoothingQuality(const String& quality) { |
| void BaseRenderingContext2D::checkOverdraw( |
| const SkRect& rect, |
| - const SkPaint* paint, |
| + const PaintFlags* paint, |
| CanvasRenderingContext2DState::ImageType imageType, |
| DrawType drawType) { |
| - SkCanvas* c = drawingCanvas(); |
| + PaintCanvas* c = drawingCanvas(); |
| if (!c || !imageBuffer()->isRecording()) |
| return; |
| @@ -1741,7 +1743,7 @@ void BaseRenderingContext2D::checkOverdraw( |
| deviceRect = SkRect::Make(skIBounds); |
| } |
| - const SkImageInfo& imageInfo = c->imageInfo(); |
| + const SkImageInfo& imageInfo = GetSkCanvas(c)->imageInfo(); |
| if (!deviceRect.contains( |
| SkRect::MakeWH(imageInfo.width(), imageInfo.height()))) |
| return; |
| @@ -1762,7 +1764,7 @@ void BaseRenderingContext2D::checkOverdraw( |
| alpha = paint->getAlpha(); |
| if (isSourceOver && imageType == CanvasRenderingContext2DState::NoImage) { |
| - SkShader* shader = paint->getShader(); |
| + PaintShader* shader = paint->getShader(); |
| if (shader) { |
| if (shader->isOpaque() && alpha == 0xFF) |
| imageBuffer()->willOverwriteCanvas(); |