Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / ui / gfx / native_widget_types.h
blob0ce333c5507ddee13243574dd7856e5cc9f944f3
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef UI_GFX_NATIVE_WIDGET_TYPES_H_
6 #define UI_GFX_NATIVE_WIDGET_TYPES_H_
8 #include "build/build_config.h"
10 #if defined(OS_ANDROID)
11 #include <jni.h>
12 #endif
14 #include "base/basictypes.h"
15 #include "base/logging.h"
16 #include "ui/gfx/gfx_export.h"
18 // This file provides cross platform typedefs for native widget types.
19 // NativeWindow: this is a handle to a native, top-level window
20 // NativeView: this is a handle to a native UI element. It may be the
21 // same type as a NativeWindow on some platforms.
22 // NativeViewId: Often, in our cross process model, we need to pass around a
23 // reference to a "window". This reference will, say, be echoed back from a
24 // renderer to the browser when it wishes to query its size. On Windows we
25 // use an HWND for this.
27 // As a rule of thumb - if you're in the renderer, you should be dealing
28 // with NativeViewIds. This should remind you that you shouldn't be doing
29 // direct operations on platform widgets from the renderer process.
31 // If you're in the browser, you're probably dealing with NativeViews,
32 // unless you're in the IPC layer, which will be translating between
33 // NativeViewIds from the renderer and NativeViews.
35 // NativeEditView: a handle to a native edit-box. The Mac folks wanted this
36 // specific typedef.
38 // NativeImage: The platform-specific image type used for drawing UI elements
39 // in the browser.
41 // The name 'View' here meshes with OS X where the UI elements are called
42 // 'views' and with our Chrome UI code where the elements are also called
43 // 'views'.
45 #if defined(USE_AURA)
46 class SkRegion;
47 namespace aura {
48 class Window;
50 namespace ui {
51 class Cursor;
52 class Event;
54 #endif // defined(USE_AURA)
56 #if defined(OS_WIN)
57 #include <windows.h> // NOLINT
58 typedef struct HFONT__* HFONT;
59 struct IAccessible;
60 #elif defined(OS_IOS)
61 struct CGContext;
62 #ifdef __OBJC__
63 @class UIEvent;
64 @class UIFont;
65 @class UIImage;
66 @class UIView;
67 @class UIWindow;
68 @class UITextField;
69 #else
70 class UIEvent;
71 class UIFont;
72 class UIImage;
73 class UIView;
74 class UIWindow;
75 class UITextField;
76 #endif // __OBJC__
77 #elif defined(OS_MACOSX)
78 struct CGContext;
79 #ifdef __OBJC__
80 @class NSCursor;
81 @class NSEvent;
82 @class NSFont;
83 @class NSImage;
84 @class NSView;
85 @class NSWindow;
86 @class NSTextField;
87 #else
88 class NSCursor;
89 class NSEvent;
90 class NSFont;
91 class NSImage;
92 struct NSView;
93 class NSWindow;
94 class NSTextField;
95 #endif // __OBJC__
96 #elif defined(OS_POSIX)
97 typedef struct _cairo cairo_t;
98 #endif
100 #if defined(OS_ANDROID)
101 struct ANativeWindow;
102 namespace ui {
103 class WindowAndroid;
104 class ViewAndroid;
106 #endif
107 class SkBitmap;
109 #if defined(USE_X11) && !defined(OS_CHROMEOS)
110 extern "C" {
111 struct _AtkObject;
112 typedef struct _AtkObject AtkObject;
114 #endif
116 namespace gfx {
118 #if defined(USE_AURA)
119 typedef ui::Cursor NativeCursor;
120 typedef aura::Window* NativeView;
121 typedef aura::Window* NativeWindow;
122 typedef ui::Event* NativeEvent;
123 #elif defined(OS_IOS)
124 typedef void* NativeCursor;
125 typedef UIView* NativeView;
126 typedef UIWindow* NativeWindow;
127 typedef UIEvent* NativeEvent;
128 #elif defined(OS_MACOSX)
129 typedef NSCursor* NativeCursor;
130 typedef NSView* NativeView;
131 typedef NSWindow* NativeWindow;
132 typedef NSEvent* NativeEvent;
133 #elif defined(OS_ANDROID)
134 typedef void* NativeCursor;
135 typedef ui::ViewAndroid* NativeView;
136 typedef ui::WindowAndroid* NativeWindow;
137 typedef jobject NativeEvent;
138 #else
139 #error Unknown build environment.
140 #endif
142 #if defined(OS_WIN)
143 typedef HFONT NativeFont;
144 typedef HWND NativeEditView;
145 typedef HDC NativeDrawingContext;
146 typedef IAccessible* NativeViewAccessible;
147 #elif defined(OS_IOS)
148 typedef UIFont* NativeFont;
149 typedef UITextField* NativeEditView;
150 typedef CGContext* NativeDrawingContext;
151 #ifdef __OBJC__
152 typedef id NativeViewAccessible;
153 #else
154 typedef void* NativeViewAccessible;
155 #endif // __OBJC__
156 #elif defined(OS_MACOSX)
157 typedef NSFont* NativeFont;
158 typedef NSTextField* NativeEditView;
159 typedef CGContext* NativeDrawingContext;
160 #ifdef __OBJC__
161 typedef id NativeViewAccessible;
162 #else
163 typedef void* NativeViewAccessible;
164 #endif // __OBJC__
165 #else // Android, Linux, Chrome OS, etc.
166 // Linux doesn't have a native font type.
167 typedef void* NativeEditView;
168 #if defined(USE_CAIRO)
169 typedef cairo_t* NativeDrawingContext;
170 #else
171 typedef void* NativeDrawingContext;
172 #endif // defined(USE_CAIRO)
173 #if defined(USE_X11) && !defined(OS_CHROMEOS)
174 typedef AtkObject* NativeViewAccessible;
175 #else
176 typedef void* NativeViewAccessible;
177 #endif
178 #endif
180 // A constant value to indicate that gfx::NativeCursor refers to no cursor.
181 #if defined(USE_AURA)
182 const int kNullCursor = 0;
183 #else
184 const gfx::NativeCursor kNullCursor = static_cast<gfx::NativeCursor>(NULL);
185 #endif
187 #if defined(OS_IOS)
188 typedef UIImage NativeImageType;
189 #elif defined(OS_MACOSX)
190 typedef NSImage NativeImageType;
191 #else
192 typedef SkBitmap NativeImageType;
193 #endif
194 typedef NativeImageType* NativeImage;
196 // Note: for test_shell we're packing a pointer into the NativeViewId. So, if
197 // you make it a type which is smaller than a pointer, you have to fix
198 // test_shell.
200 // See comment at the top of the file for usage.
201 typedef intptr_t NativeViewId;
203 // PluginWindowHandle is an abstraction wrapping "the types of windows
204 // used by NPAPI plugins". On Windows it's an HWND, on X it's an X
205 // window id.
206 #if defined(OS_WIN)
207 typedef HWND PluginWindowHandle;
208 const PluginWindowHandle kNullPluginWindow = NULL;
209 #elif defined(USE_X11)
210 typedef unsigned long PluginWindowHandle;
211 const PluginWindowHandle kNullPluginWindow = 0;
212 #elif defined(OS_ANDROID)
213 typedef uint64 PluginWindowHandle;
214 const PluginWindowHandle kNullPluginWindow = 0;
215 #elif defined(USE_OZONE)
216 typedef intptr_t PluginWindowHandle;
217 const PluginWindowHandle kNullPluginWindow = 0;
218 #else
219 // On Mac we don't have windowed plugins. We use a NULL/0 PluginWindowHandle
220 // in shared code to indicate there is no window present.
221 typedef bool PluginWindowHandle;
222 const PluginWindowHandle kNullPluginWindow = 0;
223 #endif
225 enum SurfaceType {
226 EMPTY,
227 NATIVE_DIRECT,
228 NULL_TRANSPORT,
229 SURFACE_TYPE_LAST = NULL_TRANSPORT
232 struct GLSurfaceHandle {
233 GLSurfaceHandle()
234 : handle(kNullPluginWindow),
235 transport_type(EMPTY),
236 parent_client_id(0) {
238 GLSurfaceHandle(PluginWindowHandle handle_, SurfaceType transport_)
239 : handle(handle_),
240 transport_type(transport_),
241 parent_client_id(0) {
242 DCHECK(!is_null() || handle == kNullPluginWindow);
243 DCHECK(transport_type != NULL_TRANSPORT ||
244 handle == kNullPluginWindow);
246 bool is_null() const { return transport_type == EMPTY; }
247 bool is_transport() const {
248 return transport_type == NULL_TRANSPORT;
250 PluginWindowHandle handle;
251 SurfaceType transport_type;
252 uint32 parent_client_id;
255 // AcceleratedWidget provides a surface to compositors to paint pixels.
256 #if defined(OS_WIN)
257 typedef HWND AcceleratedWidget;
258 const AcceleratedWidget kNullAcceleratedWidget = NULL;
259 #elif defined(USE_X11)
260 typedef unsigned long AcceleratedWidget;
261 const AcceleratedWidget kNullAcceleratedWidget = 0;
262 #elif defined(OS_IOS)
263 typedef UIView* AcceleratedWidget;
264 const AcceleratedWidget kNullAcceleratedWidget = 0;
265 #elif defined(OS_MACOSX)
266 typedef NSView* AcceleratedWidget;
267 const AcceleratedWidget kNullAcceleratedWidget = 0;
268 #elif defined(OS_ANDROID)
269 typedef ANativeWindow* AcceleratedWidget;
270 const AcceleratedWidget kNullAcceleratedWidget = 0;
271 #elif defined(USE_OZONE)
272 typedef intptr_t AcceleratedWidget;
273 const AcceleratedWidget kNullAcceleratedWidget = 0;
274 #else
275 #error unknown platform
276 #endif
278 } // namespace gfx
280 #endif // UI_GFX_NATIVE_WIDGET_TYPES_H_