| Index: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
|
| diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
|
| index c2b01b6ffa46942b5425a244b164e8e34c580923..e3dba850281c3b25d08e8a34819a7d142c751c29 100644
|
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
|
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
|
| @@ -58,8 +58,10 @@
|
| #include "modules/canvas2d/Path2D.h"
|
| #include "platform/fonts/FontCache.h"
|
| #include "platform/geometry/FloatQuad.h"
|
| +#include "platform/graphics/BitmapImage.h"
|
| #include "platform/graphics/DrawLooperBuilder.h"
|
| #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
|
| +#include "platform/graphics/GraphicsScreen.h"
|
| #include "platform/graphics/ImageBuffer.h"
|
| #include "platform/graphics/StrokeData.h"
|
| #include "platform/graphics/skia/SkiaUtils.h"
|
| @@ -936,6 +938,8 @@ void CanvasRenderingContext2D::drawPathInternal(const Path& path, CanvasRenderin
|
| if (!drawingCanvas())
|
| return;
|
|
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas); // FIXME: color correct.
|
| +
|
| if (draw(
|
| [&skPath, this](SkCanvas* c, const SkPaint* paint) // draw lambda
|
| {
|
| @@ -992,6 +996,8 @@ void CanvasRenderingContext2D::fillRect(double x, double y, double width, double
|
| if (!drawingCanvas())
|
| return;
|
|
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas); // FIXME: color correct.
|
| +
|
| SkRect rect = SkRect::MakeXYWH(x, y, width, height);
|
| draw(
|
| [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda
|
| @@ -1027,6 +1033,8 @@ void CanvasRenderingContext2D::strokeRect(double x, double y, double width, doub
|
| if (!drawingCanvas())
|
| return;
|
|
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas); // FIXME: color correct.
|
| +
|
| SkRect rect = SkRect::MakeXYWH(x, y, width, height);
|
| FloatRect bounds = rect;
|
| inflateStrokeRect(bounds);
|
| @@ -1186,6 +1194,8 @@ void CanvasRenderingContext2D::clearRect(double x, double y, double width, doubl
|
| if (!c->getClipDeviceBounds(&clipBounds))
|
| return;
|
|
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas);
|
| +
|
| SkPaint clearPaint;
|
| clearPaint.setXfermodeMode(SkXfermode::kClear_Mode);
|
| clearPaint.setStyle(SkPaint::kFill_Style);
|
| @@ -1335,7 +1345,7 @@ void CanvasRenderingContext2D::drawImageInternal(SkCanvas* c, CanvasImageSource*
|
| c->scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRect.height());
|
| c->translate(-srcRect.x(), -srcRect.y());
|
| HTMLVideoElement* video = static_cast<HTMLVideoElement*>(imageSource);
|
| - video->paintCurrentFrame(c, IntRect(IntPoint(), IntSize(video->videoWidth(), video->videoHeight())), &imagePaint);
|
| + video->paintCurrentFrame(c, IntRect(IntPoint(), IntSize(video->videoWidth(), video->videoHeight())), &imagePaint, nullptr);
|
| }
|
|
|
| c->restoreToCount(initialSaveCount);
|
| @@ -1389,6 +1399,8 @@ void CanvasRenderingContext2D::drawImage(CanvasImageSource* imageSource,
|
| if (srcRect.isEmpty())
|
| return;
|
|
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas);
|
| +
|
| if (shouldDisableDeferral(imageSource) || image->isTextureBacked())
|
| canvas()->disableDeferral();
|
|
|
| @@ -1449,12 +1461,16 @@ bool CanvasRenderingContext2D::rectContainsTransformedRect(const FloatRect& rect
|
|
|
| CanvasGradient* CanvasRenderingContext2D::createLinearGradient(double x0, double y0, double x1, double y1)
|
| {
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas);
|
| +
|
| CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), FloatPoint(x1, y1));
|
| return gradient;
|
| }
|
|
|
| CanvasGradient* CanvasRenderingContext2D::createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState& exceptionState)
|
| {
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas);
|
| +
|
| if (r0 < 0 || r1 < 0) {
|
| exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1"));
|
| return nullptr;
|
| @@ -1474,6 +1490,8 @@ CanvasPattern* CanvasRenderingContext2D::createPattern(const CanvasImageSourceUn
|
| CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
|
| RefPtr<Image> imageForRendering = imageSourceInternal->getSourceImageForCanvas(&status, PreferNoAcceleration);
|
|
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas);
|
| +
|
| switch (status) {
|
| case NormalSourceImageStatus:
|
| break;
|
| @@ -1955,6 +1973,8 @@ void CanvasRenderingContext2D::drawTextInternal(const String& text, double x, do
|
| if (maxWidth && (!std::isfinite(*maxWidth) || *maxWidth <= 0))
|
| return;
|
|
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas);
|
| +
|
| const Font& font = accessFont();
|
| const FontMetrics& fontMetrics = font.fontMetrics();
|
|
|
| @@ -2161,10 +2181,12 @@ void CanvasRenderingContext2D::drawFocusRing(const Path& path)
|
| if (!drawingCanvas())
|
| return;
|
|
|
| + WillPaintForDevice device(ScreenDevice::sRGBCanvas);
|
| +
|
| SkColor color = LayoutTheme::theme().focusRingColor().rgb();
|
| const int focusRingWidth = 5;
|
|
|
| - drawPlatformFocusRing(path.skPath(), drawingCanvas(), color, focusRingWidth);
|
| + drawPlatformFocusRing(path.skPath(), drawingCanvas(), Color::toDeviceColor(color).rgb(), focusRingWidth);
|
|
|
| // We need to add focusRingWidth to dirtyRect.
|
| StrokeData strokeData;
|
|
|