15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006, 2007, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef CanvasRenderingContext2D_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define CanvasRenderingContext2D_h
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
29197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptWrappable.h"
3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/css/CSSFontSelectorClient.h"
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/Canvas2DContextAttributes.h"
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/CanvasPathMethods.h"
3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/CanvasRenderingContext.h"
34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/html/canvas/HitRegion.h"
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/svg/SVGMatrixTearOff.h"
36a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/fonts/Font.h"
37f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "platform/graphics/Color.h"
38a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/geometry/FloatSize.h"
39f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "platform/graphics/GraphicsTypes.h"
40a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/ImageBuffer.h"
41a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/Path.h"
421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/transforms/AffineTransform.h"
43521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "wtf/HashMap.h"
44521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "wtf/Vector.h"
45521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "wtf/text/WTFString.h"
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { class WebLayer; }
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
49c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CanvasImageSource;
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CanvasGradient;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CanvasPattern;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CanvasStyle;
55d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class Path2D;
56f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)class Element;
57df95704c49daea886ddad70775bda23618d6274dBen Murdochclass ExceptionState;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FloatRect;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GraphicsContext;
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLCanvasElement;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLImageElement;
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLVideoElement;
637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass HitRegionOptions;
64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass ImageBitmap;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageData;
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TextMetrics;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
68f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liutypedef WillBeHeapHashMap<String, RefPtrWillBeMember<MutableStylePropertySet> > MutableStylePropertyMap;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
70f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuclass CanvasRenderingContext2D FINAL: public CanvasRenderingContext, public ScriptWrappable, public CanvasPathMethods {
717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DEFINE_WRAPPERTYPEINFO();
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    static PassOwnPtrWillBeRawPtr<CanvasRenderingContext2D> create(HTMLCanvasElement* canvas, const Canvas2DContextAttributes* attrs, bool usesCSSCompatibilityParseMode)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
75f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu        return adoptPtrWillBeNoop(new CanvasRenderingContext2D(canvas, attrs, usesCSSCompatibilityParseMode));
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~CanvasRenderingContext2D();
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CanvasStyle* strokeStyle() const;
80c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void setStrokeStyle(PassRefPtrWillBeRawPtr<CanvasStyle>);
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CanvasStyle* fillStyle() const;
83c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void setFillStyle(PassRefPtrWillBeRawPtr<CanvasStyle>);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float lineWidth() const;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setLineWidth(float);
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String lineCap() const;
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setLineCap(const String&);
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String lineJoin() const;
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setLineJoin(const String&);
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float miterLimit() const;
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setMiterLimit(float);
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<float>& getLineDash() const;
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setLineDash(const Vector<float>&);
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float lineDashOffset() const;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setLineDashOffset(float);
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float shadowOffsetX() const;
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadowOffsetX(float);
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float shadowOffsetY() const;
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadowOffsetY(float);
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float shadowBlur() const;
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadowBlur(float);
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String shadowColor() const;
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadowColor(const String&);
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float globalAlpha() const;
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setGlobalAlpha(float);
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
118aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    bool isContextLost() const;
119aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String globalCompositeOperation() const;
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setGlobalCompositeOperation(const String&);
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    void save() { ++m_stateStack.last()->m_unrealizedSaveCount; }
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void restore();
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
126d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtr<SVGMatrixTearOff> currentTransform() const
1271e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    {
128d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)        return SVGMatrixTearOff::create(state().m_transform);
1291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    }
130a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    void setCurrentTransform(PassRefPtr<SVGMatrixTearOff>);
1311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void scale(float sx, float sy);
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void rotate(float angleInRadians);
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void translate(float tx, float ty);
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void transform(float m11, float m12, float m21, float m22, float dx, float dy);
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setTransform(float m11, float m12, float m21, float m22, float dx, float dy);
1378abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    void resetTransform();
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setStrokeColor(const String& color);
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setStrokeColor(float grayLevel);
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setStrokeColor(const String& color, float alpha);
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setStrokeColor(float grayLevel, float alpha);
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setStrokeColor(float r, float g, float b, float a);
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setStrokeColor(float c, float m, float y, float k, float a);
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setFillColor(const String& color);
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setFillColor(float grayLevel);
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setFillColor(const String& color, float alpha);
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setFillColor(float grayLevel, float alpha);
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setFillColor(float r, float g, float b, float a);
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setFillColor(float c, float m, float y, float k, float a);
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void beginPath();
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void fill(const String& winding = "nonzero");
15610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void fill(Path2D*, const String& winding = "nonzero");
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void stroke();
1586f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    void stroke(Path2D*);
159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void clip(const String& winding = "nonzero");
16010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void clip(Path2D*, const String& winding = "nonzero");
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    bool isPointInPath(const float x, const float y, const String& winding = "nonzero");
16310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    bool isPointInPath(Path2D*, const float x, const float y, const String& winding = "nonzero");
164926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    bool isPointInStroke(const float x, const float y);
1656f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    bool isPointInStroke(Path2D*, const float x, const float y);
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
167aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void scrollPathIntoView();
1686f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    void scrollPathIntoView(Path2D*);
169aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearRect(float x, float y, float width, float height);
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void fillRect(float x, float y, float width, float height);
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void strokeRect(float x, float y, float width, float height);
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadow(float width, float height, float blur);
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadow(float width, float height, float blur, const String& color);
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadow(float width, float height, float blur, float grayLevel);
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadow(float width, float height, float blur, const String& color, float alpha);
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadow(float width, float height, float blur, float grayLevel, float alpha);
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadow(float width, float height, float blur, float r, float g, float b, float a);
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadow(float width, float height, float blur, float c, float m, float y, float k, float a);
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearShadow();
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
184d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void drawImage(CanvasImageSource*, float x, float y, ExceptionState&);
185d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void drawImage(CanvasImageSource*, float x, float y, float width, float height, ExceptionState&);
186d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void drawImage(CanvasImageSource*, float sx, float sy, float sw, float sh, float dx, float dy, float dw, float dh, ExceptionState&);
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void drawImageFromRect(HTMLImageElement*, float sx = 0, float sy = 0, float sw = 0, float sh = 0,
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                           float dx = 0, float dy = 0, float dw = 0, float dh = 0, const String& compositeOperation = emptyString());
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setAlpha(float);
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setCompositeOperation(const String&);
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
195c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CanvasGradient> createLinearGradient(float x0, float y0, float x1, float y1);
196c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CanvasGradient> createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1, ExceptionState&);
197c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<CanvasPattern> createPattern(CanvasImageSource*, const String& repetitionType, ExceptionState&);
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1996f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    PassRefPtrWillBeRawPtr<ImageData> createImageData(PassRefPtrWillBeRawPtr<ImageData>) const;
200aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    PassRefPtrWillBeRawPtr<ImageData> createImageData(float width, float height, ExceptionState&) const;
201aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    PassRefPtrWillBeRawPtr<ImageData> getImageData(float sx, float sy, float sw, float sh, ExceptionState&) const;
202f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void putImageData(ImageData*, float dx, float dy);
203f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void putImageData(ImageData*, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight);
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void reset();
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String font() const;
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setFont(const String&);
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String textAlign() const;
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setTextAlign(const String&);
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String textBaseline() const;
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setTextBaseline(const String&);
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    String direction() const;
2177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void setDirection(const String&);
2187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void fillText(const String& text, float x, float y);
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void fillText(const String& text, float x, float y, float maxWidth);
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void strokeText(const String& text, float x, float y);
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void strokeText(const String& text, float x, float y, float maxWidth);
223c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<TextMetrics> measureText(const String& text);
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    LineCap getLineCap() const { return state().m_lineCap; }
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    LineJoin getLineJoin() const { return state().m_lineJoin; }
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2281fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    bool imageSmoothingEnabled() const;
2291fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    void setImageSmoothingEnabled(bool);
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
231c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<Canvas2DContextAttributes> getContextAttributes() const;
23253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
23307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    void drawFocusIfNeeded(Element*);
23410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void drawFocusIfNeeded(Path2D*, Element*);
235f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
2367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void addHitRegion(const HitRegionOptions&, ExceptionState&);
237197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void removeHitRegion(const String& id);
238197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void clearHitRegions();
239197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    HitRegion* hitRegionAtPoint(const LayoutPoint&);
240197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    unsigned hitRegionsCount() const;
241197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
242aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void loseContext();
243aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void restoreContext();
244aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
245f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    virtual void trace(Visitor*) OVERRIDE;
246f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
2487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    enum Direction {
2497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        DirectionInherit,
2507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        DirectionRTL,
2517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        DirectionLTR
2527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    };
2537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
25407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    class State FINAL : public CSSFontSelectorClient {
25507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    public:
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        State();
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        virtual ~State();
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        State(const State&);
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        State& operator=(const State&);
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
26209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        // CSSFontSelectorClient implementation
26309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        virtual void fontsNeedUpdate(CSSFontSelector*) OVERRIDE;
26409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
265c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        virtual void trace(Visitor*) OVERRIDE;
26607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
26709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        unsigned m_unrealizedSaveCount;
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        String m_unparsedStrokeColor;
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        String m_unparsedFillColor;
271c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        RefPtrWillBeMember<CanvasStyle> m_strokeStyle;
272c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)        RefPtrWillBeMember<CanvasStyle> m_fillStyle;
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        float m_lineWidth;
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LineCap m_lineCap;
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LineJoin m_lineJoin;
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        float m_miterLimit;
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FloatSize m_shadowOffset;
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        float m_shadowBlur;
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RGBA32 m_shadowColor;
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        float m_globalAlpha;
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CompositeOperator m_globalComposite;
282a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        blink::WebBlendMode m_globalBlend;
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        AffineTransform m_transform;
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool m_invertibleCTM;
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Vector<float> m_lineDash;
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        float m_lineDashOffset;
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool m_imageSmoothingEnabled;
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // Text state.
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TextAlign m_textAlign;
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TextBaseline m_textBaseline;
2927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        Direction m_direction;
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        String m_unparsedFont;
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Font m_font;
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool m_realizedFont;
297197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
298197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        bool m_hasClip;
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
30153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    CanvasRenderingContext2D(HTMLCanvasElement*, const Canvas2DContextAttributes* attrs, bool usesCSSCompatibilityParseMode);
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
30307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    State& modifiableState() { ASSERT(!state().m_unrealizedSaveCount); return *m_stateStack.last(); }
30407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    const State& state() const { return *m_stateStack.last(); }
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void applyLineDash() const;
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setShadow(const FloatSize& offset, float blur, RGBA32 color);
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void applyShadow();
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shouldDrawShadows() const;
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
311aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void dispatchContextLostEvent(Timer<CanvasRenderingContext2D>*);
312aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void dispatchContextRestoredEvent(Timer<CanvasRenderingContext2D>*);
313aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void tryRestoreContextEvent(Timer<CanvasRenderingContext2D>*);
314aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
31506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    bool computeDirtyRect(const FloatRect& localBounds, FloatRect*);
31606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    bool computeDirtyRect(const FloatRect& localBounds, const FloatRect& transformedClipBounds, FloatRect*);
31706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    void didDraw(const FloatRect&);
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GraphicsContext* drawingContext() const;
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void unwindStateStack();
3227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void realizeSaves(GraphicsContext*);
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void applyStrokePattern();
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void applyFillPattern();
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void drawImageInternal(CanvasImageSource*, float sx, float sy, float sw, float sh, float dx, float dy, float dw, float dh, ExceptionState&, CompositeOperator, blink::WebBlendMode, GraphicsContext* = 0);
328d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void drawVideo(HTMLVideoElement*, FloatRect srcRect, FloatRect dstRect);
329d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
330d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void fillInternal(const Path&, const String& windingRuleString);
331d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void strokeInternal(const Path&);
332d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void clipInternal(const Path&, const String& windingRuleString);
333d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
334d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool isPointInPathInternal(const Path&, const float x, const float y, const String& windingRuleString);
335d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    bool isPointInStrokeInternal(const Path&, const float x, const float y);
336d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
337aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void scrollPathIntoViewInternal(const Path&);
338aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void drawTextInternal(const String& text, float x, float y, bool fill, float maxWidth = 0, bool useMaxWidth = false);
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Font& accessFont();
342d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    int getFontBaseline(const FontMetrics&) const;
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearCanvas();
34506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    bool rectContainsTransformedRect(const FloatRect&, const FloatRect&) const;
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void inflateStrokeRect(FloatRect&) const;
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    template<class T> void fullCanvasCompositedFill(const T&);
3506f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    template<class T> void fullCanvasCompositedStroke(const T&);
3515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    template<class T> void fullCanvasCompositedDrawImage(T*, const FloatRect&, const FloatRect&, CompositeOperator);
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
35310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void drawFocusIfNeededInternal(const Path&, Element*);
354f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    bool focusRingCallIsValid(const Path&, Element*);
3551fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch    void drawFocusRing(const Path&);
356f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
3577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void addHitRegionInternal(const HitRegionOptionsInternal&, ExceptionState&);
358197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    bool hasClip() { return state().m_hasClip; }
359197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
360f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    void validateStateStack();
361f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual bool is2d() const OVERRIDE { return true; }
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual bool isAccelerated() const OVERRIDE;
36453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    virtual bool hasAlpha() const OVERRIDE { return m_hasAlpha; }
3657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    virtual void setIsHidden(bool) OVERRIDE;
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
36709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool isTransformInvertible() const OVERRIDE { return state().m_invertibleCTM; }
368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
36951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    virtual blink::WebLayer* platformLayer() const OVERRIDE;
3707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    TextDirection toTextDirection(Direction, RenderStyle** computedStyle = nullptr) const;
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
372f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    WillBeHeapVector<OwnPtrWillBeMember<State> > m_stateStack;
373197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    OwnPtrWillBeMember<HitRegionManager> m_hitRegionManager;
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_usesCSSCompatibilityParseMode;
37553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    bool m_hasAlpha;
376aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    bool m_isContextLost;
377aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    bool m_contextRestorable;
378aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    Canvas2DContextStorage m_storageMode;
3793c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    MutableStylePropertyMap m_fetchedFonts;
380aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    unsigned m_tryRestoreContextAttemptCount;
381aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    Timer<CanvasRenderingContext2D> m_dispatchContextLostEventTimer;
382aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    Timer<CanvasRenderingContext2D> m_dispatchContextRestoredEventTimer;
383aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    Timer<CanvasRenderingContext2D> m_tryRestoreContextEventTimer;
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
386a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)DEFINE_TYPE_CASTS(CanvasRenderingContext2D, CanvasRenderingContext, context, context->is2d(), context.is2d());
387a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
388c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // CanvasRenderingContext2D_h
391