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