Home | History | Annotate | Download | only in gfx
      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 {
    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)
    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