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;
127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)typedef void* NativeRegion;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSEvent* NativeEvent;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeCursor;
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef ui::ViewAndroid* NativeView;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ui::WindowAndroid* NativeWindow;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeRegion;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef jobject NativeEvent;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HFONT NativeFont;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND NativeEditView;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HDC NativeDrawingContext;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef IAccessible* NativeViewAccessible;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIFont* NativeFont;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UITextField* NativeEditView;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef CGContext* NativeDrawingContext;
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef __OBJC__
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef id NativeViewAccessible;
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef void* NativeViewAccessible;
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSFont* NativeFont;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSTextField* NativeEditView;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef CGContext* NativeDrawingContext;
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifdef __OBJC__
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef id NativeViewAccessible;
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#elif defined(USE_CAIRO)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PangoFontDescription* NativeFont;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeEditView;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef cairo_t* NativeDrawingContext;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeFont;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeEditView;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeDrawingContext;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void* NativeViewAccessible;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A constant value to indicate that gfx::NativeCursor refers to no cursor.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kNullCursor = 0;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const gfx::NativeCursor kNullCursor = static_cast<gfx::NativeCursor>(NULL);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_IOS)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIImage NativeImageType;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSImage NativeImageType;
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef SkBitmap NativeImageType;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NativeImageType* NativeImage;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note: for test_shell we're packing a pointer into the NativeViewId. So, if
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// you make it a type which is smaller than a pointer, you have to fix
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test_shell.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See comment at the top of the file for usage.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef intptr_t NativeViewId;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PluginWindowHandle is an abstraction wrapping "the types of windows
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// used by NPAPI plugins". On Windows it's an HWND, on X it's an X
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window id.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef HWND PluginWindowHandle;
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = NULL;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef unsigned long PluginWindowHandle;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef uint64 PluginWindowHandle;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#elif defined(USE_OZONE)
20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef intptr_t PluginWindowHandle;
20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // On Mac we don't have windowed plugins. We use a NULL/0 PluginWindowHandle
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // in shared code to indicate there is no window present.
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef bool PluginWindowHandle;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PluginWindowHandle kNullPluginWindow = 0;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum SurfaceType {
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EMPTY,
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NATIVE_DIRECT,
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NATIVE_TRANSPORT,
2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  TEXTURE_TRANSPORT,
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SURFACE_TYPE_LAST = TEXTURE_TRANSPORT
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GLSurfaceHandle {
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLSurfaceHandle()
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : handle(kNullPluginWindow),
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        transport_type(EMPTY),
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        parent_client_id(0) {
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GLSurfaceHandle(PluginWindowHandle handle_, SurfaceType transport_)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : handle(handle_),
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        transport_type(transport_),
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        parent_client_id(0) {
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(!is_null() || handle == kNullPluginWindow);
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(transport_type != TEXTURE_TRANSPORT ||
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           handle == kNullPluginWindow);
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_null() const { return transport_type == EMPTY; }
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_transport() const {
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return transport_type == NATIVE_TRANSPORT ||
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           transport_type == TEXTURE_TRANSPORT;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PluginWindowHandle handle;
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SurfaceType transport_type;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32 parent_client_id;
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AcceleratedWidget provides a surface to compositors to paint pixels.
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef HWND AcceleratedWidget;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = NULL;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long AcceleratedWidget;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef UIView* AcceleratedWidget;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef NSView* AcceleratedWidget;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ANativeWindow* AcceleratedWidget;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
26590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#elif defined(USE_OZONE)
26690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)typedef intptr_t AcceleratedWidget;
26790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const AcceleratedWidget kNullAcceleratedWidget = 0;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error unknown platform
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gfx
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_GFX_NATIVE_WIDGET_TYPES_H_
275