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

Side by Side 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * Copyright (C) 2007 Alp Toker <alp@atoker.com> 4 * Copyright (C) 2007 Alp Toker <alp@atoker.com>
5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> 5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
6 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org> 6 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org>
7 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. 7 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
8 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved. 8 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved.
9 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 9 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
10 * 10 *
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 #include "core/layout/LayoutBox.h" 51 #include "core/layout/LayoutBox.h"
52 #include "core/layout/LayoutTheme.h" 52 #include "core/layout/LayoutTheme.h"
53 #include "modules/canvas2d/CanvasGradient.h" 53 #include "modules/canvas2d/CanvasGradient.h"
54 #include "modules/canvas2d/CanvasPattern.h" 54 #include "modules/canvas2d/CanvasPattern.h"
55 #include "modules/canvas2d/CanvasRenderingContext2DState.h" 55 #include "modules/canvas2d/CanvasRenderingContext2DState.h"
56 #include "modules/canvas2d/CanvasStyle.h" 56 #include "modules/canvas2d/CanvasStyle.h"
57 #include "modules/canvas2d/HitRegion.h" 57 #include "modules/canvas2d/HitRegion.h"
58 #include "modules/canvas2d/Path2D.h" 58 #include "modules/canvas2d/Path2D.h"
59 #include "platform/fonts/FontCache.h" 59 #include "platform/fonts/FontCache.h"
60 #include "platform/geometry/FloatQuad.h" 60 #include "platform/geometry/FloatQuad.h"
61 #include "platform/graphics/BitmapImage.h"
61 #include "platform/graphics/DrawLooperBuilder.h" 62 #include "platform/graphics/DrawLooperBuilder.h"
62 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h" 63 #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
64 #include "platform/graphics/GraphicsScreen.h"
63 #include "platform/graphics/ImageBuffer.h" 65 #include "platform/graphics/ImageBuffer.h"
64 #include "platform/graphics/StrokeData.h" 66 #include "platform/graphics/StrokeData.h"
65 #include "platform/graphics/skia/SkiaUtils.h" 67 #include "platform/graphics/skia/SkiaUtils.h"
66 #include "platform/text/BidiTextRun.h" 68 #include "platform/text/BidiTextRun.h"
67 #include "public/platform/Platform.h" 69 #include "public/platform/Platform.h"
68 #include "third_party/skia/include/core/SkCanvas.h" 70 #include "third_party/skia/include/core/SkCanvas.h"
69 #include "third_party/skia/include/core/SkImageFilter.h" 71 #include "third_party/skia/include/core/SkImageFilter.h"
70 #include "wtf/ArrayBufferContents.h" 72 #include "wtf/ArrayBufferContents.h"
71 #include "wtf/CheckedArithmetic.h" 73 #include "wtf/CheckedArithmetic.h"
72 #include "wtf/MathExtras.h" 74 #include "wtf/MathExtras.h"
(...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after
929 SkPath skPath = path.skPath(); 931 SkPath skPath = path.skPath();
930 FloatRect bounds = path.boundingRect(); 932 FloatRect bounds = path.boundingRect();
931 skPath.setFillType(fillType); 933 skPath.setFillType(fillType);
932 934
933 if (paintType == CanvasRenderingContext2DState::StrokePaintType) 935 if (paintType == CanvasRenderingContext2DState::StrokePaintType)
934 inflateStrokeRect(bounds); 936 inflateStrokeRect(bounds);
935 937
936 if (!drawingCanvas()) 938 if (!drawingCanvas())
937 return; 939 return;
938 940
941 WillPaintForDevice device(ScreenDevice::sRGBCanvas); // FIXME: color correct .
942
939 if (draw( 943 if (draw(
940 [&skPath, this](SkCanvas* c, const SkPaint* paint) // draw lambda 944 [&skPath, this](SkCanvas* c, const SkPaint* paint) // draw lambda
941 { 945 {
942 c->drawPath(skPath, *paint); 946 c->drawPath(skPath, *paint);
943 }, 947 },
944 [](const SkIRect& rect) // overdraw test lambda 948 [](const SkIRect& rect) // overdraw test lambda
945 { 949 {
946 return false; 950 return false;
947 }, bounds, paintType)) { 951 }, bounds, paintType)) {
948 if (isPathExpensive(path)) { 952 if (isPathExpensive(path)) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 } 989 }
986 990
987 void CanvasRenderingContext2D::fillRect(double x, double y, double width, double height) 991 void CanvasRenderingContext2D::fillRect(double x, double y, double width, double height)
988 { 992 {
989 if (!validateRectForCanvas(x, y, width, height)) 993 if (!validateRectForCanvas(x, y, width, height))
990 return; 994 return;
991 995
992 if (!drawingCanvas()) 996 if (!drawingCanvas())
993 return; 997 return;
994 998
999 WillPaintForDevice device(ScreenDevice::sRGBCanvas); // FIXME: color correct .
1000
995 SkRect rect = SkRect::MakeXYWH(x, y, width, height); 1001 SkRect rect = SkRect::MakeXYWH(x, y, width, height);
996 draw( 1002 draw(
997 [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda 1003 [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda
998 { 1004 {
999 c->drawRect(rect, *paint); 1005 c->drawRect(rect, *paint);
1000 }, 1006 },
1001 [&rect, this](const SkIRect& clipBounds) // overdraw test lambda 1007 [&rect, this](const SkIRect& clipBounds) // overdraw test lambda
1002 { 1008 {
1003 return rectContainsTransformedRect(rect, clipBounds); 1009 return rectContainsTransformedRect(rect, clipBounds);
1004 }, rect, CanvasRenderingContext2DState::FillPaintType); 1010 }, rect, CanvasRenderingContext2DState::FillPaintType);
(...skipping 15 matching lines...) Expand all
1020 } 1026 }
1021 1027
1022 void CanvasRenderingContext2D::strokeRect(double x, double y, double width, doub le height) 1028 void CanvasRenderingContext2D::strokeRect(double x, double y, double width, doub le height)
1023 { 1029 {
1024 if (!validateRectForCanvas(x, y, width, height)) 1030 if (!validateRectForCanvas(x, y, width, height))
1025 return; 1031 return;
1026 1032
1027 if (!drawingCanvas()) 1033 if (!drawingCanvas())
1028 return; 1034 return;
1029 1035
1036 WillPaintForDevice device(ScreenDevice::sRGBCanvas); // FIXME: color correct .
1037
1030 SkRect rect = SkRect::MakeXYWH(x, y, width, height); 1038 SkRect rect = SkRect::MakeXYWH(x, y, width, height);
1031 FloatRect bounds = rect; 1039 FloatRect bounds = rect;
1032 inflateStrokeRect(bounds); 1040 inflateStrokeRect(bounds);
1033 draw( 1041 draw(
1034 [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda 1042 [&rect, this](SkCanvas* c, const SkPaint* paint) // draw lambda
1035 { 1043 {
1036 strokeRectOnCanvas(rect, c, paint); 1044 strokeRectOnCanvas(rect, c, paint);
1037 }, 1045 },
1038 [](const SkIRect& clipBounds) // overdraw test lambda 1046 [](const SkIRect& clipBounds) // overdraw test lambda
1039 { 1047 {
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 SkCanvas* c = drawingCanvas(); 1187 SkCanvas* c = drawingCanvas();
1180 if (!c) 1188 if (!c)
1181 return; 1189 return;
1182 if (!state().isTransformInvertible()) 1190 if (!state().isTransformInvertible())
1183 return; 1191 return;
1184 1192
1185 SkIRect clipBounds; 1193 SkIRect clipBounds;
1186 if (!c->getClipDeviceBounds(&clipBounds)) 1194 if (!c->getClipDeviceBounds(&clipBounds))
1187 return; 1195 return;
1188 1196
1197 WillPaintForDevice device(ScreenDevice::sRGBCanvas);
1198
1189 SkPaint clearPaint; 1199 SkPaint clearPaint;
1190 clearPaint.setXfermodeMode(SkXfermode::kClear_Mode); 1200 clearPaint.setXfermodeMode(SkXfermode::kClear_Mode);
1191 clearPaint.setStyle(SkPaint::kFill_Style); 1201 clearPaint.setStyle(SkPaint::kFill_Style);
1192 FloatRect rect(x, y, width, height); 1202 FloatRect rect(x, y, width, height);
1193 1203
1194 if (rectContainsTransformedRect(rect, clipBounds)) { 1204 if (rectContainsTransformedRect(rect, clipBounds)) {
1195 checkOverdraw(rect, &clearPaint, CanvasRenderingContext2DState::NoImage, ClipFill); 1205 checkOverdraw(rect, &clearPaint, CanvasRenderingContext2DState::NoImage, ClipFill);
1196 if (drawingCanvas()) 1206 if (drawingCanvas())
1197 drawingCanvas()->drawRect(rect, clearPaint); 1207 drawingCanvas()->drawRect(rect, clearPaint);
1198 didDraw(clipBounds); 1208 didDraw(clipBounds);
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 if (!imageSource->isVideoElement()) { 1338 if (!imageSource->isVideoElement()) {
1329 imagePaint.setAntiAlias(shouldDrawImageAntialiased(dstRect)); 1339 imagePaint.setAntiAlias(shouldDrawImageAntialiased(dstRect));
1330 image->draw(c, imagePaint, dstRect, srcRect, DoNotRespectImageOrientatio n, Image::DoNotClampImageToSourceRect); 1340 image->draw(c, imagePaint, dstRect, srcRect, DoNotRespectImageOrientatio n, Image::DoNotClampImageToSourceRect);
1331 } else { 1341 } else {
1332 c->save(); 1342 c->save();
1333 c->clipRect(dstRect); 1343 c->clipRect(dstRect);
1334 c->translate(dstRect.x(), dstRect.y()); 1344 c->translate(dstRect.x(), dstRect.y());
1335 c->scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRect.h eight()); 1345 c->scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRect.h eight());
1336 c->translate(-srcRect.x(), -srcRect.y()); 1346 c->translate(-srcRect.x(), -srcRect.y());
1337 HTMLVideoElement* video = static_cast<HTMLVideoElement*>(imageSource); 1347 HTMLVideoElement* video = static_cast<HTMLVideoElement*>(imageSource);
1338 video->paintCurrentFrame(c, IntRect(IntPoint(), IntSize(video->videoWidt h(), video->videoHeight())), &imagePaint); 1348 video->paintCurrentFrame(c, IntRect(IntPoint(), IntSize(video->videoWidt h(), video->videoHeight())), &imagePaint, nullptr);
1339 } 1349 }
1340 1350
1341 c->restoreToCount(initialSaveCount); 1351 c->restoreToCount(initialSaveCount);
1342 } 1352 }
1343 1353
1344 bool shouldDisableDeferral(CanvasImageSource* imageSource) 1354 bool shouldDisableDeferral(CanvasImageSource* imageSource)
1345 { 1355 {
1346 if (imageSource->isVideoElement()) 1356 if (imageSource->isVideoElement())
1347 return true; 1357 return true;
1348 if (imageSource->isCanvasElement()) { 1358 if (imageSource->isCanvasElement()) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 FloatRect srcRect = normalizeRect(FloatRect(sx, sy, sw, sh)); 1392 FloatRect srcRect = normalizeRect(FloatRect(sx, sy, sw, sh));
1383 FloatRect dstRect = normalizeRect(FloatRect(dx, dy, dw, dh)); 1393 FloatRect dstRect = normalizeRect(FloatRect(dx, dy, dw, dh));
1384 1394
1385 clipRectsToImageRect(FloatRect(FloatPoint(), imageSource->elementSize()), &s rcRect, &dstRect); 1395 clipRectsToImageRect(FloatRect(FloatPoint(), imageSource->elementSize()), &s rcRect, &dstRect);
1386 1396
1387 imageSource->adjustDrawRects(&srcRect, &dstRect); 1397 imageSource->adjustDrawRects(&srcRect, &dstRect);
1388 1398
1389 if (srcRect.isEmpty()) 1399 if (srcRect.isEmpty())
1390 return; 1400 return;
1391 1401
1402 WillPaintForDevice device(ScreenDevice::sRGBCanvas);
1403
1392 if (shouldDisableDeferral(imageSource) || image->isTextureBacked()) 1404 if (shouldDisableDeferral(imageSource) || image->isTextureBacked())
1393 canvas()->disableDeferral(); 1405 canvas()->disableDeferral();
1394 1406
1395 validateStateStack(); 1407 validateStateStack();
1396 1408
1397 draw( 1409 draw(
1398 [this, &imageSource, &image, &srcRect, dstRect](SkCanvas* c, const SkPai nt* paint) // draw lambda 1410 [this, &imageSource, &image, &srcRect, dstRect](SkCanvas* c, const SkPai nt* paint) // draw lambda
1399 { 1411 {
1400 drawImageInternal(c, imageSource, image.get(), srcRect, dstRect, pai nt); 1412 drawImageInternal(c, imageSource, image.get(), srcRect, dstRect, pai nt);
1401 }, 1413 },
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 1454
1443 bool CanvasRenderingContext2D::rectContainsTransformedRect(const FloatRect& rect , const SkIRect& transformedRect) const 1455 bool CanvasRenderingContext2D::rectContainsTransformedRect(const FloatRect& rect , const SkIRect& transformedRect) const
1444 { 1456 {
1445 FloatQuad quad(rect); 1457 FloatQuad quad(rect);
1446 FloatQuad transformedQuad(FloatRect(transformedRect.x(), transformedRect.y() , transformedRect.width(), transformedRect.height())); 1458 FloatQuad transformedQuad(FloatRect(transformedRect.x(), transformedRect.y() , transformedRect.width(), transformedRect.height()));
1447 return state().transform().mapQuad(quad).containsQuad(transformedQuad); 1459 return state().transform().mapQuad(quad).containsQuad(transformedQuad);
1448 } 1460 }
1449 1461
1450 CanvasGradient* CanvasRenderingContext2D::createLinearGradient(double x0, double y0, double x1, double y1) 1462 CanvasGradient* CanvasRenderingContext2D::createLinearGradient(double x0, double y0, double x1, double y1)
1451 { 1463 {
1464 WillPaintForDevice device(ScreenDevice::sRGBCanvas);
1465
1452 CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), FloatP oint(x1, y1)); 1466 CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), FloatP oint(x1, y1));
1453 return gradient; 1467 return gradient;
1454 } 1468 }
1455 1469
1456 CanvasGradient* CanvasRenderingContext2D::createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState& exceptionState) 1470 CanvasGradient* CanvasRenderingContext2D::createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState& exceptionState)
1457 { 1471 {
1472 WillPaintForDevice device(ScreenDevice::sRGBCanvas);
1473
1458 if (r0 < 0 || r1 < 0) { 1474 if (r0 < 0 || r1 < 0) {
1459 exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1")); 1475 exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1"));
1460 return nullptr; 1476 return nullptr;
1461 } 1477 }
1462 1478
1463 CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), r0, Fl oatPoint(x1, y1), r1); 1479 CanvasGradient* gradient = CanvasGradient::create(FloatPoint(x0, y0), r0, Fl oatPoint(x1, y1), r1);
1464 return gradient; 1480 return gradient;
1465 } 1481 }
1466 1482
1467 CanvasPattern* CanvasRenderingContext2D::createPattern(const CanvasImageSourceUn ion& imageSource, const String& repetitionType, ExceptionState& exceptionState) 1483 CanvasPattern* CanvasRenderingContext2D::createPattern(const CanvasImageSourceUn ion& imageSource, const String& repetitionType, ExceptionState& exceptionState)
1468 { 1484 {
1469 Pattern::RepeatMode repeatMode = CanvasPattern::parseRepetitionType(repetiti onType, exceptionState); 1485 Pattern::RepeatMode repeatMode = CanvasPattern::parseRepetitionType(repetiti onType, exceptionState);
1470 if (exceptionState.hadException()) 1486 if (exceptionState.hadException())
1471 return nullptr; 1487 return nullptr;
1472 1488
1473 SourceImageStatus status; 1489 SourceImageStatus status;
1474 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource); 1490 CanvasImageSource* imageSourceInternal = toImageSourceInternal(imageSource);
1475 RefPtr<Image> imageForRendering = imageSourceInternal->getSourceImageForCanv as(&status, PreferNoAcceleration); 1491 RefPtr<Image> imageForRendering = imageSourceInternal->getSourceImageForCanv as(&status, PreferNoAcceleration);
1476 1492
1493 WillPaintForDevice device(ScreenDevice::sRGBCanvas);
1494
1477 switch (status) { 1495 switch (status) {
1478 case NormalSourceImageStatus: 1496 case NormalSourceImageStatus:
1479 break; 1497 break;
1480 case ZeroSizeCanvasSourceImageStatus: 1498 case ZeroSizeCanvasSourceImageStatus:
1481 exceptionState.throwDOMException(InvalidStateError, String::format("The canvas %s is 0.", imageSourceInternal->elementSize().width() ? "height" : "width ")); 1499 exceptionState.throwDOMException(InvalidStateError, String::format("The canvas %s is 0.", imageSourceInternal->elementSize().width() ? "height" : "width "));
1482 return nullptr; 1500 return nullptr;
1483 case UndecodableSourceImageStatus: 1501 case UndecodableSourceImageStatus:
1484 exceptionState.throwDOMException(InvalidStateError, "Source image is in the 'broken' state."); 1502 exceptionState.throwDOMException(InvalidStateError, "Source image is in the 'broken' state.");
1485 return nullptr; 1503 return nullptr;
1486 case InvalidSourceImageStatus: 1504 case InvalidSourceImageStatus:
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
1948 1966
1949 SkCanvas* c = drawingCanvas(); 1967 SkCanvas* c = drawingCanvas();
1950 if (!c) 1968 if (!c)
1951 return; 1969 return;
1952 1970
1953 if (!std::isfinite(x) || !std::isfinite(y)) 1971 if (!std::isfinite(x) || !std::isfinite(y))
1954 return; 1972 return;
1955 if (maxWidth && (!std::isfinite(*maxWidth) || *maxWidth <= 0)) 1973 if (maxWidth && (!std::isfinite(*maxWidth) || *maxWidth <= 0))
1956 return; 1974 return;
1957 1975
1976 WillPaintForDevice device(ScreenDevice::sRGBCanvas);
1977
1958 const Font& font = accessFont(); 1978 const Font& font = accessFont();
1959 const FontMetrics& fontMetrics = font.fontMetrics(); 1979 const FontMetrics& fontMetrics = font.fontMetrics();
1960 1980
1961 // FIXME: Need to turn off font smoothing. 1981 // FIXME: Need to turn off font smoothing.
1962 1982
1963 const ComputedStyle* computedStyle = 0; 1983 const ComputedStyle* computedStyle = 0;
1964 TextDirection direction = toTextDirection(state().direction(), canvas(), &co mputedStyle); 1984 TextDirection direction = toTextDirection(state().direction(), canvas(), &co mputedStyle);
1965 bool isRTL = direction == RTL; 1985 bool isRTL = direction == RTL;
1966 bool override = computedStyle ? isOverride(computedStyle->unicodeBidi()) : f alse; 1986 bool override = computedStyle ? isOverride(computedStyle->unicodeBidi()) : f alse;
1967 1987
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
2154 return false; 2174 return false;
2155 2175
2156 return true; 2176 return true;
2157 } 2177 }
2158 2178
2159 void CanvasRenderingContext2D::drawFocusRing(const Path& path) 2179 void CanvasRenderingContext2D::drawFocusRing(const Path& path)
2160 { 2180 {
2161 if (!drawingCanvas()) 2181 if (!drawingCanvas())
2162 return; 2182 return;
2163 2183
2184 WillPaintForDevice device(ScreenDevice::sRGBCanvas);
2185
2164 SkColor color = LayoutTheme::theme().focusRingColor().rgb(); 2186 SkColor color = LayoutTheme::theme().focusRingColor().rgb();
2165 const int focusRingWidth = 5; 2187 const int focusRingWidth = 5;
2166 2188
2167 drawPlatformFocusRing(path.skPath(), drawingCanvas(), color, focusRingWidth) ; 2189 drawPlatformFocusRing(path.skPath(), drawingCanvas(), Color::toDeviceColor(c olor).rgb(), focusRingWidth);
2168 2190
2169 // We need to add focusRingWidth to dirtyRect. 2191 // We need to add focusRingWidth to dirtyRect.
2170 StrokeData strokeData; 2192 StrokeData strokeData;
2171 strokeData.setThickness(focusRingWidth); 2193 strokeData.setThickness(focusRingWidth);
2172 2194
2173 SkIRect dirtyRect; 2195 SkIRect dirtyRect;
2174 if (!computeDirtyRect(path.strokeBoundingRect(strokeData), &dirtyRect)) 2196 if (!computeDirtyRect(path.strokeBoundingRect(strokeData), &dirtyRect))
2175 return; 2197 return;
2176 2198
2177 didDraw(dirtyRect); 2199 didDraw(dirtyRect);
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
2328 if (imageType == CanvasRenderingContext2DState::NonOpaqueImage) 2350 if (imageType == CanvasRenderingContext2DState::NonOpaqueImage)
2329 return; 2351 return;
2330 if (alpha < 0xFF) 2352 if (alpha < 0xFF)
2331 return; 2353 return;
2332 } 2354 }
2333 2355
2334 canvas()->buffer()->willOverwriteCanvas(); 2356 canvas()->buffer()->willOverwriteCanvas();
2335 } 2357 }
2336 2358
2337 } // namespace blink 2359 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698