Reviewed by Darin Adler.
[WebKit-https.git] / WebCore / page / FrameView.h
1 /*
2    Copyright (C) 1997 Martin Jones (mjones@kde.org)
3              (C) 1998 Waldo Bastian (bastian@kde.org)
4              (C) 1998, 1999 Torben Weis (weis@kde.org)
5              (C) 1999 Lars Knoll (knoll@kde.org)
6              (C) 1999 Antti Koivisto (koivisto@kde.org)
7    Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
8
9    This library is free software; you can redistribute it and/or
10    modify it under the terms of the GNU Library General Public
11    License as published by the Free Software Foundation; either
12    version 2 of the License, or (at your option) any later version.
13
14    This library is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17    Library General Public License for more details.
18
19    You should have received a copy of the GNU Library General Public License
20    along with this library; see the file COPYING.LIB.  If not, write to
21    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22    Boston, MA 02110-1301, USA.
23 */
24
25 #ifndef FrameView_h
26 #define FrameView_h
27
28 #include "IntSize.h"
29 #include "RenderLayer.h"
30 #include "ScrollView.h"
31 #include <wtf/Forward.h>
32 #include <wtf/OwnPtr.h>
33
34 namespace WebCore {
35
36 class Color;
37 class Event;
38 class EventTargetNode;
39 class Frame;
40 class FrameViewPrivate;
41 class IntRect;
42 class PlatformMouseEvent;
43 class Node;
44 class RenderLayer;
45 class RenderObject;
46 class RenderPartObject;
47 class String;
48
49 template <typename T> class Timer;
50
51 class FrameView : public ScrollView {
52 public:
53     friend class RenderView;
54
55     FrameView(Frame*);
56     FrameView(Frame*, const IntSize& initialSize);
57
58     virtual ~FrameView();
59
60     virtual HostWindow* hostWindow() const;
61     
62     virtual void invalidateRect(const IntRect&);
63
64     Frame* frame() const { return m_frame.get(); }
65     void clearFrame();
66
67     void ref() { ++m_refCount; }
68     void deref() { if (!--m_refCount) delete this; }
69     bool hasOneRef() { return m_refCount == 1; }
70
71     int marginWidth() const { return m_margins.width(); } // -1 means default
72     int marginHeight() const { return m_margins.height(); } // -1 means default
73     void setMarginWidth(int);
74     void setMarginHeight(int);
75
76     virtual void setCanHaveScrollbars(bool);
77
78     void layout(bool allowSubtree = true);
79     bool didFirstLayout() const;
80     void layoutTimerFired(Timer<FrameView>*);
81     void scheduleRelayout();
82     void scheduleRelayoutOfSubtree(RenderObject*);
83     void unscheduleRelayout();
84     bool layoutPending() const;
85
86     RenderObject* layoutRoot(bool onlyDuringLayout = false) const;
87     int layoutCount() const;
88
89     // These two helper functions just pass through to the RenderView.
90     bool needsLayout() const;
91     void setNeedsLayout();
92
93     bool needsFullRepaint() const;
94
95     void resetScrollbars();
96
97     void clear();
98
99     bool isTransparent() const;
100     void setTransparent(bool isTransparent);
101
102     Color baseBackgroundColor() const;
103     void setBaseBackgroundColor(Color);
104
105     bool shouldUpdateWhileOffscreen() const;
106     void setShouldUpdateWhileOffscreen(bool);
107
108     void adjustViewSize();
109     void initScrollbars();
110     
111     virtual IntRect windowClipRect(bool clipToContents = true) const;
112     IntRect windowClipRectForLayer(const RenderLayer*, bool clipToLayerContents) const;
113
114     virtual bool isActive() const;
115     virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
116     virtual void valueChanged(Scrollbar*);
117     
118     virtual IntRect windowResizerRect() const;
119
120     virtual void scrollRectIntoViewRecursively(const IntRect&);
121     virtual void setScrollPosition(const IntPoint&);
122
123     String mediaType() const;
124     void setMediaType(const String&);
125
126     void setUseSlowRepaints();
127
128     void addSlowRepaintObject();
129     void removeSlowRepaintObject();
130
131     void beginDeferredRepaints();
132     void endDeferredRepaints();
133
134 #if ENABLE(DASHBOARD_SUPPORT)
135     void updateDashboardRegions();
136 #endif
137     void updateControlTints();
138
139     void restoreScrollbar();
140
141     void scheduleEvent(PassRefPtr<Event>, PassRefPtr<EventTargetNode>);
142     void pauseScheduledEvents();
143     void resumeScheduledEvents();
144     void postLayoutTimerFired(Timer<FrameView>*);
145
146     bool wasScrolledByUser() const;
147     void setWasScrolledByUser(bool);
148
149     void addWidgetToUpdate(RenderPartObject*);
150     void removeWidgetToUpdate(RenderPartObject*);
151
152     virtual void paintContents(GraphicsContext*, const IntRect& damageRect);
153     void setPaintRestriction(PaintRestriction);
154     bool isPainting() const;
155     void setNodeToDraw(Node*);
156
157     static double currentPaintTimeStamp() { return sCurrentPaintTimeStamp; } // returns 0 if not painting
158     
159     void layoutIfNeededRecursive();
160
161 private:
162     void init();
163
164     virtual bool isFrameView() const;
165
166     bool useSlowRepaints() const;
167
168     void applyOverflowToViewport(RenderObject*, ScrollbarMode& hMode, ScrollbarMode& vMode);
169
170     void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
171
172     void dispatchScheduledEvents();
173     void performPostLayoutTasks();
174
175     virtual void repaintContentRectangle(const IntRect&, bool immediate);
176     virtual void contentsResized() { setNeedsLayout(); }
177     virtual void visibleContentsResized() { layout(); }
178
179     static double sCurrentPaintTimeStamp; // used for detecting decoded resource thrash in the cache
180
181     unsigned m_refCount;
182     IntSize m_size;
183     IntSize m_margins;
184     OwnPtr<HashSet<RenderPartObject*> > m_widgetUpdateSet;
185     RefPtr<Frame> m_frame;
186     FrameViewPrivate* d;
187 };
188
189 }
190
191 #endif