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

Side by Side Diff: sky/engine/core/html/canvas/CanvasRenderingContext2D.h

Issue 1001913003: Remove <canvas> (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 8 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
(Empty)
1 /*
2 * Copyright (C) 2006, 2007, 2009, 2010, 2011, 2012 Apple Inc. All rights reserv ed.
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 COMPUTER, 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 COMPUTER, 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 #ifndef SKY_ENGINE_CORE_HTML_CANVAS_CANVASRENDERINGCONTEXT2D_H_
27 #define SKY_ENGINE_CORE_HTML_CANVAS_CANVASRENDERINGCONTEXT2D_H_
28
29 #include "sky/engine/tonic/dart_wrappable.h"
30 #include "sky/engine/core/css/CSSFontSelectorClient.h"
31 #include "sky/engine/core/html/canvas/Canvas2DContextAttributes.h"
32 #include "sky/engine/core/html/canvas/CanvasPathMethods.h"
33 #include "sky/engine/core/html/canvas/CanvasRenderingContext.h"
34 #include "sky/engine/core/html/canvas/HitRegion.h"
35 #include "sky/engine/platform/fonts/Font.h"
36 #include "sky/engine/platform/geometry/FloatSize.h"
37 #include "sky/engine/platform/graphics/Color.h"
38 #include "sky/engine/platform/graphics/GraphicsTypes.h"
39 #include "sky/engine/platform/graphics/ImageBuffer.h"
40 #include "sky/engine/platform/graphics/Path.h"
41 #include "sky/engine/platform/transforms/AffineTransform.h"
42 #include "sky/engine/wtf/HashMap.h"
43 #include "sky/engine/wtf/Vector.h"
44 #include "sky/engine/wtf/text/WTFString.h"
45
46 namespace blink { class WebLayer; }
47
48 namespace blink {
49
50 class CanvasImageSource;
51 class CanvasGradient;
52 class CanvasPattern;
53 class CanvasStyle;
54 class Path2D;
55 class Element;
56 class ExceptionState;
57 class FloatRect;
58 class GraphicsContext;
59 class HTMLCanvasElement;
60 class HTMLImageElement;
61 class ImageBitmap;
62 class ImageData;
63 class TextMetrics;
64
65 typedef HashMap<String, RefPtr<MutableStylePropertySet> > MutableStylePropertyMa p;
66
67 class CanvasRenderingContext2D final: public CanvasRenderingContext, public Dart Wrappable, public CanvasPathMethods {
68 DEFINE_WRAPPERTYPEINFO();
69 public:
70 static PassOwnPtr<CanvasRenderingContext2D> create(HTMLCanvasElement* canvas , const Canvas2DContextAttributes* attrs)
71 {
72 return adoptPtr(new CanvasRenderingContext2D(canvas, attrs));
73 }
74 virtual ~CanvasRenderingContext2D();
75
76 CanvasStyle* strokeStyle() const;
77 void setStrokeStyle(PassRefPtr<CanvasStyle>);
78
79 CanvasStyle* fillStyle() const;
80 void setFillStyle(PassRefPtr<CanvasStyle>);
81
82 float lineWidth() const;
83 void setLineWidth(float);
84
85 String lineCap() const;
86 void setLineCap(const String&);
87
88 String lineJoin() const;
89 void setLineJoin(const String&);
90
91 float miterLimit() const;
92 void setMiterLimit(float);
93
94 const Vector<float>& getLineDash() const;
95 void setLineDash(const Vector<float>&);
96
97 float lineDashOffset() const;
98 void setLineDashOffset(float);
99
100 float shadowOffsetX() const;
101 void setShadowOffsetX(float);
102
103 float shadowOffsetY() const;
104 void setShadowOffsetY(float);
105
106 float shadowBlur() const;
107 void setShadowBlur(float);
108
109 String shadowColor() const;
110 void setShadowColor(const String&);
111
112 bool isContextLost() const;
113
114 void save() { ++m_stateStack.last()->m_unrealizedSaveCount; }
115 void restore();
116
117 void scale(float sx, float sy);
118 void rotate(float angleInRadians);
119 void translate(float tx, float ty);
120 void transform(float m11, float m12, float m21, float m22, float dx, float d y);
121 void setTransform(float m11, float m12, float m21, float m22, float dx, floa t dy);
122 void resetTransform();
123
124 String strokeColor();
125 void setStrokeColor(const String& color);
126 void setStrokeColor(float grayLevel);
127 void setStrokeColor(const String& color, float alpha);
128 void setStrokeColor(float grayLevel, float alpha);
129 void setStrokeColor(float r, float g, float b, float a);
130 void setStrokeColor(float c, float m, float y, float k, float a);
131
132 String fillColor();
133 void setFillColor(const String& color);
134 void setFillColor(float grayLevel);
135 void setFillColor(const String& color, float alpha);
136 void setFillColor(float grayLevel, float alpha);
137 void setFillColor(float r, float g, float b, float a);
138 void setFillColor(float c, float m, float y, float k, float a);
139
140 void beginPath();
141
142 void fill(const String& winding = "nonzero");
143 void fill(Path2D*, const String& winding = "nonzero");
144 void stroke();
145 void stroke(Path2D*);
146 void clip(const String& winding = "nonzero");
147 void clip(Path2D*, const String& winding = "nonzero");
148
149 bool isPointInPath(const float x, const float y, const String& winding = "no nzero");
150 bool isPointInPath(Path2D*, const float x, const float y, const String& wind ing = "nonzero");
151 bool isPointInStroke(const float x, const float y);
152 bool isPointInStroke(Path2D*, const float x, const float y);
153
154 void clearRect(float x, float y, float width, float height);
155 void fillRect(float x, float y, float width, float height);
156 void strokeRect(float x, float y, float width, float height);
157
158 void setShadow(float width, float height, float blur);
159 void setShadow(float width, float height, float blur, const String& color);
160 void setShadow(float width, float height, float blur, float grayLevel);
161 void setShadow(float width, float height, float blur, const String& color, f loat alpha);
162 void setShadow(float width, float height, float blur, float grayLevel, float alpha);
163 void setShadow(float width, float height, float blur, float r, float g, floa t b, float a);
164 void setShadow(float width, float height, float blur, float c, float m, floa t y, float k, float a);
165
166 void clearShadow();
167
168 void drawImage(CanvasImageSource*, float x, float y, ExceptionState&);
169 void drawImage(CanvasImageSource*, float x, float y, float width, float heig ht, ExceptionState&);
170 void drawImage(CanvasImageSource*, float sx, float sy, float sw, float sh, f loat dx, float dy, float dw, float dh, ExceptionState&);
171
172 void drawImageFromRect(HTMLImageElement*, float sx = 0, float sy = 0, float sw = 0, float sh = 0,
173 float dx = 0, float dy = 0, float dw = 0, float dh = 0, const String& compositeOperation = emptyString());
174
175 void setCompositeOperation(const String&);
176
177 PassRefPtr<CanvasGradient> createLinearGradient(float x0, float y0, float x1 , float y1);
178 PassRefPtr<CanvasGradient> createRadialGradient(float x0, float y0, float r0 , float x1, float y1, float r1, ExceptionState&);
179 PassRefPtr<CanvasPattern> createPattern(CanvasImageSource*, const String& re petitionType, ExceptionState&);
180
181 PassRefPtr<ImageData> createImageData(PassRefPtr<ImageData>) const;
182 PassRefPtr<ImageData> createImageData(float width, float height, ExceptionSt ate&) const;
183 PassRefPtr<ImageData> getImageData(float sx, float sy, float sw, float sh, E xceptionState&) const;
184 void putImageData(ImageData*, float dx, float dy);
185 void putImageData(ImageData*, float dx, float dy, float dirtyX, float dirtyY , float dirtyWidth, float dirtyHeight);
186
187 void reset();
188
189 String font() const;
190 void setFont(const String&);
191
192 String textAlign() const;
193 void setTextAlign(const String&);
194
195 String textBaseline() const;
196 void setTextBaseline(const String&);
197
198 String direction() const;
199 void setDirection(const String&);
200
201 void fillText(const String& text, float x, float y);
202 void fillText(const String& text, float x, float y, float maxWidth);
203 void strokeText(const String& text, float x, float y);
204 void strokeText(const String& text, float x, float y, float maxWidth);
205 PassRefPtr<TextMetrics> measureText(const String& text);
206
207 LineCap getLineCap() const { return state().m_lineCap; }
208 LineJoin getLineJoin() const { return state().m_lineJoin; }
209
210 bool imageSmoothingEnabled() const;
211 void setImageSmoothingEnabled(bool);
212
213 PassRefPtr<Canvas2DContextAttributes> getContextAttributes() const;
214
215 void drawFocusIfNeeded(Element*);
216 void drawFocusIfNeeded(Path2D*, Element*);
217
218 void addHitRegion(ExceptionState&);
219 void removeHitRegion(const String& id);
220 void clearHitRegions();
221 HitRegion* hitRegionAtPoint(const LayoutPoint&);
222 unsigned hitRegionsCount() const;
223
224 void loseContext();
225 void restoreContext();
226
227 private:
228 enum Direction {
229 DirectionInherit,
230 DirectionRTL,
231 DirectionLTR
232 };
233
234 class State final : public CSSFontSelectorClient {
235 public:
236 State();
237 virtual ~State();
238
239 State(const State&);
240 State& operator=(const State&);
241
242 // CSSFontSelectorClient implementation
243 virtual void fontsNeedUpdate(CSSFontSelector*) override;
244
245 unsigned m_unrealizedSaveCount;
246
247 String m_unparsedStrokeColor;
248 String m_unparsedFillColor;
249 RefPtr<CanvasStyle> m_strokeStyle;
250 RefPtr<CanvasStyle> m_fillStyle;
251 float m_lineWidth;
252 LineCap m_lineCap;
253 LineJoin m_lineJoin;
254 float m_miterLimit;
255 FloatSize m_shadowOffset;
256 float m_shadowBlur;
257 RGBA32 m_shadowColor;
258 AffineTransform m_transform;
259 bool m_invertibleCTM;
260 Vector<float> m_lineDash;
261 float m_lineDashOffset;
262 bool m_imageSmoothingEnabled;
263
264 // Text state.
265 TextAlign m_textAlign;
266 TextBaseline m_textBaseline;
267 Direction m_direction;
268
269 String m_unparsedFont;
270 Font m_font;
271 bool m_realizedFont;
272
273 bool m_hasClip;
274 };
275
276 CanvasRenderingContext2D(HTMLCanvasElement*, const Canvas2DContextAttributes * attrs);
277
278 State& modifiableState() { ASSERT(!state().m_unrealizedSaveCount); return *m _stateStack.last(); }
279 const State& state() const { return *m_stateStack.last(); }
280
281 void applyLineDash() const;
282 void setShadow(const FloatSize& offset, float blur, RGBA32 color);
283 void applyShadow();
284 bool shouldDrawShadows() const;
285
286 void dispatchContextLostEvent(Timer<CanvasRenderingContext2D>*);
287 void dispatchContextRestoredEvent(Timer<CanvasRenderingContext2D>*);
288 void tryRestoreContextEvent(Timer<CanvasRenderingContext2D>*);
289
290 bool computeDirtyRect(const FloatRect& localBounds, FloatRect*);
291 bool computeDirtyRect(const FloatRect& localBounds, const FloatRect& transfo rmedClipBounds, FloatRect*);
292 void didDraw(const FloatRect&);
293
294 GraphicsContext* drawingContext() const;
295
296 void unwindStateStack();
297 void realizeSaves(GraphicsContext*);
298
299 void applyStrokePattern();
300 void applyFillPattern();
301
302 void drawImageInternal(CanvasImageSource*, float sx, float sy, float sw, flo at sh, float dx, float dy, float dw, float dh, ExceptionState&, CompositeOperato r, blink::WebBlendMode, GraphicsContext* = 0);
303
304 void fillInternal(const Path&, const String& windingRuleString);
305 void strokeInternal(const Path&);
306 void clipInternal(const Path&, const String& windingRuleString);
307
308 bool isPointInPathInternal(const Path&, const float x, const float y, const String& windingRuleString);
309 bool isPointInStrokeInternal(const Path&, const float x, const float y);
310
311 void drawTextInternal(const String& text, float x, float y, bool fill, float maxWidth = 0, bool useMaxWidth = false);
312
313 const Font& accessFont();
314 int getFontBaseline(const FontMetrics&) const;
315
316 void clearCanvas();
317 bool rectContainsTransformedRect(const FloatRect&, const FloatRect&) const;
318
319 void inflateStrokeRect(FloatRect&) const;
320
321 template<class T> void fullCanvasCompositedFill(const T&);
322 template<class T> void fullCanvasCompositedStroke(const T&);
323 template<class T> void fullCanvasCompositedDrawImage(T*, const FloatRect&, c onst FloatRect&, CompositeOperator);
324
325 void drawFocusIfNeededInternal(const Path&, Element*);
326 bool focusRingCallIsValid(const Path&, Element*);
327 void drawFocusRing(const Path&);
328
329 void addHitRegionInternal(const HitRegionOptions&, ExceptionState&);
330 bool hasClip() { return state().m_hasClip; }
331
332 void validateStateStack();
333
334 virtual bool is2d() const override { return true; }
335 virtual bool isAccelerated() const override;
336 virtual void setIsHidden(bool) override;
337
338 virtual bool isTransformInvertible() const override { return state().m_inver tibleCTM; }
339
340 virtual blink::WebLayer* platformLayer() const override;
341 TextDirection toTextDirection(Direction, RenderStyle** computedStyle = nullp tr) const;
342
343 Vector<OwnPtr<State> > m_stateStack;
344 OwnPtr<HitRegionManager> m_hitRegionManager;
345 bool m_isContextLost;
346 bool m_contextRestorable;
347 Canvas2DContextStorage m_storageMode;
348 MutableStylePropertyMap m_fetchedFonts;
349 unsigned m_tryRestoreContextAttemptCount;
350 Timer<CanvasRenderingContext2D> m_dispatchContextLostEventTimer;
351 Timer<CanvasRenderingContext2D> m_dispatchContextRestoredEventTimer;
352 Timer<CanvasRenderingContext2D> m_tryRestoreContextEventTimer;
353 };
354
355 DEFINE_TYPE_CASTS(CanvasRenderingContext2D, CanvasRenderingContext, context, con text->is2d(), context.is2d());
356
357 } // namespace blink
358
359 #endif // SKY_ENGINE_CORE_HTML_CANVAS_CANVASRENDERINGCONTEXT2D_H_
OLDNEW
« no previous file with comments | « sky/engine/core/html/canvas/CanvasRenderingContext.cpp ('k') | sky/engine/core/html/canvas/CanvasRenderingContext2D.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698