Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp

Issue 1331533002: [poc] curve-filter Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix CanvasRenderingContext2D::createPattern crash for #40 Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698