Widget focusability work.
[WebKit-https.git] / WebCore / platform / Widget.h
1 /*
2  * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef WEBCORE_PLATFORM_WIDGET_H_
27 #define WEBCORE_PLATFORM_WIDGET_H_
28
29 #include <wtf/Platform.h>
30
31 #if PLATFORM(MAC)
32 #ifdef __OBJC__
33 @class NSView;
34 #else
35 class NSView;
36 #endif
37 #endif
38
39 #if PLATFORM(WIN)
40 typedef struct HWND__* HWND;
41 #endif
42
43 #if PLATFORM(GDK)
44 typedef struct _GdkDrawable GdkDrawable;
45 #endif
46
47 #if PLATFORM(QT)
48 class QWidget;
49 #endif
50
51 namespace WebCore {
52
53     class Cursor;
54     class Font;
55     class GraphicsContext;
56     class IntPoint;
57     class IntRect;
58     class IntSize;
59     class PlatformMouseEvent;
60     class WidgetClient;
61     class WidgetPrivate;
62
63     class Widget {
64     public:
65
66         enum FocusPolicy {
67             NoFocus = 0,
68             TabFocus = 0x1,
69             ClickFocus = 0x2,
70             StrongFocus = 0x3,
71             WheelFocus = 0x7
72         };
73
74         Widget();
75         virtual ~Widget();
76
77         virtual IntSize sizeHint() const;
78         
79         virtual void setEnabled(bool);
80         virtual bool isEnabled() const;
81
82         int x() const;
83         int y() const;
84         int width() const;
85         int height() const;
86         IntSize size() const;
87         void resize(int, int);
88         void resize(const IntSize&);
89         IntPoint pos() const;
90         void move(int, int);
91         void move(const IntPoint&);
92
93         virtual void paint(GraphicsContext*, const IntRect&);
94         virtual void invalidate();
95         virtual void invalidateRect(const IntRect&);
96
97         virtual void setFrameGeometry(const IntRect&);
98         virtual IntRect frameGeometry() const;
99
100         virtual int baselinePosition(int height) const; // relative to the top of the widget
101
102         bool hasFocus() const;
103         virtual void setFocus();
104         virtual void clearFocus();
105         virtual bool checksDescendantsForFocus() const;
106
107         virtual FocusPolicy focusPolicy() const;
108
109         const Font& font() const;
110         virtual void setFont(const Font&);
111
112         void setCursor(const Cursor&);
113         Cursor cursor();
114
115         virtual void show();
116         virtual void hide();
117
118         virtual void populate() {}
119
120         GraphicsContext* lockDrawingFocus();
121         void unlockDrawingFocus(GraphicsContext*);
122         void enableFlushDrawing();
123         void disableFlushDrawing();
124
125         void setIsSelected(bool);
126
127         void setClient(WidgetClient*);
128         WidgetClient* client() const;
129
130         virtual bool isFrameView() const;
131
132 #if PLATFORM(WIN)
133         void setContainingWindow(HWND);
134         HWND containingWindow() const;
135
136         void setParent(Widget*);
137         Widget* parent() const;
138
139         virtual void scrolled() const {};
140
141         bool capturingMouse() const;
142         void setCapturingMouse(bool);
143         Widget* capturingTarget();
144         Widget* capturingChild();
145         void setCapturingChild(Widget*);
146         
147         void setFocused(bool);
148         Widget* focusedTarget();
149         Widget* focusedChild();
150         void setFocusedChild(Widget*);
151         void clearFocusFromDescendants();
152
153         IntRect convertToContainingWindow(const IntRect&) const;
154         IntPoint convertToContainingWindow(const IntPoint&) const;
155         IntPoint convertFromContainingWindow(const IntPoint&) const;
156
157         virtual IntPoint convertChildToSelf(const Widget*, const IntPoint&) const;
158         virtual IntPoint convertSelfToChild(const Widget*, const IntPoint&) const;
159
160         void setSuppressInvalidation(bool);
161
162         // These methods will be called on a widget while it is capturing the mouse.
163         virtual void handleMouseMoveEvent(const PlatformMouseEvent&) {};
164         virtual void handleMouseReleaseEvent(const PlatformMouseEvent&) {};
165 #endif
166
167 #if PLATFORM(GDK)
168         Widget(GdkDrawable* drawable);
169         virtual void setDrawable(GdkDrawable* drawable);
170         GdkDrawable* drawable() const;
171 #endif
172
173 #if PLATFORM(QT)
174         QWidget* parentWidget() const;
175         virtual void setParentWidget(QWidget*);
176
177         QWidget* qwidget();
178         void setQWidget(QWidget*);
179 #endif
180
181 #if PLATFORM(MAC)
182         Widget(NSView* view);
183
184         NSView* getView() const;
185         NSView* getOuterView() const;
186         void setView(NSView*);
187         
188         void sendConsumedMouseUp();
189         
190         static void beforeMouseDown(NSView*);
191         static void afterMouseDown(NSView*);
192
193         void addToSuperview(NSView* superview);
194         void removeFromSuperview();
195
196         static void setDeferFirstResponderChanges(bool);
197 #endif
198
199     private:
200         WidgetPrivate* data;
201     };
202
203 } // namespace WebCore
204
205 #endif // WEBCORE_PLATFORM_WIDGET_H_