65008e1da164c21fc8185feb4a55bf6dc648dc15
[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., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.
23 */
24
25 #ifndef FrameView_h
26 #define FrameView_h
27
28 #include "ScrollView.h"
29 #include "IntSize.h"
30 #include <wtf/Forward.h>
31
32 namespace WebCore {
33
34 class Color;
35 class Event;
36 class EventTargetNode;
37 class Frame;
38 class FrameViewPrivate;
39 class IntRect;
40 class PlatformMouseEvent;
41 class Node;
42 class RenderLayer;
43 class RenderObject;
44 class String;
45
46 template <typename T> class Timer;
47
48 class FrameView : public ScrollView {
49 public:
50     FrameView(Frame*);
51     virtual ~FrameView();
52
53     Frame* frame() const { return m_frame.get(); }
54     void clearFrame();
55
56     void ref() { ++m_refCount; }
57     void deref() { if (!--m_refCount) delete this; }
58     bool hasOneRef() { return m_refCount == 1; }
59
60     int marginWidth() const { return m_margins.width(); } // -1 means default
61     int marginHeight() const { return m_margins.height(); } // -1 means default
62     void setMarginWidth(int);
63     void setMarginHeight(int);
64
65     virtual void setVScrollbarMode(ScrollbarMode);
66     virtual void setHScrollbarMode(ScrollbarMode);
67     virtual void setScrollbarsMode(ScrollbarMode);
68
69     void layout(bool allowSubtree = true);
70     bool didFirstLayout() const;
71     void layoutTimerFired(Timer<FrameView>*);
72     void scheduleRelayout();
73     void scheduleRelayoutOfSubtree(Node*);
74     void unscheduleRelayout();
75     bool layoutPending() const;
76
77     Node* layoutRoot() const;
78     int layoutCount() const;
79
80     // These two helper functions just pass through to the RenderView.
81     bool needsLayout() const;
82     void setNeedsLayout();
83
84     bool needsFullRepaint() const;
85     void repaintRectangle(const IntRect&, bool immediate);
86     void addRepaintInfo(RenderObject*, const IntRect&);
87
88     void resetScrollbars();
89
90     void clear();
91
92     bool isTransparent() const;
93     void setTransparent(bool isTransparent);
94
95     Color baseBackgroundColor() const;
96     void setBaseBackgroundColor(Color);
97
98     void adjustViewSize();
99     void initScrollbars();
100     
101     virtual IntRect windowClipRect() const;
102     IntRect windowClipRect(bool clipToContents) const;
103     IntRect windowClipRectForLayer(const RenderLayer*, bool clipToLayerContents) const;
104
105     virtual void scrollRectIntoViewRecursively(const IntRect&);
106     virtual void setContentsPos(int x, int y);
107
108     String mediaType() const;
109     void setMediaType(const String&);
110
111     void setUseSlowRepaints();
112
113     void addSlowRepaintObject();
114     void removeSlowRepaintObject();
115
116     void updateDashboardRegions();
117     void updateControlTints();
118
119     void restoreScrollbar();
120
121     void scheduleEvent(PassRefPtr<Event>, PassRefPtr<EventTargetNode>, bool tempEvent);
122     void pauseScheduledEvents();
123     void resumeScheduledEvents();
124
125     bool wasScrolledByUser() const;
126     void setWasScrolledByUser(bool);
127
128 #if PLATFORM(GDK)
129     void layoutIfNeededRecursive();
130 #endif
131
132 private:
133     void init();
134
135     virtual bool isFrameView() const;
136
137     bool scrollTo(const IntRect&);
138
139     bool useSlowRepaints() const;
140
141     void applyOverflowToViewport(RenderObject*, ScrollbarMode& hMode, ScrollbarMode& vMode);
142
143     void updateBorder();
144
145     void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
146
147     void dispatchScheduledEvents();
148
149     unsigned m_refCount;
150     IntSize m_size;
151     IntSize m_margins;
152     RefPtr<Frame> m_frame;
153     FrameViewPrivate* d;
154 };
155
156 }
157
158 #endif