Changeset 95080 in webkit
- Timestamp:
- Sep 14, 2011 1:10:05 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r95079 r95080 1 2011-09-14 Ben Wells <benwells@chromium.org> 2 3 Large canvas fills should not crash or create unnecessarily large image buffers 4 https://bugs.webkit.org/show_bug.cgi?id=67988 5 6 Reviewed by Stephen White. 7 8 * fast/canvas/canvas-large-fills-expected.txt: Added. 9 * fast/canvas/canvas-large-fills.html: Added. 10 1 11 2011-09-14 Kentaro Hara <haraken@google.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r95079 r95080 1 2011-09-14 Ben Wells <benwells@chromium.org> 2 3 Large canvas fills should not crash or create unnecessarily large image buffers 4 https://bugs.webkit.org/show_bug.cgi?id=67988 5 6 When using source-in, destination-in, source-out, or destination-atop a temporary 7 buffer is created. This buffer only needs to be big enough to cover the intersection 8 of the path and the canvas. 9 10 This change also adds some null checks for failures to create contexts or buffers. 11 12 Reviewed by Stephen White. 13 14 Test: fast/canvas/canvas-large-fills.html 15 16 * html/canvas/CanvasRenderingContext2D.cpp: 17 (WebCore::CanvasRenderingContext2D::clearCanvas): 18 (WebCore::CanvasRenderingContext2D::fillAndDisplayTransparencyElsewhere): 19 1 20 2011-09-14 Kentaro Hara <haraken@google.com> 2 21 -
trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
r94457 r95080 1473 1473 FloatRect canvasRect(0, 0, canvas()->width(), canvas()->height()); 1474 1474 GraphicsContext* c = drawingContext(); 1475 if (!c) 1476 return; 1475 1477 1476 1478 c->save(); … … 1508 1510 ASSERT(shouldDisplayTransparencyElsewhere()); 1509 1511 1512 IntRect canvasRect(0, 0, canvas()->width(), canvas()->height()); 1513 canvasRect = canvas()->baseTransform().mapRect(canvasRect); 1510 1514 Path path = transformAreaToDevice(area); 1511 1515 IntRect bufferRect = enclosingIntRect(path.boundingRect()); 1516 bufferRect.intersect(canvasRect); 1512 1517 path.translate(FloatSize(-bufferRect.x(), -bufferRect.y())); 1513 1518 1514 1519 RenderingMode renderMode = canvas()->buffer()->isAccelerated() ? Accelerated : Unaccelerated; 1515 1520 OwnPtr<ImageBuffer> buffer = ImageBuffer::create(bufferRect.size(), ColorSpaceDeviceRGB, renderMode); 1521 if (!buffer) 1522 return; 1523 1516 1524 buffer->context()->setCompositeOperation(CompositeSourceOver); 1517 1525 state().m_fillStyle->applyFillColor(buffer->context()); 1518 1526 buffer->context()->fillPath(path); 1519 1527 1520 FloatRect canvasRect(0, 0, canvas()->width(), canvas()->height());1521 canvasRect = canvas()->baseTransform().mapRect(canvasRect);1522 1523 GraphicsContext* c = drawingContext(); 1528 GraphicsContext* c = drawingContext(); 1529 if (!c) 1530 return; 1531 1524 1532 c->save(); 1525 1533 c->setCTM(AffineTransform());
Note: See TracChangeset
for help on using the changeset viewer.