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