]> git.saurik.com Git - iphone-api.git/blob - WebCore/HTMLCanvasElement.h
Add support for new WinterBoard Settings features.
[iphone-api.git] / WebCore / HTMLCanvasElement.h
1 /*
2 * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved.
3 * Copyright (C) 2007 Alp Toker <alp@atoker.com>
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27 #ifndef HTMLCanvasElement_h
28 #define HTMLCanvasElement_h
29
30 #include "TransformationMatrix.h"
31 #include "FloatRect.h"
32 #include "HTMLElement.h"
33 #include "IntSize.h"
34
35 namespace WebCore {
36
37 class CanvasRenderingContext2D;
38 typedef CanvasRenderingContext2D CanvasRenderingContext;
39 class FloatPoint;
40 class FloatRect;
41 class FloatSize;
42 class GraphicsContext;
43 class HTMLCanvasElement;
44 class ImageBuffer;
45 class IntPoint;
46 class IntSize;
47
48 class CanvasObserver {
49 public:
50 virtual ~CanvasObserver() {};
51
52 virtual void canvasChanged(HTMLCanvasElement* element, const FloatRect& changedRect) = 0;
53 virtual void canvasResized(HTMLCanvasElement* element) = 0;
54 };
55
56 class HTMLCanvasElement : public HTMLElement {
57 public:
58 HTMLCanvasElement(const QualifiedName&, Document*);
59 virtual ~HTMLCanvasElement();
60
61 #if ENABLE(DASHBOARD_SUPPORT)
62 virtual HTMLTagStatus endTagRequirement() const;
63 virtual int tagPriority() const;
64 #endif
65
66 int width() const { return m_size.width(); }
67 int height() const { return m_size.height(); }
68 void setWidth(int);
69 void setHeight(int);
70
71 String toDataURL(const String& mimeType, ExceptionCode&);
72
73 CanvasRenderingContext* getContext(const String&);
74
75 virtual void parseMappedAttribute(MappedAttribute*);
76 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
77
78 IntSize size() const { return m_size; }
79 void setSize(const IntSize& size)
80 {
81 if (size == m_size)
82 return;
83 m_ignoreReset = true;
84 setWidth(size.width());
85 setHeight(size.height());
86 m_ignoreReset = false;
87 reset();
88 }
89
90 void willDraw(const FloatRect&);
91
92 void paint(GraphicsContext*, const IntRect&);
93
94 GraphicsContext* drawingContext() const;
95
96 ImageBuffer* buffer() const;
97
98 IntRect convertLogicalToDevice(const FloatRect&) const;
99 IntSize convertLogicalToDevice(const FloatSize&) const;
100 IntPoint convertLogicalToDevice(const FloatPoint&) const;
101
102 void setOriginTainted() { m_originClean = false; }
103 bool originClean() const { return m_originClean; }
104
105 static const float MaxCanvasArea;
106
107 void setObserver(CanvasObserver* o) { m_observer = o; }
108
109 TransformationMatrix baseTransform() const;
110 private:
111 void createImageBuffer() const;
112 void reset();
113
114 bool m_rendererIsCanvas;
115
116 OwnPtr<CanvasRenderingContext2D> m_2DContext;
117 IntSize m_size;
118 CanvasObserver* m_observer;
119
120 bool m_originClean;
121 bool m_ignoreReset;
122 FloatRect m_dirtyRect;
123
124 // m_createdImageBuffer means we tried to malloc the buffer. We didn't necessarily get it.
125 mutable bool m_createdImageBuffer;
126 mutable OwnPtr<ImageBuffer> m_imageBuffer;
127 };
128
129 } //namespace
130
131 #endif