f74a69995fe1d6576f2e50698d6148cbffa9fbe2
[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 namespace WebCore {
49
50     class Cursor;
51     class Font;
52     class GraphicsContext;
53     class IntPoint;
54     class IntRect;
55     class IntSize;
56     class WidgetClient;
57     class WidgetPrivate;
58
59     class Widget {
60     public:
61
62         enum FocusPolicy {
63             NoFocus = 0,
64             TabFocus = 0x1,
65             ClickFocus = 0x2,
66             StrongFocus = 0x3,
67             WheelFocus = 0x7
68         };
69
70         Widget();
71         virtual ~Widget();
72
73         virtual IntSize sizeHint() const;
74         
75         virtual void setEnabled(bool);
76         virtual bool isEnabled() const;
77
78         int x() const;
79         int y() const;
80         int width() const;
81         int height() const;
82         IntSize size() const;
83         void resize(int, int);
84         void resize(const IntSize&);
85         IntPoint pos() const;
86         void move(int, int);
87         void move(const IntPoint&);
88
89         virtual void paint(GraphicsContext*, const IntRect&);
90
91         virtual IntRect frameGeometry() const;
92         virtual void setFrameGeometry(const IntRect&);
93
94         virtual int baselinePosition(int height) const; // relative to the top of the widget
95
96         virtual IntPoint mapFromGlobal(const IntPoint&) const;
97
98         float scaleFactor() const;
99
100         bool hasFocus() const;
101         void setFocus();
102         void clearFocus();
103         virtual bool checksDescendantsForFocus() const;
104
105         virtual FocusPolicy focusPolicy() const;
106
107         const Font& font() const;
108         virtual void setFont(const Font&);
109
110         void setCursor(const Cursor&);
111         Cursor cursor();
112
113         void show();
114         void hide();
115
116         virtual void populate() {}
117
118         GraphicsContext* lockDrawingFocus();
119         void unlockDrawingFocus(GraphicsContext*);
120         void enableFlushDrawing();
121         void disableFlushDrawing();
122
123         void setIsSelected(bool);
124
125         void setClient(WidgetClient*);
126         WidgetClient* client() const;
127
128         virtual bool isFrameView() const;
129
130 #if PLATFORM(WIN)
131         Widget(HWND);
132         HWND windowHandle() const;
133         void setWindowHandle(HWND);
134         // The global DLL or application instance used for all WebCore windows.
135         static HINSTANCE instanceHandle;
136 #endif
137
138 #if PLATFORM(GDK)
139       Widget(GdkDrawable* drawable);
140       virtual void setDrawable(GdkDrawable* drawable);
141       GdkDrawable* drawable() const;
142 #endif
143
144 #if __APPLE__
145         Widget(NSView* view);
146
147         NSView* getView() const;
148         NSView* getOuterView() const;
149         void setView(NSView*);
150         
151         void sendConsumedMouseUp();
152         
153         static void beforeMouseDown(NSView*);
154         static void afterMouseDown(NSView*);
155
156         void addToSuperview(NSView* superview);
157         void removeFromSuperview();
158
159         static void setDeferFirstResponderChanges(bool);
160 #endif
161
162     private:
163         WidgetPrivate* data;
164     };
165
166 } // namespace WebCore
167
168 #endif // WEBCORE_PLATFORM_WIDGET_H_