Reviewed by Eric. Landed by rwlbuis.
[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 __APPLE__
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 typedef struct HINSTANCE__ *HINSTANCE;
42 #endif
43
44 #if PLATFORM(GDK)
45 typedef struct _GdkDrawable GdkDrawable;
46 #endif
47
48 #if PLATFORM(QT)
49 class QWidget;
50 #endif
51
52 namespace WebCore {
53
54     class Cursor;
55     class Font;
56     class GraphicsContext;
57     class IntPoint;
58     class IntRect;
59     class IntSize;
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
95         virtual IntRect frameGeometry() const;
96         virtual void setFrameGeometry(const IntRect&);
97
98         virtual int baselinePosition(int height) const; // relative to the top of the widget
99
100         virtual IntPoint mapFromGlobal(const IntPoint&) const;
101
102         float scaleFactor() const;
103
104         bool hasFocus() const;
105         void setFocus();
106         void clearFocus();
107         virtual bool checksDescendantsForFocus() const;
108
109         virtual FocusPolicy focusPolicy() const;
110
111         const Font& font() const;
112         virtual void setFont(const Font&);
113
114         void setCursor(const Cursor&);
115         Cursor cursor();
116
117         void show();
118         void hide();
119
120         virtual void populate() {}
121
122         GraphicsContext* lockDrawingFocus();
123         void unlockDrawingFocus(GraphicsContext*);
124         void enableFlushDrawing();
125         void disableFlushDrawing();
126
127         void setIsSelected(bool);
128
129         void setClient(WidgetClient*);
130         WidgetClient* client() const;
131
132         virtual bool isFrameView() const;
133
134 #if PLATFORM(WIN)
135         Widget(HWND);
136         HWND windowHandle() const;
137         void setWindowHandle(HWND);
138         // The global DLL or application instance used for all WebCore windows.
139         static HINSTANCE instanceHandle;
140 #endif
141
142 #if PLATFORM(GDK)
143       Widget(GdkDrawable* drawable);
144       virtual void setDrawable(GdkDrawable* drawable);
145       GdkDrawable* drawable() const;
146 #endif
147
148
149 #if PLATFORM(QT)
150         QWidget* parentWidget() const;
151         virtual void setParentWidget(QWidget*);
152
153         QWidget* qwidget();
154         void setQWidget(QWidget*);
155 #endif
156
157
158 #if __APPLE__
159         Widget(NSView* view);
160
161         NSView* getView() const;
162         NSView* getOuterView() const;
163         void setView(NSView*);
164         
165         void sendConsumedMouseUp();
166         
167         static void beforeMouseDown(NSView*);
168         static void afterMouseDown(NSView*);
169
170         void addToSuperview(NSView* superview);
171         void removeFromSuperview();
172
173         static void setDeferFirstResponderChanges(bool);
174 #endif
175
176     private:
177         WidgetPrivate* data;
178     };
179
180 } // namespace WebCore
181
182 #endif // WEBCORE_PLATFORM_WIDGET_H_