summaryrefslogtreecommitdiff
path: root/chromium/ui/gfx/native_widget_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/gfx/native_widget_types.h')
-rw-r--r--chromium/ui/gfx/native_widget_types.h330
1 files changed, 330 insertions, 0 deletions
diff --git a/chromium/ui/gfx/native_widget_types.h b/chromium/ui/gfx/native_widget_types.h
new file mode 100644
index 00000000000..faf3607db92
--- /dev/null
+++ b/chromium/ui/gfx/native_widget_types.h
@@ -0,0 +1,330 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GFX_NATIVE_WIDGET_TYPES_H_
+#define UI_GFX_NATIVE_WIDGET_TYPES_H_
+
+#include "build/build_config.h"
+
+#if defined(OS_ANDROID)
+#include <jni.h>
+#endif
+
+#include "base/basictypes.h"
+#include "base/logging.h"
+#include "ui/base/ui_export.h"
+
+// This file provides cross platform typedefs for native widget types.
+// NativeWindow: this is a handle to a native, top-level window
+// NativeView: this is a handle to a native UI element. It may be the
+// same type as a NativeWindow on some platforms.
+// NativeViewId: Often, in our cross process model, we need to pass around a
+// reference to a "window". This reference will, say, be echoed back from a
+// renderer to the browser when it wishes to query its size. On Windows we
+// use an HWND for this.
+//
+// As a rule of thumb - if you're in the renderer, you should be dealing
+// with NativeViewIds. This should remind you that you shouldn't be doing
+// direct operations on platform widgets from the renderer process.
+//
+// If you're in the browser, you're probably dealing with NativeViews,
+// unless you're in the IPC layer, which will be translating between
+// NativeViewIds from the renderer and NativeViews.
+//
+// NativeEditView: a handle to a native edit-box. The Mac folks wanted this
+// specific typedef.
+//
+// NativeImage: The platform-specific image type used for drawing UI elements
+// in the browser.
+//
+// The name 'View' here meshes with OS X where the UI elements are called
+// 'views' and with our Chrome UI code where the elements are also called
+// 'views'.
+
+#if defined(USE_AURA)
+#include "ui/base/cursor/cursor.h"
+
+class SkRegion;
+namespace aura {
+class Window;
+}
+namespace ui {
+class Event;
+}
+#endif // defined(USE_AURA)
+
+#if defined(OS_WIN)
+#include <windows.h> // NOLINT
+typedef struct HFONT__* HFONT;
+struct IAccessible;
+#elif defined(OS_IOS)
+struct CGContext;
+#ifdef __OBJC__
+@class UIEvent;
+@class UIFont;
+@class UIImage;
+@class UIView;
+@class UIWindow;
+@class UITextField;
+#else
+class UIEvent;
+class UIFont;
+class UIImage;
+class UIView;
+class UIWindow;
+class UITextField;
+#endif // __OBJC__
+#elif defined(OS_MACOSX)
+struct CGContext;
+#ifdef __OBJC__
+@class NSCursor;
+@class NSEvent;
+@class NSFont;
+@class NSImage;
+@class NSView;
+@class NSWindow;
+@class NSTextField;
+#else
+class NSCursor;
+class NSEvent;
+class NSFont;
+class NSImage;
+struct NSView;
+class NSWindow;
+class NSTextField;
+#endif // __OBJC__
+#elif defined(OS_POSIX)
+typedef struct _PangoFontDescription PangoFontDescription;
+typedef struct _cairo cairo_t;
+#endif
+
+#if defined(TOOLKIT_GTK)
+typedef struct _GdkCursor GdkCursor;
+typedef union _GdkEvent GdkEvent;
+typedef struct _GdkPixbuf GdkPixbuf;
+typedef struct _GdkRegion GdkRegion;
+typedef struct _GtkWidget GtkWidget;
+typedef struct _GtkWindow GtkWindow;
+#elif defined(OS_ANDROID)
+struct ANativeWindow;
+namespace ui {
+class WindowAndroid;
+class ViewAndroid;
+}
+#endif
+class SkBitmap;
+
+namespace gfx {
+
+#if defined(USE_AURA)
+typedef ui::Cursor NativeCursor;
+typedef aura::Window* NativeView;
+typedef aura::Window* NativeWindow;
+typedef SkRegion* NativeRegion;
+typedef ui::Event* NativeEvent;
+#elif defined(OS_WIN)
+typedef HCURSOR NativeCursor;
+typedef HWND NativeView;
+typedef HWND NativeWindow;
+typedef HRGN NativeRegion;
+typedef MSG NativeEvent;
+#elif defined(OS_IOS)
+typedef void* NativeCursor;
+typedef UIView* NativeView;
+typedef UIWindow* NativeWindow;
+typedef UIEvent* NativeEvent;
+#elif defined(OS_MACOSX)
+typedef NSCursor* NativeCursor;
+typedef NSView* NativeView;
+typedef NSWindow* NativeWindow;
+typedef NSEvent* NativeEvent;
+#elif defined(TOOLKIT_GTK)
+typedef GdkCursor* NativeCursor;
+typedef GtkWidget* NativeView;
+typedef GtkWindow* NativeWindow;
+typedef GdkRegion* NativeRegion;
+typedef GdkEvent* NativeEvent;
+#elif defined(OS_ANDROID)
+typedef void* NativeCursor;
+typedef ui::ViewAndroid* NativeView;
+typedef ui::WindowAndroid* NativeWindow;
+typedef void* NativeRegion;
+typedef jobject NativeEvent;
+#endif
+
+#if defined(OS_WIN)
+typedef HFONT NativeFont;
+typedef HWND NativeEditView;
+typedef HDC NativeDrawingContext;
+typedef IAccessible* NativeViewAccessible;
+#elif defined(OS_IOS)
+typedef UIFont* NativeFont;
+typedef UITextField* NativeEditView;
+typedef CGContext* NativeDrawingContext;
+#elif defined(OS_MACOSX)
+typedef NSFont* NativeFont;
+typedef NSTextField* NativeEditView;
+typedef CGContext* NativeDrawingContext;
+typedef void* NativeViewAccessible;
+#elif defined(TOOLKIT_GTK)
+typedef PangoFontDescription* NativeFont;
+typedef GtkWidget* NativeEditView;
+typedef cairo_t* NativeDrawingContext;
+typedef void* NativeViewAccessible;
+#elif defined(USE_AURA)
+typedef PangoFontDescription* NativeFont;
+typedef void* NativeEditView;
+typedef cairo_t* NativeDrawingContext;
+typedef void* NativeViewAccessible;
+#elif defined(OS_ANDROID)
+typedef void* NativeFont;
+typedef void* NativeEditView;
+typedef void* NativeDrawingContext;
+typedef void* NativeViewAccessible;
+#endif
+
+// A constant value to indicate that gfx::NativeCursor refers to no cursor.
+#if defined(USE_AURA)
+const int kNullCursor = 0;
+#else
+const gfx::NativeCursor kNullCursor = static_cast<gfx::NativeCursor>(NULL);
+#endif
+
+#if defined(OS_IOS)
+typedef UIImage NativeImageType;
+#elif defined(OS_MACOSX)
+typedef NSImage NativeImageType;
+#elif defined(TOOLKIT_GTK)
+typedef GdkPixbuf NativeImageType;
+#else
+typedef SkBitmap NativeImageType;
+#endif
+typedef NativeImageType* NativeImage;
+
+// Note: for test_shell we're packing a pointer into the NativeViewId. So, if
+// you make it a type which is smaller than a pointer, you have to fix
+// test_shell.
+//
+// See comment at the top of the file for usage.
+typedef intptr_t NativeViewId;
+
+#if defined(OS_WIN) && !defined(USE_AURA)
+// Convert a NativeViewId to a NativeView.
+//
+// On Windows, we pass an HWND into the renderer. As stated above, the renderer
+// should not be performing operations on the view.
+static inline NativeView NativeViewFromId(NativeViewId id) {
+ return reinterpret_cast<NativeView>(id);
+}
+#define NativeViewFromIdInBrowser(x) NativeViewFromId(x)
+#elif defined(OS_POSIX) || defined(USE_AURA)
+// On Mac, Linux and USE_AURA, a NativeView is a pointer to an object, and is
+// useless outside the process in which it was created. NativeViewFromId should
+// only be used inside the appropriate platform ifdef outside of the browser.
+// (NativeViewFromIdInBrowser can be used everywhere in the browser.) If your
+// cross-platform design involves a call to NativeViewFromId from outside the
+// browser it will never work on Mac or Linux and is fundamentally broken.
+
+// Please do not call this from outside the browser. It won't work; the name
+// should give you a subtle hint.
+static inline NativeView NativeViewFromIdInBrowser(NativeViewId id) {
+ return reinterpret_cast<NativeView>(id);
+}
+#endif // defined(OS_POSIX)
+
+// PluginWindowHandle is an abstraction wrapping "the types of windows
+// used by NPAPI plugins". On Windows it's an HWND, on X it's an X
+// window id.
+#if defined(OS_WIN)
+ typedef HWND PluginWindowHandle;
+ const PluginWindowHandle kNullPluginWindow = NULL;
+#elif defined(USE_X11)
+ typedef unsigned long PluginWindowHandle;
+ const PluginWindowHandle kNullPluginWindow = 0;
+#elif defined(USE_AURA) && defined(OS_MACOSX)
+ // Mac-Aura uses NSView-backed GLSurface. Regular Mac does not.
+ // TODO(dhollowa): Rationalize these two definitions. http://crbug.com/104551.
+ typedef NSView* PluginWindowHandle;
+ const PluginWindowHandle kNullPluginWindow = 0;
+#elif defined(OS_ANDROID)
+ typedef uint64 PluginWindowHandle;
+ const PluginWindowHandle kNullPluginWindow = 0;
+#elif defined(USE_OZONE)
+ typedef intptr_t PluginWindowHandle;
+ const PluginWindowHandle kNullPluginWindow = 0;
+#else
+ // On OS X we don't have windowed plugins.
+ // We use a NULL/0 PluginWindowHandle in shared code to indicate there
+ // is no window present, so mirror that behavior here.
+ //
+ // The GPU plugin is currently an exception to this rule. As of this
+ // writing it uses some NPAPI infrastructure, and minimally we need
+ // to identify the plugin instance via this window handle. When the
+ // GPU plugin becomes a full-on GPU process, this typedef can be
+ // returned to a bool. For now we use a type large enough to hold a
+ // pointer on 64-bit architectures in case we need this capability.
+ typedef uint64 PluginWindowHandle;
+ const PluginWindowHandle kNullPluginWindow = 0;
+#endif
+
+enum SurfaceType {
+ EMPTY,
+ NATIVE_DIRECT,
+ NATIVE_TRANSPORT,
+ TEXTURE_TRANSPORT
+};
+
+struct GLSurfaceHandle {
+ GLSurfaceHandle()
+ : handle(kNullPluginWindow),
+ transport_type(EMPTY),
+ parent_gpu_process_id(0),
+ parent_client_id(0) {
+ }
+ GLSurfaceHandle(PluginWindowHandle handle_, SurfaceType transport_)
+ : handle(handle_),
+ transport_type(transport_),
+ parent_gpu_process_id(0),
+ parent_client_id(0) {
+ DCHECK(!is_null() || handle == kNullPluginWindow);
+ DCHECK(transport_type != TEXTURE_TRANSPORT ||
+ handle == kNullPluginWindow);
+ }
+ bool is_null() const { return transport_type == EMPTY; }
+ bool is_transport() const {
+ return transport_type == NATIVE_TRANSPORT ||
+ transport_type == TEXTURE_TRANSPORT;
+ }
+ PluginWindowHandle handle;
+ SurfaceType transport_type;
+ int parent_gpu_process_id;
+ uint32 parent_client_id;
+};
+
+// AcceleratedWidget provides a surface to compositors to paint pixels.
+#if defined(OS_WIN)
+typedef HWND AcceleratedWidget;
+const AcceleratedWidget kNullAcceleratedWidget = NULL;
+#elif defined(USE_X11)
+typedef unsigned long AcceleratedWidget;
+const AcceleratedWidget kNullAcceleratedWidget = 0;
+#elif defined(OS_IOS)
+typedef UIView* AcceleratedWidget;
+const AcceleratedWidget kNullAcceleratedWidget = 0;
+#elif defined(OS_MACOSX)
+typedef NSView* AcceleratedWidget;
+const AcceleratedWidget kNullAcceleratedWidget = 0;
+#elif defined(OS_ANDROID)
+typedef ANativeWindow* AcceleratedWidget;
+const AcceleratedWidget kNullAcceleratedWidget = 0;
+#elif defined(USE_OZONE)
+typedef intptr_t AcceleratedWidget;
+const AcceleratedWidget kNullAcceleratedWidget = 0;
+#else
+#error unknown platform
+#endif
+
+} // namespace gfx
+
+#endif // UI_GFX_NATIVE_WIDGET_TYPES_H_