LayoutTests:
[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 Clipboard;
38 class Event;
39 class EventTargetNode;
40 class Frame;
41 class FrameViewPrivate;
42 class HTMLFrameSetElement;
43 class IntPoint;
44 class IntRect;
45 class KeyboardEvent;
46 class PlatformMouseEvent;
47 class MouseEventWithHitTestResults;
48 class Node;
49 class RenderLayer;
50 class RenderObject;
51 class PlatformWheelEvent;
52
53 template <typename T> class Timer;
54
55 class FrameView : public ScrollView {
56 public:
57     FrameView(Frame*);
58     virtual ~FrameView();
59
60     Frame* frame() const { return m_frame.get(); }
61
62     void ref() { ++m_refCount; }
63     void deref() { if (!--m_refCount) delete this; }
64     bool hasOneRef() { return m_refCount == 1; }
65
66     int marginWidth() const { return m_margins.width(); } // -1 means default
67     int marginHeight() const { return m_margins.height(); } // -1 means default
68     void setMarginWidth(int);
69     void setMarginHeight(int);
70
71     virtual void setVScrollbarMode(ScrollbarMode);
72     virtual void setHScrollbarMode(ScrollbarMode);
73     virtual void setScrollbarsMode(ScrollbarMode);
74     
75     void print();
76
77     void layout(bool allowSubtree = true);
78     bool didFirstLayout() const;
79     void layoutTimerFired(Timer<FrameView>*);
80     void scheduleRelayout();
81     void scheduleRelayoutOfSubtree(Node*);
82     void unscheduleRelayout();
83     bool haveDelayedLayoutScheduled();
84     bool layoutPending() const;
85
86     Node* layoutRoot() const;
87     int layoutCount() const;
88
89     bool needsFullRepaint() const;
90     void repaintRectangle(const IntRect&, bool immediate);
91     void addRepaintInfo(RenderObject*, const IntRect&);
92
93     void resetScrollbars();
94
95     void clear();
96     void clearPart();
97
98     bool isTransparent() const;
99     void setTransparent(bool isTransparent);
100
101     Color baseBackgroundColor() const;
102     void setBaseBackgroundColor(Color);
103
104     void adjustViewSize();
105     void initScrollbars();
106     
107     void setHasBorder(bool);
108     bool hasBorder() const;
109     
110     virtual IntRect windowClipRect() const;
111     IntRect windowClipRect(bool clipToContents) const;
112     IntRect windowClipRectForLayer(const RenderLayer*, bool clipToLayerContents) const;
113
114     virtual void scrollPointRecursively(int x, int y);
115     virtual void setContentsPos(int x, int y);
116
117     String mediaType() const;
118
119     void setUseSlowRepaints();
120
121     void addSlowRepaintObject();
122     void removeSlowRepaintObject();
123
124 #if PLATFORM(MAC)
125     void updateDashboardRegions();
126 #endif
127
128     void restoreScrollbar();
129
130     void setMediaType(const String&);
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     unsigned m_refCount;
148     IntSize m_size;
149     IntSize m_margins;
150     RefPtr<Frame> m_frame;
151     FrameViewPrivate* d;
152
153     friend class Frame;
154     friend class FrameMac;
155
156 // === to be moved into EventHandler
157
158 public:
159     void handleMousePressEvent(const PlatformMouseEvent&);
160     void handleMouseDoubleClickEvent(const PlatformMouseEvent&);
161     virtual void handleMouseMoveEvent(const PlatformMouseEvent&);
162     virtual void handleMouseReleaseEvent(const PlatformMouseEvent&);
163     void handleWheelEvent(PlatformWheelEvent&);
164
165     bool passMousePressEventToSubframe(MouseEventWithHitTestResults&, Frame*);
166     bool passMouseMoveEventToSubframe(MouseEventWithHitTestResults&, Frame*);
167     bool passMouseReleaseEventToSubframe(MouseEventWithHitTestResults&, Frame*);
168     bool passWheelEventToSubframe(PlatformWheelEvent&, Frame*);
169     bool passMousePressEventToScrollbar(MouseEventWithHitTestResults&, PlatformScrollbar*);
170
171     bool mousePressed();
172     void setMousePressed(bool);
173
174     void doAutoScroll();
175
176     bool advanceFocus(KeyboardEvent*);
177
178     bool updateDragAndDrop(const PlatformMouseEvent&, Clipboard*);
179     void cancelDragAndDrop(const PlatformMouseEvent&, Clipboard*);
180     bool performDragAndDrop(const PlatformMouseEvent&, Clipboard*);
181
182     void scheduleHoverStateUpdate();
183     void hoverTimerFired(Timer<FrameView>*);
184
185     void setResizingFrameSet(HTMLFrameSetElement*);
186
187     void scheduleEvent(PassRefPtr<Event>, PassRefPtr<EventTargetNode>, bool tempEvent);
188
189     IntPoint currentMousePosition() const;
190
191     void setIgnoreWheelEvents(bool);
192
193 private:
194     void invalidateClick();
195
196     Node *nodeUnderMouse() const;
197
198     MouseEventWithHitTestResults prepareMouseEvent(bool readonly, bool active, bool mouseMove, const PlatformMouseEvent&);
199
200     bool dispatchMouseEvent(const AtomicString& eventType, Node* target,
201         bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder);
202     bool dispatchDragEvent(const AtomicString& eventType, Node* target,
203         const PlatformMouseEvent&, Clipboard*);
204
205     void dispatchScheduledEvents();
206
207 };
208
209 }
210
211 #endif
212