• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #ifndef UI_GFX_NATIVE_WIDGET_TYPES_H_
6 #define UI_GFX_NATIVE_WIDGET_TYPES_H_
7 
8 #include "build/build_config.h"
9 
10 #if defined(OS_ANDROID)
11 #include <jni.h>
12 #endif
13 
14 #include "base/basictypes.h"
15 #include "base/logging.h"
16 #include "ui/gfx/gfx_export.h"
17 
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.
26 //
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.
30 //
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.
34 //
35 //   NativeEditView: a handle to a native edit-box. The Mac folks wanted this
36 //     specific typedef.
37 //
38 //   NativeImage: The platform-specific image type used for drawing UI elements
39 //     in the browser.
40 //
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'.
44 
45 #if defined(USE_AURA)
46 class SkRegion;
47 namespace aura {
48 class Window;
49 }
50 namespace ui {
51 class Cursor;
52 class Event;
53 }
54 #endif  // defined(USE_AURA)
55 
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 _PangoFontDescription PangoFontDescription;
98 typedef struct _cairo cairo_t;
99 #endif
100 
101 #if defined(OS_ANDROID)
102 struct ANativeWindow;
103 namespace ui {
104 class WindowAndroid;
105 class ViewAndroid;
106 }
107 #endif
108 class SkBitmap;
109 
110 namespace gfx {
111 
112 #if defined(USE_AURA)
113 typedef ui::Cursor NativeCursor;
114 typedef aura::Window* NativeView;
115 typedef aura::Window* NativeWindow;
116 typedef SkRegion* NativeRegion;
117 typedef ui::Event* NativeEvent;
118 #elif defined(OS_IOS)
119 typedef void* NativeCursor;
120 typedef UIView* NativeView;
121 typedef UIWindow* NativeWindow;
122 typedef UIEvent* NativeEvent;
123 #elif defined(OS_MACOSX)
124 typedef NSCursor* NativeCursor;
125 typedef NSView* NativeView;
126 typedef NSWindow* NativeWindow;
127 typedef void* NativeRegion;
128 typedef NSEvent* NativeEvent;
129 #elif defined(OS_ANDROID)
130 typedef void* NativeCursor;
131 typedef ui::ViewAndroid* NativeView;
132 typedef ui::WindowAndroid* NativeWindow;
133 typedef void* NativeRegion;
134 typedef jobject NativeEvent;
135 #endif
136 
137 #if defined(OS_WIN)
138 typedef HFONT NativeFont;
139 typedef HWND NativeEditView;
140 typedef HDC NativeDrawingContext;
141 typedef IAccessible* NativeViewAccessible;
142 #elif defined(OS_IOS)
143 typedef UIFont* NativeFont;
144 typedef UITextField* NativeEditView;
145 typedef CGContext* NativeDrawingContext;
146 #ifdef __OBJC__
147 typedef id NativeViewAccessible;
148 #else
149 typedef void* NativeViewAccessible;
150 #endif
151 #elif defined(OS_MACOSX)
152 typedef NSFont* NativeFont;
153 typedef NSTextField* NativeEditView;
154 typedef CGContext* NativeDrawingContext;
155 #ifdef __OBJC__
156 typedef id NativeViewAccessible;
157 #else
158 typedef void* NativeViewAccessible;
159 #endif
160 #elif defined(USE_CAIRO)
161 typedef PangoFontDescription* NativeFont;
162 typedef void* NativeEditView;
163 typedef cairo_t* NativeDrawingContext;
164 typedef void* NativeViewAccessible;
165 #else
166 typedef void* NativeFont;
167 typedef void* NativeEditView;
168 typedef void* NativeDrawingContext;
169 typedef void* NativeViewAccessible;
170 #endif
171 
172 // A constant value to indicate that gfx::NativeCursor refers to no cursor.
173 #if defined(USE_AURA)
174 const int kNullCursor = 0;
175 #else
176 const gfx::NativeCursor kNullCursor = static_cast<gfx::NativeCursor>(NULL);
177 #endif
178 
179 #if defined(OS_IOS)
180 typedef UIImage NativeImageType;
181 #elif defined(OS_MACOSX)
182 typedef NSImage NativeImageType;
183 #else
184 typedef SkBitmap NativeImageType;
185 #endif
186 typedef NativeImageType* NativeImage;
187 
188 // Note: for test_shell we're packing a pointer into the NativeViewId. So, if
189 // you make it a type which is smaller than a pointer, you have to fix
190 // test_shell.
191 //
192 // See comment at the top of the file for usage.
193 typedef intptr_t NativeViewId;
194 
195 // PluginWindowHandle is an abstraction wrapping "the types of windows
196 // used by NPAPI plugins". On Windows it's an HWND, on X it's an X
197 // window id.
198 #if defined(OS_WIN)
199   typedef HWND PluginWindowHandle;
200   const PluginWindowHandle kNullPluginWindow = NULL;
201 #elif defined(USE_X11)
202   typedef unsigned long PluginWindowHandle;
203   const PluginWindowHandle kNullPluginWindow = 0;
204 #elif defined(OS_ANDROID)
205   typedef uint64 PluginWindowHandle;
206   const PluginWindowHandle kNullPluginWindow = 0;
207 #elif defined(USE_OZONE)
208   typedef intptr_t PluginWindowHandle;
209   const PluginWindowHandle kNullPluginWindow = 0;
210 #else
211   // On Mac we don't have windowed plugins. We use a NULL/0 PluginWindowHandle
212   // in shared code to indicate there is no window present.
213   typedef bool PluginWindowHandle;
214   const PluginWindowHandle kNullPluginWindow = 0;
215 #endif
216 
217 enum SurfaceType {
218   EMPTY,
219   NATIVE_DIRECT,
220   NATIVE_TRANSPORT,
221   TEXTURE_TRANSPORT,
222   SURFACE_TYPE_LAST = TEXTURE_TRANSPORT
223 };
224 
225 struct GLSurfaceHandle {
GLSurfaceHandleGLSurfaceHandle226   GLSurfaceHandle()
227       : handle(kNullPluginWindow),
228         transport_type(EMPTY),
229         parent_client_id(0) {
230   }
GLSurfaceHandleGLSurfaceHandle231   GLSurfaceHandle(PluginWindowHandle handle_, SurfaceType transport_)
232       : handle(handle_),
233         transport_type(transport_),
234         parent_client_id(0) {
235     DCHECK(!is_null() || handle == kNullPluginWindow);
236     DCHECK(transport_type != TEXTURE_TRANSPORT ||
237            handle == kNullPluginWindow);
238   }
is_nullGLSurfaceHandle239   bool is_null() const { return transport_type == EMPTY; }
is_transportGLSurfaceHandle240   bool is_transport() const {
241     return transport_type == NATIVE_TRANSPORT ||
242            transport_type == TEXTURE_TRANSPORT;
243   }
244   PluginWindowHandle handle;
245   SurfaceType transport_type;
246   uint32 parent_client_id;
247 };
248 
249 // AcceleratedWidget provides a surface to compositors to paint pixels.
250 #if defined(OS_WIN)
251 typedef HWND AcceleratedWidget;
252 const AcceleratedWidget kNullAcceleratedWidget = NULL;
253 #elif defined(USE_X11)
254 typedef unsigned long AcceleratedWidget;
255 const AcceleratedWidget kNullAcceleratedWidget = 0;
256 #elif defined(OS_IOS)
257 typedef UIView* AcceleratedWidget;
258 const AcceleratedWidget kNullAcceleratedWidget = 0;
259 #elif defined(OS_MACOSX)
260 typedef NSView* AcceleratedWidget;
261 const AcceleratedWidget kNullAcceleratedWidget = 0;
262 #elif defined(OS_ANDROID)
263 typedef ANativeWindow* AcceleratedWidget;
264 const AcceleratedWidget kNullAcceleratedWidget = 0;
265 #elif defined(USE_OZONE)
266 typedef intptr_t AcceleratedWidget;
267 const AcceleratedWidget kNullAcceleratedWidget = 0;
268 #else
269 #error unknown platform
270 #endif
271 
272 }  // namespace gfx
273 
274 #endif  // UI_GFX_NATIVE_WIDGET_TYPES_H_
275