Reviewed by Hyatt.
[WebKit-https.git] / WebCore / khtml / html / html_imageimpl.h
1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
5  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
6  * Copyright (C) 2004 Apple Computer, Inc.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  *
23  */
24
25 #ifndef HTML_IMAGEIMPL_H
26 #define HTML_IMAGEIMPL_H
27
28 #include "CachedImage.h"
29 #include "Image.h"
30 #include "Path.h"
31 #include "html_inlineimpl.h"
32 #include "render_object.h"
33
34 namespace WebCore {
35
36 class HTMLCollectionImpl;
37 class HTMLFormElementImpl;
38 class Image;
39 class String;
40
41 struct Length;
42
43 class HTMLImageLoader : public CachedObjectClient {
44 public:
45     HTMLImageLoader(ElementImpl*);
46     virtual ~HTMLImageLoader();
47
48     virtual void updateFromElement();
49
50     void dispatchLoadEvent();
51
52     ElementImpl* element() const { return m_element; }
53     bool imageComplete() const { return m_imageComplete; }
54     CachedImage* image() const { return m_image; }
55
56     // CachedObjectClient API
57     virtual void notifyFinished(CachedObject*);
58
59 protected:
60     void setLoadingImage(CachedImage*);
61
62 private:
63     ElementImpl* m_element;
64     CachedImage* m_image;
65     bool m_firedLoad : 1;
66     bool m_imageComplete : 1;
67 };
68
69 class HTMLImageElementImpl : public HTMLElementImpl {
70     friend class HTMLFormElementImpl;
71 public:
72     HTMLImageElementImpl(DocumentImpl*, HTMLFormElementImpl* = 0);
73     HTMLImageElementImpl(const QualifiedName& tagName, DocumentImpl*);
74     ~HTMLImageElementImpl();
75
76     virtual HTMLTagStatus endTagRequirement() const { return TagStatusForbidden; }
77     virtual int tagPriority() const { return 0; }
78
79     virtual bool mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const;
80     virtual void parseMappedAttribute(MappedAttributeImpl*);
81
82     virtual void attach();
83     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
84     virtual void insertedIntoDocument();
85     virtual void removedFromDocument();
86
87     int width(bool ignorePendingStylesheets = false) const;
88     int height(bool ignorePendingStylesheets = false) const;
89
90     bool isServerMap() const { return ismap && usemap.isEmpty(); }
91
92     String altText() const;
93
94     String imageMap() const { return usemap; }
95     
96     virtual bool isURLAttribute(AttributeImpl*) const;
97
98     Image::CompositeOperator compositeOperator() const { return Image::compositeOperatorFromString(_compositeOperator.ascii()); }
99
100     CachedImage* cachedImage() const { return m_imageLoader.image(); }
101     
102     String name() const;
103     void setName(const String&);
104
105     String align() const;
106     void setAlign(const String&);
107
108     String alt() const;
109     void setAlt(const String&);
110
111     int border() const;
112     void setBorder(int);
113
114     void setHeight(int);
115
116     int hspace() const;
117     void setHspace(int);
118
119     bool isMap() const;
120     void setIsMap(bool);
121
122     String longDesc() const;
123     void setLongDesc(const String&);
124
125     String src() const;
126     void setSrc(const String&);
127
128     String useMap() const;
129     void setUseMap(const String&);
130
131     int vspace() const;
132     void setVspace(int);
133
134     void setWidth(int);
135
136     int x() const;
137     int y() const;
138
139     bool complete() const;
140
141 protected:
142     HTMLImageLoader m_imageLoader;
143     String usemap;
144     bool ismap;
145     HTMLFormElementImpl* m_form;
146     String oldNameAttr;
147     QString _compositeOperator;
148 };
149
150 //------------------------------------------------------------------
151
152 class HTMLAreaElementImpl : public HTMLAnchorElementImpl {
153 public:
154     enum Shape { Default, Poly, Rect, Circle, Unknown };
155
156     HTMLAreaElementImpl(DocumentImpl*);
157     ~HTMLAreaElementImpl();
158
159     virtual HTMLTagStatus endTagRequirement() const { return TagStatusForbidden; }
160     virtual int tagPriority() const { return 0; }
161
162     virtual void parseMappedAttribute(MappedAttributeImpl*);
163
164     bool isDefault() const { return m_shape == Default; }
165
166     bool mapMouseEvent(int x, int y, int width, int height, RenderObject::NodeInfo& info);
167
168     virtual IntRect getRect(RenderObject*) const;
169
170     String accessKey() const;
171     void setAccessKey(const String&);
172
173     String alt() const;
174     void setAlt(const String&);
175
176     String coords() const;
177     void setCoords(const String&);
178
179     String href() const;
180     void setHref(const String&);
181
182     bool noHref() const;
183     void setNoHref(bool);
184
185     String shape() const;
186     void setShape(const String&);
187
188     int tabIndex() const;
189     void setTabIndex(int);
190
191     String target() const;
192     void setTarget(const String&);
193
194 protected:
195     Path getRegion(int width, int height) const;
196     Path region;
197     Length* m_coords;
198     int m_coordsLen;
199     int lastw, lasth;
200     Shape m_shape;
201 };
202
203 // -------------------------------------------------------------------------
204
205 class HTMLMapElementImpl : public HTMLElementImpl {
206 public:
207     HTMLMapElementImpl(DocumentImpl*);
208     ~HTMLMapElementImpl();
209
210     virtual HTMLTagStatus endTagRequirement() const { return TagStatusRequired; }
211     virtual int tagPriority() const { return 1; }
212     virtual bool checkDTD(const NodeImpl*);
213
214     const AtomicString& getName() const { return m_name; }
215
216     virtual void parseMappedAttribute(MappedAttributeImpl*);
217
218     bool mapMouseEvent(int x, int y, int width, int height, RenderObject::NodeInfo&);
219
220     PassRefPtr<HTMLCollectionImpl> areas();
221
222     String name() const;
223     void setName(const String&);
224
225 private:
226     AtomicString m_name;
227 };
228
229 } //namespace
230
231 #endif