15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2006, 2009, 2010 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Alp Toker <alp@atoker.com> 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef HTMLCanvasElement_h 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define HTMLCanvasElement_h 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/dom/Document.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLElement.h" 33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/html/canvas/CanvasImageSource.h" 341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatRect.h" 351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/IntSize.h" 3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/graphics/Canvas2DLayerBridge.h" 3743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)#include "platform/graphics/GraphicsTypes.h" 38aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch#include "platform/graphics/ImageBufferClient.h" 39f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/heap/Handle.h" 40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "public/platform/WebThread.h" 41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Forward.h" 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)#define CanvasDefaultInterpolationQuality InterpolationLow 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 45c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class AffineTransform; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CanvasContextAttributes; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CanvasRenderingContext; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GraphicsContext; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GraphicsContextStateSaver; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLCanvasElement; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Image; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageData; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageBuffer; 56a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)class ImageBufferSurface; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IntSize; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 59d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class CanvasObserver : public WillBeGarbageCollectedMixin { 60d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(CanvasObserver); 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect) = 0; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void canvasResized(HTMLCanvasElement*) = 0; 64d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if !ENABLE(OILPAN) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void canvasDestroyed(HTMLCanvasElement*) = 0; 66d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif 67d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 68d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) virtual void trace(Visitor*) { } 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 71c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class HTMLCanvasElement FINAL : public HTMLElement, public DocumentVisibilityObserver, public CanvasImageSource, public ImageBufferClient, public blink::WebThread::TaskObserver { 727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLCanvasElement); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) DECLARE_NODE_FACTORY(HTMLCanvasElement); 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~HTMLCanvasElement(); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addObserver(CanvasObserver*); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void removeObserver(CanvasObserver*); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Attributes and functions exposed to script 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int width() const { return size().width(); } 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int height() const { return size().height(); } 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const IntSize& size() const { return m_size; } 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setWidth(int); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHeight(int); 89591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void setAccelerationDisabled(bool accelerationDisabled) { m_accelerationDisabled = accelerationDisabled; } 90591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bool accelerationDisabled() const { return m_accelerationDisabled; } 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setSize(const IntSize& newSize) 9302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch { 94a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (newSize == size()) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch m_ignoreReset = true; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setWidth(newSize.width()); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setHeight(newSize.height()); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_ignoreReset = false; 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) reset(); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0); 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static String toEncodingMimeType(const String& mimeType); 106323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) String toDataURL(const String& mimeType, const double* quality, ExceptionState&) const; 107323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) String toDataURL(const String& mimeType, ExceptionState& exceptionState) const { return toDataURL(mimeType, 0, exceptionState); } 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Used for rendering 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void didDraw(const FloatRect&); 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void notifyObserversCanvasChanged(const FloatRect&); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) void paint(GraphicsContext*, const LayoutRect&); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) GraphicsContext* drawingContext() const; 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) GraphicsContext* existingDrawingContext() const; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CanvasRenderingContext* renderingContext() const { return m_context.get(); } 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void ensureUnacceleratedImageBuffer(); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ImageBuffer* buffer() const; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Image* copiedImage() const; 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearCopiedImage(); 124323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) PassRefPtrWillBeRawPtr<ImageData> getImageData() const; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void makePresentationCopy(); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearPresentationCopy(); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SecurityOrigin* securityOrigin() const; 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool originClean() const { return m_originClean; } 130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setOriginTainted() { m_originClean = false; } 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AffineTransform baseTransform() const; 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool is3D() const; 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 136aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch bool hasImageBuffer() const { return m_imageBuffer; } 137aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch bool hasValidImageBuffer() const; 138aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch void discardImageBuffer(); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldAccelerate(const IntSize&) const; 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 142323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) virtual const AtomicString imageSourceURL() const OVERRIDE; 143323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 14409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE; 14509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 14609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // DocumentVisibilityObserver implementation 14709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void didChangeVisibilityState(PageVisibilityState) OVERRIDE; 14809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 149d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // CanvasImageSource implementation 150d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) virtual PassRefPtr<Image> getSourceImageForCanvas(SourceImageMode, SourceImageStatus*) const OVERRIDE; 151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) virtual bool wouldTaintOrigin(SecurityOrigin*) const OVERRIDE; 152d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) virtual FloatSize sourceSize() const OVERRIDE; 153d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 154aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch // ImageBufferClient implementation 155aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch virtual void notifySurfaceInvalid() OVERRIDE; 156c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual bool isDirty() OVERRIDE { return !m_dirtyRect.isEmpty(); } 157c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void didFinalizeFrame() OVERRIDE; 158c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 159c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) // Implementation of WebThread::TaskObserver methods 160c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void willProcessTask() OVERRIDE; 161c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void didProcessTask() OVERRIDE; 162aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 163f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu virtual void trace(Visitor*) OVERRIDE; 164f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 16509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)protected: 16609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void didMoveToNewDocument(Document& oldDocument) OVERRIDE; 1673c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 16951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) explicit HTMLCanvasElement(Document&); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE; 17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE; 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool areAuthorShadowsAllowed() const OVERRIDE { return false; } 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void reset(); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 177a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) PassOwnPtr<ImageBufferSurface> createImageBufferSurface(const IntSize& deviceSize, int* msaaSampleCount); 178591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void createImageBuffer(); 179aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch void createImageBufferInternal(); 180591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void clearImageBuffer(); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 182c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void resetDirtyRect(); 183c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setSurfaceSize(const IntSize&); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool paintsIntoCanvasBuffer() const; 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 188d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void updateExternallyAllocatedMemory() const; 189f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 1905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) String toDataURLInternal(const String& mimeType, const double* quality, bool isSaving = false) const; 191323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 192d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) WillBeHeapHashSet<RawPtrWillBeWeakMember<CanvasObserver> > m_observers; 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntSize m_size; 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 196f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu OwnPtrWillBeMember<CanvasRenderingContext> m_context; 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_ignoreReset; 199591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch bool m_accelerationDisabled; 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatRect m_dirtyRect; 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 202d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) mutable intptr_t m_externallyAllocatedMemory; 203f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_originClean; 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // It prevents HTMLCanvasElement::buffer() from continuously re-attempting to allocate an imageBuffer 20751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // after the first attempt failed. 20851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) mutable bool m_didFailToCreateImageBuffer; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable bool m_didClearImageBuffer; 210591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch OwnPtr<ImageBuffer> m_imageBuffer; 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable OwnPtr<GraphicsContextStateSaver> m_contextStateSaver; 212591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable RefPtr<Image> m_presentedImage; 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable RefPtr<Image> m_copiedImage; // FIXME: This is temporary for platforms that have to copy the image buffer to render (and for CSSCanvasValue). 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // HTMLCanvasElement_h 220