9259837cdb0a0080b971bcc86919175691731b03
[WebKit-https.git] / Source / WebCore / html / canvas / CanvasRenderingContext2D.idl
1 /*
2  * Copyright (C) 2006 Apple Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 enum ImageSmoothingQuality { "low", "medium", "high" };
27 enum CanvasWindingRule { "nonzero", "evenodd" };
28
29 [
30     CustomIsReachable,
31     JSGenerateToJSObject,
32     JSCustomMarkFunction,
33 ] interface CanvasRenderingContext2D {
34
35     // back-reference to the canvas
36     readonly attribute HTMLCanvasElement canvas;
37
38     void save();
39     void restore();
40
41     void commit();
42
43     void scale(unrestricted float sx, unrestricted float sy);
44     void rotate(unrestricted float angle);
45     void translate(unrestricted float tx, unrestricted float ty);
46     void transform(unrestricted float m11, unrestricted float m12, unrestricted float m21, unrestricted float m22, 
47         unrestricted float dx, unrestricted float dy);
48     void setTransform(unrestricted float m11, unrestricted float m12, unrestricted float m21, unrestricted float m22, 
49         unrestricted float dx, unrestricted float dy);
50     void resetTransform();
51
52     attribute unrestricted float globalAlpha;
53
54     attribute DOMString globalCompositeOperation;
55
56     [MayThrowLegacyException] CanvasGradient createLinearGradient(float x0, float y0, float x1, float y1);
57     [MayThrowLegacyException] CanvasGradient createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1);
58
59     attribute unrestricted float lineWidth;
60     attribute DOMString lineCap;
61     attribute DOMString lineJoin;
62     attribute unrestricted float miterLimit;
63
64     attribute unrestricted float shadowOffsetX;
65     attribute unrestricted float shadowOffsetY;
66     attribute unrestricted float shadowBlur;
67     attribute DOMString shadowColor;
68
69     void setLineDash(sequence<unrestricted float> dash);
70     sequence<unrestricted float> getLineDash();
71     attribute unrestricted float lineDashOffset;
72
73     attribute sequence<unrestricted float> webkitLineDash;
74     [ImplementedAs=lineDashOffset] attribute unrestricted float webkitLineDashOffset;
75
76     void clearRect(unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
77     void fillRect(unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
78
79     void beginPath();
80
81     void fill(DOMPath path, optional CanvasWindingRule winding = "nonzero");
82     void stroke(DOMPath path);
83     void clip(DOMPath path, optional CanvasWindingRule winding = "nonzero");
84
85     void fill(optional CanvasWindingRule winding = "nonzero");
86     void stroke();
87     void clip(optional CanvasWindingRule winding = "nonzero");
88
89     boolean isPointInPath(DOMPath path, unrestricted float x, unrestricted float y, optional CanvasWindingRule winding = "nonzero");
90     boolean isPointInStroke(DOMPath path, unrestricted float x, unrestricted float y);
91
92     boolean isPointInPath(unrestricted float x, unrestricted float y, optional CanvasWindingRule winding = "nonzero");
93     boolean isPointInStroke(unrestricted float x, unrestricted float y);
94
95     // text
96     attribute DOMString font;
97     attribute DOMString textAlign;
98     attribute DOMString textBaseline;
99     attribute DOMString direction;
100
101     TextMetrics measureText(DOMString text);
102
103     // other
104
105     void setAlpha(optional unrestricted float alpha = NaN);
106
107     // FIXME: Using "undefined" as default parameter value is wrong.
108     void setCompositeOperation(optional DOMString compositeOperation = "undefined");
109
110     void setLineWidth(optional unrestricted float width = NaN);
111
112     // FIXME: Using "undefined" as default parameter value is wrong.
113     void setLineCap(optional DOMString cap = "undefined");
114     void setLineJoin(optional DOMString join = "undefined");
115
116     void setMiterLimit(optional unrestricted float limit = NaN);
117
118     void clearShadow();
119
120     void fillText(DOMString text, unrestricted float x, unrestricted float y, optional unrestricted float maxWidth);
121     void strokeText(DOMString text, unrestricted float x, unrestricted float y, optional unrestricted float maxWidth);
122
123     void setStrokeColor(DOMString color, optional unrestricted float alpha);
124     void setStrokeColor(unrestricted float grayLevel, optional float alpha = 1);
125     void setStrokeColor(unrestricted float r, unrestricted float g, unrestricted float b, unrestricted float a);
126     void setStrokeColor(unrestricted float c, unrestricted float m, unrestricted float y, unrestricted float k, unrestricted float a);
127
128     void setFillColor(DOMString color, optional unrestricted float alpha);
129     void setFillColor(unrestricted float grayLevel, optional unrestricted float alpha = 1);
130     void setFillColor(unrestricted float r, unrestricted float g, unrestricted float b, unrestricted float a);
131     void setFillColor(unrestricted float c, unrestricted float m, unrestricted float y, unrestricted float k, unrestricted float a);
132
133     void strokeRect(unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
134
135     [MayThrowLegacyException] void drawImage(HTMLImageElement image, unrestricted float x, unrestricted float y);
136     [MayThrowLegacyException] void drawImage(HTMLImageElement image, unrestricted float x, unrestricted float y,
137         unrestricted float width, unrestricted float height);
138     [MayThrowLegacyException] void drawImage(HTMLImageElement image, unrestricted float sx, unrestricted float sy, unrestricted float sw,
139         unrestricted float sh, unrestricted float dx, unrestricted float dy, unrestricted float dw, unrestricted float dh);
140     [MayThrowLegacyException] void drawImage(HTMLCanvasElement canvas, unrestricted float x, unrestricted float y);
141     [MayThrowLegacyException] void drawImage(HTMLCanvasElement canvas, unrestricted float x, unrestricted float y,
142         unrestricted float width, unrestricted float height);
143     [MayThrowLegacyException] void drawImage(HTMLCanvasElement canvas, unrestricted float sx, unrestricted float sy, unrestricted float sw,
144         unrestricted float sh, unrestricted float dx, unrestricted float dy, unrestricted float dw, unrestricted float dh);
145     [Conditional=VIDEO, MayThrowLegacyException] void drawImage(HTMLVideoElement video, unrestricted float x, unrestricted float y);
146     [Conditional=VIDEO, MayThrowLegacyException] void drawImage(HTMLVideoElement video, unrestricted float x, unrestricted float y,
147         unrestricted float width, unrestricted float height);
148     [Conditional=VIDEO, MayThrowLegacyException] void drawImage(HTMLVideoElement video, unrestricted float sx, unrestricted float sy, unrestricted float sw,
149         unrestricted float sh, unrestricted float dx, unrestricted float dy, unrestricted float dw, unrestricted float dh);
150
151     void drawImageFromRect(HTMLImageElement image,
152         optional unrestricted float sx = 0, optional unrestricted float sy = 0, optional unrestricted float sw = 0, optional unrestricted float sh = 0,
153         optional unrestricted float dx = 0, optional unrestricted float dy = 0, optional unrestricted float dw = 0, optional unrestricted float dh = 0,
154         optional DOMString compositeOperation = "");
155
156     void setShadow(unrestricted float width, unrestricted float height, unrestricted float blur, 
157         optional DOMString color, optional unrestricted float alpha);
158     void setShadow(unrestricted float width, unrestricted float height, unrestricted float blur, unrestricted float grayLevel, 
159         optional unrestricted float alpha = 1);
160     void setShadow(unrestricted float width, unrestricted float height, unrestricted float blur, unrestricted float r, 
161         unrestricted float g, unrestricted float b, unrestricted float a);
162     void setShadow(float width, unrestricted float height, unrestricted float blur, unrestricted float c, unrestricted float m, 
163         unrestricted float y, unrestricted float k, unrestricted float a);
164
165     [MayThrowLegacyException] void putImageData(ImageData imagedata, float dx, float dy);
166     [MayThrowLegacyException] void putImageData(ImageData imagedata, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight);
167
168     [MayThrowLegacyException] void webkitPutImageDataHD(ImageData imagedata, float dx, float dy);
169     [MayThrowLegacyException] void webkitPutImageDataHD(ImageData imagedata, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight);
170
171     [MayThrowLegacyException] CanvasPattern createPattern(HTMLCanvasElement canvas, [TreatNullAs=EmptyString] DOMString repetitionType);
172     [MayThrowLegacyException] CanvasPattern createPattern(HTMLImageElement image, [TreatNullAs=EmptyString] DOMString repetitionType);
173     [Conditional=VIDEO, MayThrowLegacyException] CanvasPattern? createPattern(HTMLVideoElement video, [TreatNullAs=EmptyString] DOMString repetitionType);
174     [MayThrowLegacyException] ImageData createImageData(ImageData? imagedata);
175     [MayThrowLegacyException] ImageData createImageData(float sw, float sh);
176
177     [Custom] attribute custom strokeStyle;
178     [Custom] attribute custom fillStyle;
179
180     // pixel manipulation
181     [MayThrowLegacyException] ImageData getImageData(float sx, float sy, float sw, float sh);
182
183     [MayThrowLegacyException] ImageData webkitGetImageDataHD(float sx, float sy, float sw, float sh);
184     
185     // Focus rings
186     void drawFocusIfNeeded(Element? element); // FIXME: The element parameter should not be nullable.
187     void drawFocusIfNeeded(DOMPath path, Element? element); // FIXME: The element parameter should not be nullable.
188
189     readonly attribute float webkitBackingStorePixelRatio;
190
191     attribute boolean imageSmoothingEnabled;
192     [ImplementedAs=imageSmoothingEnabled] attribute boolean webkitImageSmoothingEnabled;
193     attribute ImageSmoothingQuality imageSmoothingQuality;
194 };
195
196 CanvasRenderingContext2D implements CanvasPath;