native_widget_types.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 content { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentViewCore; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WindowAndroid; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::Cursor NativeCursor; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef aura::Window* NativeView; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef aura::Window* NativeWindow; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef SkRegion* NativeRegion; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::Event* NativeEvent; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HCURSOR NativeCursor; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND NativeView; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND NativeWindow; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HRGN NativeRegion; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef MSG NativeEvent; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeCursor; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIView* NativeView; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIWindow* NativeWindow; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIEvent* NativeEvent; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSCursor* NativeCursor; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSView* NativeView; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSWindow* NativeWindow; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSEvent* NativeEvent; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GdkCursor* NativeCursor; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GtkWidget* NativeView; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GtkWindow* NativeWindow; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GdkRegion* NativeRegion; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GdkEvent* NativeEvent; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeCursor; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef content::ContentViewCore* NativeView; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::WindowAndroid* NativeWindow; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeRegion; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef jobject NativeEvent; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HFONT NativeFont; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND NativeEditView; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HDC NativeDrawingContext; 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)#elif defined(OS_MACOSX) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSFont* NativeFont; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSTextField* NativeEditView; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef CGContext* NativeDrawingContext; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PangoFontDescription* NativeFont; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GtkWidget* NativeEditView; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef cairo_t* NativeDrawingContext; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_AURA) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PangoFontDescription* NativeFont; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeEditView; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef cairo_t* NativeDrawingContext; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeFont; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeEditView; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeDrawingContext; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A constant value to indicate that gfx::NativeCursor refers to no cursor. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kNullCursor = 0; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const gfx::NativeCursor kNullCursor = static_cast<gfx::NativeCursor>(NULL); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_IOS) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIImage NativeImageType; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSImage NativeImageType; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(TOOLKIT_GTK) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef GdkPixbuf NativeImageType; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef SkBitmap NativeImageType; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NativeImageType* NativeImage; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: for test_shell we're packing a pointer into the NativeViewId. So, if 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// you make it a type which is smaller than a pointer, you have to fix 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test_shell. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See comment at the top of the file for usage. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef intptr_t NativeViewId; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert a NativeViewId to a NativeView. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Windows, we pass an HWND into the renderer. As stated above, the renderer 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// should not be performing operations on the view. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline NativeView NativeViewFromId(NativeViewId id) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<NativeView>(id); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NativeViewFromIdInBrowser(x) NativeViewFromId(x) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) || defined(USE_AURA) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// On Mac, Linux and USE_AURA, a NativeView is a pointer to an object, and is 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// useless outside the process in which it was created. NativeViewFromId should 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only be used inside the appropriate platform ifdef outside of the browser. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (NativeViewFromIdInBrowser can be used everywhere in the browser.) If your 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cross-platform design involves a call to NativeViewFromId from outside the 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// browser it will never work on Mac or Linux and is fundamentally broken. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Please do not call this from outside the browser. It won't work; the name 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// should give you a subtle hint. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static inline NativeView NativeViewFromIdInBrowser(NativeViewId id) { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<NativeView>(id); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PluginWindowHandle is an abstraction wrapping "the types of windows 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// used by NPAPI plugins". On Windows it's an HWND, on X it's an X 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window id. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef HWND PluginWindowHandle; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PluginWindowHandle kNullPluginWindow = NULL; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef unsigned long PluginWindowHandle; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PluginWindowHandle kNullPluginWindow = 0; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_AURA) && defined(OS_MACOSX) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mac-Aura uses NSView-backed GLSurface. Regular Mac does not. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(dhollowa): Rationalize these two definitions. http://crbug.com/104551. 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef NSView* PluginWindowHandle; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PluginWindowHandle kNullPluginWindow = 0; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef uint64 PluginWindowHandle; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PluginWindowHandle kNullPluginWindow = 0; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On OS X we don't have windowed plugins. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We use a NULL/0 PluginWindowHandle in shared code to indicate there 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is no window present, so mirror that behavior here. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The GPU plugin is currently an exception to this rule. As of this 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // writing it uses some NPAPI infrastructure, and minimally we need 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to identify the plugin instance via this window handle. When the 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GPU plugin becomes a full-on GPU process, this typedef can be 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returned to a bool. For now we use a type large enough to hold a 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pointer on 64-bit architectures in case we need this capability. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef uint64 PluginWindowHandle; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PluginWindowHandle kNullPluginWindow = 0; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum SurfaceType { 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EMPTY, 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NATIVE_DIRECT, 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NATIVE_TRANSPORT, 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TEXTURE_TRANSPORT 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GLSurfaceHandle { 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLSurfaceHandle() 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : handle(kNullPluginWindow), 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) transport_type(EMPTY), 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_gpu_process_id(0), 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent_client_id(0) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GLSurfaceHandle(PluginWindowHandle handle_, SurfaceType transport_) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : handle(handle_), 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) transport_type(transport_), 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent_gpu_process_id(0), 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent_client_id(0) { 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!is_null() || handle == kNullPluginWindow); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(transport_type != TEXTURE_TRANSPORT || 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handle == kNullPluginWindow); 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_null() const { return transport_type == EMPTY; } 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_transport() const { 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return transport_type == NATIVE_TRANSPORT || 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) transport_type == TEXTURE_TRANSPORT; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginWindowHandle handle; 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SurfaceType transport_type; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int parent_gpu_process_id; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 parent_client_id; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AcceleratedWidget provides a surface to compositors to paint pixels. 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND AcceleratedWidget; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = NULL; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long AcceleratedWidget; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIView* AcceleratedWidget; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSView* AcceleratedWidget; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ANativeWindow* AcceleratedWidget; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error unknown platform 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gfx 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_GFX_NATIVE_WIDGET_TYPES_H_ 327