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) 46class SkRegion; 47namespace aura { 48class Window; 49} 50namespace ui { 51class Cursor; 52class Event; 53} 54#endif // defined(USE_AURA) 55 56#if defined(OS_WIN) 57#include <windows.h> // NOLINT 58typedef struct HFONT__* HFONT; 59struct IAccessible; 60#elif defined(OS_IOS) 61struct CGContext; 62#ifdef __OBJC__ 63@class UIEvent; 64@class UIFont; 65@class UIImage; 66@class UIView; 67@class UIWindow; 68@class UITextField; 69#else 70class UIEvent; 71class UIFont; 72class UIImage; 73class UIView; 74class UIWindow; 75class UITextField; 76#endif // __OBJC__ 77#elif defined(OS_MACOSX) 78struct 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 88class NSCursor; 89class NSEvent; 90class NSFont; 91class NSImage; 92struct NSView; 93class NSWindow; 94class NSTextField; 95#endif // __OBJC__ 96#elif defined(OS_POSIX) 97typedef struct _PangoFontDescription PangoFontDescription; 98typedef struct _cairo cairo_t; 99#endif 100 101#if defined(OS_ANDROID) 102struct ANativeWindow; 103namespace ui { 104class WindowAndroid; 105class ViewAndroid; 106} 107#endif 108class SkBitmap; 109 110namespace gfx { 111 112#if defined(USE_AURA) 113typedef ui::Cursor NativeCursor; 114typedef aura::Window* NativeView; 115typedef aura::Window* NativeWindow; 116typedef SkRegion* NativeRegion; 117typedef ui::Event* NativeEvent; 118#elif defined(OS_IOS) 119typedef void* NativeCursor; 120typedef UIView* NativeView; 121typedef UIWindow* NativeWindow; 122typedef UIEvent* NativeEvent; 123#elif defined(OS_MACOSX) 124typedef NSCursor* NativeCursor; 125typedef NSView* NativeView; 126typedef NSWindow* NativeWindow; 127typedef void* NativeRegion; 128typedef NSEvent* NativeEvent; 129#elif defined(OS_ANDROID) 130typedef void* NativeCursor; 131typedef ui::ViewAndroid* NativeView; 132typedef ui::WindowAndroid* NativeWindow; 133typedef void* NativeRegion; 134typedef jobject NativeEvent; 135#endif 136 137#if defined(OS_WIN) 138typedef HFONT NativeFont; 139typedef HWND NativeEditView; 140typedef HDC NativeDrawingContext; 141typedef IAccessible* NativeViewAccessible; 142#elif defined(OS_IOS) 143typedef UIFont* NativeFont; 144typedef UITextField* NativeEditView; 145typedef CGContext* NativeDrawingContext; 146#ifdef __OBJC__ 147typedef id NativeViewAccessible; 148#else 149typedef void* NativeViewAccessible; 150#endif 151#elif defined(OS_MACOSX) 152typedef NSFont* NativeFont; 153typedef NSTextField* NativeEditView; 154typedef CGContext* NativeDrawingContext; 155#ifdef __OBJC__ 156typedef id NativeViewAccessible; 157#else 158typedef void* NativeViewAccessible; 159#endif 160#elif defined(USE_CAIRO) 161typedef PangoFontDescription* NativeFont; 162typedef void* NativeEditView; 163typedef cairo_t* NativeDrawingContext; 164typedef void* NativeViewAccessible; 165#else 166typedef void* NativeFont; 167typedef void* NativeEditView; 168typedef void* NativeDrawingContext; 169typedef void* NativeViewAccessible; 170#endif 171 172// A constant value to indicate that gfx::NativeCursor refers to no cursor. 173#if defined(USE_AURA) 174const int kNullCursor = 0; 175#else 176const gfx::NativeCursor kNullCursor = static_cast<gfx::NativeCursor>(NULL); 177#endif 178 179#if defined(OS_IOS) 180typedef UIImage NativeImageType; 181#elif defined(OS_MACOSX) 182typedef NSImage NativeImageType; 183#else 184typedef SkBitmap NativeImageType; 185#endif 186typedef 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. 193typedef 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 217enum SurfaceType { 218 EMPTY, 219 NATIVE_DIRECT, 220 NATIVE_TRANSPORT, 221 TEXTURE_TRANSPORT, 222 SURFACE_TYPE_LAST = TEXTURE_TRANSPORT 223}; 224 225struct GLSurfaceHandle { 226 GLSurfaceHandle() 227 : handle(kNullPluginWindow), 228 transport_type(EMPTY), 229 parent_client_id(0) { 230 } 231 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 } 239 bool is_null() const { return transport_type == EMPTY; } 240 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) 251typedef HWND AcceleratedWidget; 252const AcceleratedWidget kNullAcceleratedWidget = NULL; 253#elif defined(USE_X11) 254typedef unsigned long AcceleratedWidget; 255const AcceleratedWidget kNullAcceleratedWidget = 0; 256#elif defined(OS_IOS) 257typedef UIView* AcceleratedWidget; 258const AcceleratedWidget kNullAcceleratedWidget = 0; 259#elif defined(OS_MACOSX) 260typedef NSView* AcceleratedWidget; 261const AcceleratedWidget kNullAcceleratedWidget = 0; 262#elif defined(OS_ANDROID) 263typedef ANativeWindow* AcceleratedWidget; 264const AcceleratedWidget kNullAcceleratedWidget = 0; 265#elif defined(USE_OZONE) 266typedef intptr_t AcceleratedWidget; 267const 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