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)
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
38 // NativeImage: The platform-specific image type used for drawing UI elements
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
54 #endif // defined(USE_AURA)
57 #include <windows.h> // NOLINT
58 typedef struct HFONT__
* HFONT
;
77 #elif defined(OS_MACOSX)
96 #elif defined(OS_POSIX)
97 typedef struct _cairo cairo_t
;
100 #if defined(OS_ANDROID)
101 struct ANativeWindow
;
109 #if defined(USE_X11) && !defined(OS_CHROMEOS)
112 typedef struct _AtkObject AtkObject
;
118 #if defined(USE_AURA)
119 typedef ui::Cursor NativeCursor
;
120 typedef aura::Window
* NativeView
;
121 typedef aura::Window
* NativeWindow
;
122 typedef SkRegion
* NativeRegion
;
123 typedef ui::Event
* NativeEvent
;
124 #elif defined(OS_IOS)
125 typedef void* NativeCursor
;
126 typedef UIView
* NativeView
;
127 typedef UIWindow
* NativeWindow
;
128 typedef UIEvent
* NativeEvent
;
129 #elif defined(OS_MACOSX)
130 typedef NSCursor
* NativeCursor
;
131 typedef NSView
* NativeView
;
132 typedef NSWindow
* NativeWindow
;
133 typedef void* NativeRegion
;
134 typedef NSEvent
* NativeEvent
;
135 #elif defined(OS_ANDROID)
136 typedef void* NativeCursor
;
137 typedef ui::ViewAndroid
* NativeView
;
138 typedef ui::WindowAndroid
* NativeWindow
;
139 typedef void* NativeRegion
;
140 typedef jobject NativeEvent
;
144 typedef HFONT NativeFont
;
145 typedef HWND NativeEditView
;
146 typedef HDC NativeDrawingContext
;
147 typedef IAccessible
* NativeViewAccessible
;
148 #elif defined(OS_IOS)
149 typedef UIFont
* NativeFont
;
150 typedef UITextField
* NativeEditView
;
151 typedef CGContext
* NativeDrawingContext
;
153 typedef id NativeViewAccessible
;
155 typedef void* NativeViewAccessible
;
157 #elif defined(OS_MACOSX)
158 typedef NSFont
* NativeFont
;
159 typedef NSTextField
* NativeEditView
;
160 typedef CGContext
* NativeDrawingContext
;
162 typedef id NativeViewAccessible
;
164 typedef void* NativeViewAccessible
;
166 #else // Android, Linux, Chrome OS, etc.
167 // Linux doesn't have a native font type.
168 typedef void* NativeEditView
;
169 #if defined(USE_CAIRO)
170 typedef cairo_t
* NativeDrawingContext
;
172 typedef void* NativeDrawingContext
;
173 #endif // defined(USE_CAIRO)
174 #if defined(USE_X11) && !defined(OS_CHROMEOS)
175 typedef AtkObject
* NativeViewAccessible
;
177 typedef void* NativeViewAccessible
;
181 // A constant value to indicate that gfx::NativeCursor refers to no cursor.
182 #if defined(USE_AURA)
183 const int kNullCursor
= 0;
185 const gfx::NativeCursor kNullCursor
= static_cast<gfx::NativeCursor
>(NULL
);
189 typedef UIImage NativeImageType
;
190 #elif defined(OS_MACOSX)
191 typedef NSImage NativeImageType
;
193 typedef SkBitmap NativeImageType
;
195 typedef NativeImageType
* NativeImage
;
197 // Note: for test_shell we're packing a pointer into the NativeViewId. So, if
198 // you make it a type which is smaller than a pointer, you have to fix
201 // See comment at the top of the file for usage.
202 typedef intptr_t NativeViewId
;
204 // PluginWindowHandle is an abstraction wrapping "the types of windows
205 // used by NPAPI plugins". On Windows it's an HWND, on X it's an X
208 typedef HWND PluginWindowHandle
;
209 const PluginWindowHandle kNullPluginWindow
= NULL
;
210 #elif defined(USE_X11)
211 typedef unsigned long PluginWindowHandle
;
212 const PluginWindowHandle kNullPluginWindow
= 0;
213 #elif defined(OS_ANDROID)
214 typedef uint64 PluginWindowHandle
;
215 const PluginWindowHandle kNullPluginWindow
= 0;
216 #elif defined(USE_OZONE)
217 typedef intptr_t PluginWindowHandle
;
218 const PluginWindowHandle kNullPluginWindow
= 0;
220 // On Mac we don't have windowed plugins. We use a NULL/0 PluginWindowHandle
221 // in shared code to indicate there is no window present.
222 typedef bool PluginWindowHandle
;
223 const PluginWindowHandle kNullPluginWindow
= 0;
230 SURFACE_TYPE_LAST
= NULL_TRANSPORT
233 struct GLSurfaceHandle
{
235 : handle(kNullPluginWindow
),
236 transport_type(EMPTY
),
237 parent_client_id(0) {
239 GLSurfaceHandle(PluginWindowHandle handle_
, SurfaceType transport_
)
241 transport_type(transport_
),
242 parent_client_id(0) {
243 DCHECK(!is_null() || handle
== kNullPluginWindow
);
244 DCHECK(transport_type
!= NULL_TRANSPORT
||
245 handle
== kNullPluginWindow
);
247 bool is_null() const { return transport_type
== EMPTY
; }
248 bool is_transport() const {
249 return transport_type
== NULL_TRANSPORT
;
251 PluginWindowHandle handle
;
252 SurfaceType transport_type
;
253 uint32 parent_client_id
;
256 // AcceleratedWidget provides a surface to compositors to paint pixels.
258 typedef HWND AcceleratedWidget
;
259 const AcceleratedWidget kNullAcceleratedWidget
= NULL
;
260 #elif defined(USE_X11)
261 typedef unsigned long AcceleratedWidget
;
262 const AcceleratedWidget kNullAcceleratedWidget
= 0;
263 #elif defined(OS_IOS)
264 typedef UIView
* AcceleratedWidget
;
265 const AcceleratedWidget kNullAcceleratedWidget
= 0;
266 #elif defined(OS_MACOSX)
267 typedef NSView
* AcceleratedWidget
;
268 const AcceleratedWidget kNullAcceleratedWidget
= 0;
269 #elif defined(OS_ANDROID)
270 typedef ANativeWindow
* AcceleratedWidget
;
271 const AcceleratedWidget kNullAcceleratedWidget
= 0;
272 #elif defined(USE_OZONE)
273 typedef intptr_t AcceleratedWidget
;
274 const AcceleratedWidget kNullAcceleratedWidget
= 0;
276 #error unknown platform
281 #endif // UI_GFX_NATIVE_WIDGET_TYPES_H_