native_widget_types.h revision a02191e04bc25c4935f804f2c080ae28663d096d
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"
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/gfx_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)class SkRegion;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class Cursor;
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)
101a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_ANDROID)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ANativeWindow;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WindowAndroid;
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ViewAndroid;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::Cursor NativeCursor;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef aura::Window* NativeView;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef aura::Window* NativeWindow;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef SkRegion* NativeRegion;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::Event* NativeEvent;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeCursor;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIView* NativeView;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIWindow* NativeWindow;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIEvent* NativeEvent;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSCursor* NativeCursor;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSView* NativeView;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSWindow* NativeWindow;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSEvent* NativeEvent;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeCursor;
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef ui::ViewAndroid* NativeView;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::WindowAndroid* NativeWindow;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeRegion;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef jobject NativeEvent;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HFONT NativeFont;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND NativeEditView;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HDC NativeDrawingContext;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef IAccessible* NativeViewAccessible;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIFont* NativeFont;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UITextField* NativeEditView;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef CGContext* NativeDrawingContext;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSFont* NativeFont;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSTextField* NativeEditView;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef CGContext* NativeDrawingContext;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#elif defined(USE_CAIRO)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PangoFontDescription* NativeFont;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeEditView;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef cairo_t* NativeDrawingContext;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeFont;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeEditView;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeDrawingContext;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A constant value to indicate that gfx::NativeCursor refers to no cursor.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kNullCursor = 0;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const gfx::NativeCursor kNullCursor = static_cast<gfx::NativeCursor>(NULL);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_IOS)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIImage NativeImageType;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSImage NativeImageType;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef SkBitmap NativeImageType;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NativeImageType* NativeImage;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: for test_shell we're packing a pointer into the NativeViewId. So, if
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// you make it a type which is smaller than a pointer, you have to fix
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test_shell.
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See comment at the top of the file for usage.
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef intptr_t NativeViewId;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PluginWindowHandle is an abstraction wrapping "the types of windows
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// used by NPAPI plugins". On Windows it's an HWND, on X it's an X
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window id.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef HWND PluginWindowHandle;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = NULL;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef unsigned long PluginWindowHandle;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef uint64 PluginWindowHandle;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
19790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#elif defined(USE_OZONE)
19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef intptr_t PluginWindowHandle;
19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // On Mac we don't have windowed plugins. We use a NULL/0 PluginWindowHandle
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // in shared code to indicate there is no window present.
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef bool PluginWindowHandle;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum SurfaceType {
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EMPTY,
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NATIVE_DIRECT,
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NATIVE_TRANSPORT,
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  TEXTURE_TRANSPORT,
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SURFACE_TYPE_LAST = TEXTURE_TRANSPORT
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GLSurfaceHandle {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLSurfaceHandle()
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : handle(kNullPluginWindow),
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        transport_type(EMPTY),
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        parent_client_id(0) {
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GLSurfaceHandle(PluginWindowHandle handle_, SurfaceType transport_)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : handle(handle_),
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        transport_type(transport_),
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        parent_client_id(0) {
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(!is_null() || handle == kNullPluginWindow);
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(transport_type != TEXTURE_TRANSPORT ||
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           handle == kNullPluginWindow);
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_null() const { return transport_type == EMPTY; }
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_transport() const {
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return transport_type == NATIVE_TRANSPORT ||
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           transport_type == TEXTURE_TRANSPORT;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginWindowHandle handle;
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SurfaceType transport_type;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 parent_client_id;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AcceleratedWidget provides a surface to compositors to paint pixels.
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND AcceleratedWidget;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = NULL;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long AcceleratedWidget;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIView* AcceleratedWidget;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSView* AcceleratedWidget;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ANativeWindow* AcceleratedWidget;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#elif defined(USE_OZONE)
25690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)typedef intptr_t AcceleratedWidget;
25790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error unknown platform
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_GFX_NATIVE_WIDGET_TYPES_H_
265