1def4f0a30f5e73b1349757a9315921731433a04
[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     
114     virtual IntRect windowClipRect(bool clipToContents = true) const;
115     IntRect windowClipRectForLayer(const RenderLayer*, bool clipToLayerContents) const;
116
117     virtual bool isActive() const;
118     virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
119     virtual void valueChanged(Scrollbar*);
120     virtual void getTickmarks(Vector<IntRect>&) const;
121
122     virtual IntRect windowResizerRect() const;
123
124     virtual void scrollRectIntoViewRecursively(const IntRect&);
125     virtual void setScrollPosition(const IntPoint&);
126
127     String mediaType() const;
128     void setMediaType(const String&);
129
130     void setUseSlowRepaints();
131
132     void addSlowRepaintObject();
133     void removeSlowRepaintObject();
134
135     void beginDeferredRepaints();
136     void endDeferredRepaints();
137
138 #if ENABLE(DASHBOARD_SUPPORT)
139     void updateDashboardRegions();
140 #endif
141     void updateControlTints();
142
143     void restoreScrollbar();
144
145     void scheduleEvent(PassRefPtr<Event>, PassRefPtr<EventTargetNode>);
146     void pauseScheduledEvents();
147     void resumeScheduledEvents();
148     void postLayoutTimerFired(Timer<FrameView>*);
149
150     bool wasScrolledByUser() const;
151     void setWasScrolledByUser(bool);
152
153     void addWidgetToUpdate(RenderPartObject*);
154     void removeWidgetToUpdate(RenderPartObject*);
155
156     virtual void paintContents(GraphicsContext*, const IntRect& damageRect);
157     void setPaintRestriction(PaintRestriction);
158     bool isPainting() const;
159     void setNodeToDraw(Node*);
160
161     static double currentPaintTimeStamp() { return sCurrentPaintTimeStamp; } // returns 0 if not painting
162     
163     void layoutIfNeededRecursive();
164
165     void setIsVisuallyNonEmpty();
166
167 private:
168     void init();
169
170     virtual bool isFrameView() const;
171
172     bool useSlowRepaints() const;
173
174     void applyOverflowToViewport(RenderObject*, ScrollbarMode& hMode, ScrollbarMode& vMode);
175
176     void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
177
178     void dispatchScheduledEvents();
179     void performPostLayoutTasks();
180
181     virtual void repaintContentRectangle(const IntRect&, bool immediate);
182     virtual void contentsResized() { setNeedsLayout(); }
183     virtual void visibleContentsResized() { layout(); }
184
185     static double sCurrentPaintTimeStamp; // used for detecting decoded resource thrash in the cache
186
187     unsigned m_refCount;
188     IntSize m_size;
189     IntSize m_margins;
190     OwnPtr<HashSet<RenderPartObject*> > m_widgetUpdateSet;
191     RefPtr<Frame> m_frame;
192     FrameViewPrivate* d;
193 };
194
195 }
196
197 #endif