9e91eb3383a9e8ab0b47c0551c1483d125fd56a9
[WebKit-https.git] / WebCore / page / FrameView.h
1 /* This file is part of the KDE project
2
3    Copyright (C) 1997 Martin Jones (mjones@kde.org)
4              (C) 1998 Waldo Bastian (bastian@kde.org)
5              (C) 1998, 1999 Torben Weis (weis@kde.org)
6              (C) 1999 Lars Knoll (knoll@kde.org)
7              (C) 1999 Antti Koivisto (koivisto@kde.org)
8    Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
9
10    This library is free software; you can redistribute it and/or
11    modify it under the terms of the GNU Library General Public
12    License as published by the Free Software Foundation; either
13    version 2 of the License, or (at your option) any later version.
14
15    This library is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    Library General Public License for more details.
19
20    You should have received a copy of the GNU Library General Public License
21    along with this library; see the file COPYING.LIB.  If not, write to
22    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23    Boston, MA 02111-1307, USA.
24 */
25
26 #ifndef FrameView_H
27 #define FrameView_H
28
29 #include "ScrollView.h"
30 #include "IntSize.h"
31 #include "PlatformString.h"
32
33 namespace WebCore {
34
35 class AtomicString;
36 class Color;
37 class CSSProperty;
38 class CSSStyleSelector;
39 class Clipboard;
40 class DeprecatedStringList;
41 class Document;
42 class Element;
43 class Event;
44 class EventTargetNode;
45 class Frame;
46 class FrameViewPrivate;
47 class GraphicsContext;
48 class HTMLAnchorElement;
49 class HTMLDocument;
50 class HTMLElement;
51 class HTMLFormElement;
52 class HTMLFrameSetElement;
53 class HTMLGenericFormElement;
54 class HTMLTitleElement;
55 class InlineBox;
56 class IntPoint;
57 class IntRect;
58 class PlatformKeyboardEvent;
59 class FrameMac;
60 class PlatformMouseEvent;
61 class MouseEventWithHitTestResults;
62 class Node;
63 class RenderBox;
64 class RenderView;
65 class RenderLineEdit;
66 class RenderObject;
67 class RenderPart;
68 class RenderPartObject;
69 class RenderStyle;
70 class RenderWidget;
71 class PlatformWheelEvent;
72 class String;
73
74 template <typename T> class Timer;
75
76 void applyRule(CSSProperty*);
77
78 class FrameView : public ScrollView {
79     friend class CSSStyleSelector;
80     friend class Document;
81     friend class Frame;
82     friend class HTMLAnchorElement;
83     friend class HTMLDocument;
84     friend class HTMLFormElement;
85     friend class HTMLGenericFormElement;
86     friend class HTMLTitleElement;
87     friend class FrameMac;
88     friend class RenderBox;
89     friend class RenderView;
90     friend class RenderLineEdit;
91     friend class RenderObject;
92     friend class RenderPart;
93     friend class RenderPartObject;
94     friend class RenderWidget;
95     friend void applyRule(CSSProperty *prop);
96
97 public:
98     FrameView(Frame*);
99     virtual ~FrameView();
100
101     Frame* frame() const { return m_frame.get(); }
102
103     int frameWidth() const { return m_size.width(); }
104
105     /**
106      * Gets/Sets the margin width/height
107      *
108      * A return value of -1 means the default value will be used.
109      */
110     int marginWidth() const { return m_margins.width(); }
111     int marginHeight() { return  m_margins.height(); }
112     void setMarginWidth(int);
113     void setMarginHeight(int);
114
115     virtual void setVScrollBarMode(ScrollBarMode);
116     virtual void setHScrollBarMode(ScrollBarMode);
117     virtual void setScrollBarsMode(ScrollBarMode);
118     
119     void print();
120
121     void layout(bool allowSubtree = true);
122
123     Node* layoutRoot() const;
124     int layoutCount() const;
125
126     bool needsFullRepaint() const;
127     
128     void addRepaintInfo(RenderObject*, const IntRect&);
129
130     void resetScrollBars();
131
132     void clear();
133
134 public:
135     void clearPart();
136
137     void handleMousePressEvent(const PlatformMouseEvent&);
138     void handleMouseDoubleClickEvent(const PlatformMouseEvent&);
139     virtual void handleMouseMoveEvent(const PlatformMouseEvent&);
140     virtual void handleMouseReleaseEvent(const PlatformMouseEvent&);
141     void handleWheelEvent(PlatformWheelEvent&);
142
143     bool passMousePressEventToSubframe(MouseEventWithHitTestResults&, Frame*);
144     bool passMouseMoveEventToSubframe(MouseEventWithHitTestResults&, Frame*);
145     bool passMouseReleaseEventToSubframe(MouseEventWithHitTestResults&, Frame*);
146     bool passWheelEventToSubframe(PlatformWheelEvent&, Frame*);
147
148     bool mousePressed();
149
150     void doAutoScroll();
151
152     bool updateDragAndDrop(const PlatformMouseEvent&, Clipboard*);
153     void cancelDragAndDrop(const PlatformMouseEvent&, Clipboard*);
154     bool performDragAndDrop(const PlatformMouseEvent&, Clipboard*);
155
156     void layoutTimerFired(Timer<FrameView>*);
157     void hoverTimerFired(Timer<FrameView>*);
158
159     void repaintRectangle(const IntRect& r, bool immediate);
160
161     bool isTransparent() const;
162     void setTransparent(bool isTransparent);
163
164     Color baseBackgroundColor() const;
165     void setBaseBackgroundColor(Color);
166
167     void scheduleRelayout();
168     void scheduleRelayoutOfSubtree(Node*);
169     void unscheduleRelayout();
170     bool haveDelayedLayoutScheduled();
171     bool layoutPending() const;
172
173     void scheduleHoverStateUpdate();
174
175     void adjustViewSize();
176     void initScrollBars();
177     
178     void setHasBorder(bool);
179     bool hasBorder() const;
180     
181     void setResizingFrameSet(HTMLFrameSetElement *);
182
183 #if __APPLE__
184     void updateDashboardRegions();
185 #endif
186
187     virtual void scrollPointRecursively(int x, int y);
188     virtual void setContentsPos(int x, int y);
189
190     void scheduleEvent(PassRefPtr<Event>, PassRefPtr<EventTargetNode>, bool tempEvent);
191
192     IntPoint currentMousePosition() const;
193
194     void ref() { ++m_refCount; }
195     void deref() { if (!--m_refCount) delete this; }
196     bool hasOneRef() { return m_refCount == 1; }
197
198 private:
199     void cleared();
200     void scrollBarMoved();
201
202     void resetCursor();
203     void invalidateClick();
204
205     /**
206      * Get/set the CSS Media Type.
207      *
208      * Media type is set to "screen" for on-screen rendering and "print"
209      * during printing. Other media types lack the proper support in the
210      * renderer and are not activated. The DOM tree and the parser itself,
211      * however, properly handle other media types. To make them actually work
212      * you only need to enable the media type in the view and if necessary
213      * add the media type dependent changes to the renderer.
214      */
215     void setMediaType(const String&);
216     String mediaType() const;
217
218     bool scrollTo(const IntRect&);
219
220     void focusNextPrevNode(bool next);
221
222     bool useSlowRepaints() const;
223     void setUseSlowRepaints();
224     void addSlowRepaintObject();
225     void removeSlowRepaintObject();
226
227     void setIgnoreWheelEvents(bool e);
228
229     void init();
230
231     Node *nodeUnderMouse() const;
232
233     void restoreScrollBar();
234
235     MouseEventWithHitTestResults prepareMouseEvent(bool readonly, bool active, bool mouseMove, const PlatformMouseEvent&);
236
237     bool dispatchMouseEvent(const AtomicString& eventType, Node* target,
238         bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder);
239     bool dispatchDragEvent(const AtomicString& eventType, Node* target,
240         const PlatformMouseEvent&, Clipboard*);
241
242     void applyOverflowToViewport(RenderObject* o, ScrollBarMode& hMode, ScrollBarMode& vMode);
243
244     virtual bool isFrameView() const;
245
246     void updateBorder();
247
248     void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
249     void dispatchScheduledEvents();
250         
251     unsigned m_refCount;
252     
253     IntSize m_size;
254     IntSize m_margins;
255     
256     RefPtr<Frame> m_frame;
257     FrameViewPrivate* d;
258 };
259
260 }
261
262 #endif
263