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; |