native_widget_types.h revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GFX_NATIVE_WIDGET_TYPES_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GFX_NATIVE_WIDGET_TYPES_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <jni.h>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_export.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file provides cross platform typedefs for native widget types.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   NativeWindow: this is a handle to a native, top-level window
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   NativeView: this is a handle to a native UI element. It may be the
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     same type as a NativeWindow on some platforms.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   NativeViewId: Often, in our cross process model, we need to pass around a
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     reference to a "window". This reference will, say, be echoed back from a
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     renderer to the browser when it wishes to query its size. On Windows we
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     use an HWND for this.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     As a rule of thumb - if you're in the renderer, you should be dealing
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     with NativeViewIds. This should remind you that you shouldn't be doing
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     direct operations on platform widgets from the renderer process.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     If you're in the browser, you're probably dealing with NativeViews,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     unless you're in the IPC layer, which will be translating between
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     NativeViewIds from the renderer and NativeViews.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   NativeEditView: a handle to a native edit-box. The Mac folks wanted this
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     specific typedef.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   NativeImage: The platform-specific image type used for drawing UI elements
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//     in the browser.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The name 'View' here meshes with OS X where the UI elements are called
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 'views' and with our Chrome UI code where the elements are also called
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 'views'.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/cursor/cursor.h"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkRegion;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Event;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(USE_AURA)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h>  // NOLINT
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct HFONT__* HFONT;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct IAccessible;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CGContext;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __OBJC__
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class UIEvent;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class UIFont;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class UIImage;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class UIView;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class UIWindow;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class UITextField;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UIEvent;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UIFont;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UIImage;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UIView;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UIWindow;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UITextField;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // __OBJC__
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CGContext;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __OBJC__
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class NSCursor;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class NSEvent;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class NSFont;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class NSImage;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class NSView;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class NSWindow;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class NSTextField;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSCursor;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSEvent;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSFont;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSImage;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NSView;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSWindow;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NSTextField;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // __OBJC__
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _PangoFontDescription PangoFontDescription;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _cairo cairo_t;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(TOOLKIT_GTK)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _GdkCursor GdkCursor;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef union _GdkEvent GdkEvent;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _GdkPixbuf GdkPixbuf;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _GdkRegion GdkRegion;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _GtkWidget GtkWidget;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _GtkWindow GtkWindow;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ANativeWindow;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WindowAndroid;
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ViewAndroid;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::Cursor NativeCursor;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef aura::Window* NativeView;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef aura::Window* NativeWindow;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef SkRegion* NativeRegion;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::Event* NativeEvent;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HCURSOR NativeCursor;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND NativeView;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND NativeWindow;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HRGN NativeRegion;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef MSG NativeEvent;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeCursor;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIView* NativeView;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIWindow* NativeWindow;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIEvent* NativeEvent;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSCursor* NativeCursor;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSView* NativeView;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSWindow* NativeWindow;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSEvent* NativeEvent;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GdkCursor* NativeCursor;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GtkWidget* NativeView;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GtkWindow* NativeWindow;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GdkRegion* NativeRegion;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GdkEvent* NativeEvent;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeCursor;
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef ui::ViewAndroid* NativeView;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::WindowAndroid* NativeWindow;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeRegion;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef jobject NativeEvent;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HFONT NativeFont;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND NativeEditView;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HDC NativeDrawingContext;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef IAccessible* NativeViewAccessible;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIFont* NativeFont;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UITextField* NativeEditView;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef CGContext* NativeDrawingContext;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSFont* NativeFont;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSTextField* NativeEditView;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef CGContext* NativeDrawingContext;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PangoFontDescription* NativeFont;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GtkWidget* NativeEditView;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef cairo_t* NativeDrawingContext;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_AURA)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PangoFontDescription* NativeFont;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeEditView;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef cairo_t* NativeDrawingContext;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeFont;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeEditView;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeDrawingContext;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A constant value to indicate that gfx::NativeCursor refers to no cursor.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kNullCursor = 0;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const gfx::NativeCursor kNullCursor = static_cast<gfx::NativeCursor>(NULL);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_IOS)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIImage NativeImageType;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSImage NativeImageType;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GdkPixbuf NativeImageType;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef SkBitmap NativeImageType;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NativeImageType* NativeImage;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: for test_shell we're packing a pointer into the NativeViewId. So, if
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// you make it a type which is smaller than a pointer, you have to fix
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test_shell.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See comment at the top of the file for usage.
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef intptr_t NativeViewId;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert a NativeViewId to a NativeView.
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Windows, we pass an HWND into the renderer. As stated above, the renderer
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// should not be performing operations on the view.
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline NativeView NativeViewFromId(NativeViewId id) {
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return reinterpret_cast<NativeView>(id);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NativeViewFromIdInBrowser(x) NativeViewFromId(x)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) || defined(USE_AURA)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Mac, Linux and USE_AURA, a NativeView is a pointer to an object, and is
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// useless outside the process in which it was created. NativeViewFromId should
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only be used inside the appropriate platform ifdef outside of the browser.
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (NativeViewFromIdInBrowser can be used everywhere in the browser.) If your
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cross-platform design involves a call to NativeViewFromId from outside the
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// browser it will never work on Mac or Linux and is fundamentally broken.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Please do not call this from outside the browser. It won't work; the name
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// should give you a subtle hint.
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline NativeView NativeViewFromIdInBrowser(NativeViewId id) {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return reinterpret_cast<NativeView>(id);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_POSIX)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PluginWindowHandle is an abstraction wrapping "the types of windows
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// used by NPAPI plugins".  On Windows it's an HWND, on X it's an X
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window id.
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef HWND PluginWindowHandle;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = NULL;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef unsigned long PluginWindowHandle;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_AURA) && defined(OS_MACOSX)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Mac-Aura uses NSView-backed GLSurface.  Regular Mac does not.
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(dhollowa): Rationalize these two definitions. http://crbug.com/104551.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef NSView* PluginWindowHandle;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef uint64 PluginWindowHandle;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
25390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#elif defined(USE_OZONE)
25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef intptr_t PluginWindowHandle;
25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // On OS X we don't have windowed plugins.
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We use a NULL/0 PluginWindowHandle in shared code to indicate there
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is no window present, so mirror that behavior here.
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The GPU plugin is currently an exception to this rule. As of this
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // writing it uses some NPAPI infrastructure, and minimally we need
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to identify the plugin instance via this window handle. When the
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GPU plugin becomes a full-on GPU process, this typedef can be
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // returned to a bool. For now we use a type large enough to hold a
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // pointer on 64-bit architectures in case we need this capability.
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef uint64 PluginWindowHandle;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum SurfaceType {
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EMPTY,
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NATIVE_DIRECT,
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NATIVE_TRANSPORT,
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TEXTURE_TRANSPORT
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GLSurfaceHandle {
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLSurfaceHandle()
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : handle(kNullPluginWindow),
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        transport_type(EMPTY),
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        parent_gpu_process_id(0),
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        parent_client_id(0) {
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GLSurfaceHandle(PluginWindowHandle handle_, SurfaceType transport_)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : handle(handle_),
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        transport_type(transport_),
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        parent_gpu_process_id(0),
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        parent_client_id(0) {
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(!is_null() || handle == kNullPluginWindow);
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(transport_type != TEXTURE_TRANSPORT ||
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           handle == kNullPluginWindow);
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_null() const { return transport_type == EMPTY; }
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_transport() const {
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return transport_type == NATIVE_TRANSPORT ||
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           transport_type == TEXTURE_TRANSPORT;
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginWindowHandle handle;
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SurfaceType transport_type;
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int parent_gpu_process_id;
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 parent_client_id;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AcceleratedWidget provides a surface to compositors to paint pixels.
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND AcceleratedWidget;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = NULL;
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long AcceleratedWidget;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIView* AcceleratedWidget;
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSView* AcceleratedWidget;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ANativeWindow* AcceleratedWidget;
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
32190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#elif defined(USE_OZONE)
32290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)typedef intptr_t AcceleratedWidget;
32390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error unknown platform
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef void* GpuMemoryBufferHandle;
329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_GFX_NATIVE_WIDGET_TYPES_H_
333