Fixes QWebFrame::setScrollBarPolicy(..) to actually work. Also happens
[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     virtual PassRefPtr<Scrollbar> createScrollbar(ScrollbarOrientation);
79
80     void layout(bool allowSubtree = true);
81     bool didFirstLayout() const;
82     void layoutTimerFired(Timer<FrameView>*);
83     void scheduleRelayout();
84     void scheduleRelayoutOfSubtree(RenderObject*);
85     void unscheduleRelayout();
86     bool layoutPending() const;
87
88     RenderObject* layoutRoot(bool onlyDuringLayout = false) const;
89     int layoutCount() const;
90
91     // These two helper functions just pass through to the RenderView.
92     bool needsLayout() const;
93     void setNeedsLayout();
94
95     bool needsFullRepaint() const;
96
97     void resetScrollbars();
98
99     void clear();
100
101     bool isTransparent() const;
102     void setTransparent(bool isTransparent);
103
104     Color baseBackgroundColor() const;
105     void setBaseBackgroundColor(Color);
106     void updateBackgroundRecursively(const Color&, bool);
107
108     bool shouldUpdateWhileOffscreen() const;
109     void setShouldUpdateWhileOffscreen(bool);
110
111     void adjustViewSize();
112     void initScrollbars();
113     void updateDefaultScrollbarState();
114     
115     virtual IntRect windowClipRect(bool clipToContents = true) const;
116     IntRect windowClipRectForLayer(const RenderLayer*, bool clipToLayerContents) const;
117
118     virtual bool isActive() const;
119     virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
120     virtual void valueChanged(Scrollbar*);
121     virtual void getTickmarks(Vector<IntRect>&) const;
122
123     virtual IntRect windowResizerRect() const;
124
125     virtual void scrollRectIntoViewRecursively(const IntRect&);
126     virtual void setScrollPosition(const IntPoint&);
127
128     String mediaType() const;
129     void setMediaType(const String&);
130
131     void setUseSlowRepaints();
132
133     void addSlowRepaintObject();
134     void removeSlowRepaintObject();
135
136     void beginDeferredRepaints();
137     void endDeferredRepaints();
138
139 #if ENABLE(DASHBOARD_SUPPORT)
140     void updateDashboardRegions();
141 #endif
142     void updateControlTints();
143
144     void restoreScrollbar();
145
146     void scheduleEvent(PassRefPtr<Event>, PassRefPtr<EventTargetNode>);
147     void pauseScheduledEvents();
148     void resumeScheduledEvents();
149     void postLayoutTimerFired(Timer<FrameView>*);
150
151     bool wasScrolledByUser() const;
152     void setWasScrolledByUser(bool);
153
154     void addWidgetToUpdate(RenderPartObject*);
155     void removeWidgetToUpdate(RenderPartObject*);
156
157     virtual void paintContents(GraphicsContext*, const IntRect& damageRect);
158     void setPaintRestriction(PaintRestriction);
159     bool isPainting() const;
160     void setNodeToDraw(Node*);
161
162     static double currentPaintTimeStamp() { return sCurrentPaintTimeStamp; } // returns 0 if not painting
163     
164     void layoutIfNeededRecursive();
165
166     void setIsVisuallyNonEmpty();
167
168 private:
169     void init();
170
171     virtual bool isFrameView() const;
172
173     bool useSlowRepaints() const;
174
175     void applyOverflowToViewport(RenderObject*, ScrollbarMode& hMode, ScrollbarMode& vMode);
176
177     void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
178
179     void dispatchScheduledEvents();
180     void performPostLayoutTasks();
181
182     virtual void repaintContentRectangle(const IntRect&, bool immediate);
183     virtual void contentsResized() { setNeedsLayout(); }
184     virtual void visibleContentsResized() { layout(); }
185
186     static double sCurrentPaintTimeStamp; // used for detecting decoded resource thrash in the cache
187
188     unsigned m_refCount;
189     IntSize m_size;
190     IntSize m_margins;
191     OwnPtr<HashSet<RenderPartObject*> > m_widgetUpdateSet;
192     RefPtr<Frame> m_frame;
193     FrameViewPrivate* d;
194 };
195
196 }
197
198 #endif