cef/libcef/webwidget_host.h
Marshall Greenblatt e75e27e32c libcef: Update due to underlying chromium changes & bug fixes.
- Add v8_snapshot_cc project dependency (Issue # 11, fix by: vridosh)
- Fix possible crash on exit in browser_resource_loader_bridge.cc (Issue # 12, fix by: vridosh).
- localized_strings project renamed to webkit_strings.
- GetBitmapResource() in browser_webkit_glue.cc now returns GlueBitmap* instead of GlueBitmap.
- GetLocalizedString() in browser_webkit_glue_win.cc now returns string16 instead of std::wstring.
- Add BrowserWebViewDelegate::SetStatusbarText() method.
- Move BrowserWebViewDelegate::DidMove() from browser_webview_delegate.cc to browser_webview_delegate_win.cc.
- Move FromWindow() predefine in webwidget_host out of the header file.

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@15 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
2009-02-12 16:25:52 +00:00

121 lines
3.7 KiB
C++

// Copyright (c) 2006-2008 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 _WEBWIDGET_HOST_H
#define _WEBWIDGET_HOST_H
#include "base/basictypes.h"
#include "base/gfx/native_widget_types.h"
#include "base/gfx/platform_canvas.h"
#include "base/gfx/rect.h"
#include "base/scoped_ptr.h"
class WebWidget;
class WebWidgetDelegate;
namespace gfx {
class Size;
}
// This class is a simple ViewHandle-based host for a WebWidget
class WebWidgetHost {
public:
// The new instance is deleted once the associated ViewHandle is destroyed.
// The newly created window should be resized after it is created, using the
// MoveWindow (or equivalent) function.
static WebWidgetHost* Create(gfx::NativeView parent_view,
WebWidgetDelegate* delegate);
#if defined(OS_MACOSX)
static void HandleEvent(gfx::NativeView view, NSEvent *event);
#endif
gfx::NativeView window_handle() const { return view_; }
WebWidget* webwidget() const { return webwidget_; }
void DidInvalidateRect(const gfx::Rect& rect);
void DidScrollRect(int dx, int dy, const gfx::Rect& clip_rect);
#if defined(OS_WIN)
void SetCursor(HCURSOR cursor);
#endif
void DiscardBackingStore();
// Allow clients to update the paint rect. For example, if we get a gdk
// expose or WM_PAINT event, we need to update the paint rect.
void UpdatePaintRect(const gfx::Rect& rect);
void Paint();
protected:
WebWidgetHost();
~WebWidgetHost();
#if defined(OS_WIN)
// Per-class wndproc. Returns true if the event should be swallowed.
virtual bool WndProc(UINT message, WPARAM wparam, LPARAM lparam);
void Resize(LPARAM lparam);
void MouseEvent(UINT message, WPARAM wparam, LPARAM lparam);
void WheelEvent(WPARAM wparam, LPARAM lparam);
void KeyEvent(UINT message, WPARAM wparam, LPARAM lparam);
void CaptureLostEvent();
void SetFocus(bool enable);
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
#elif defined(OS_MACOSX)
// These need to be called from a non-subclass, so they need to be public.
public:
void Resize(const gfx::Rect& rect);
void MouseEvent(NSEvent *);
void WheelEvent(NSEvent *);
void KeyEvent(NSEvent *);
void SetFocus(bool enable);
protected:
#elif defined(OS_LINUX)
public:
// ---------------------------------------------------------------------------
// This is needed on Linux because the GtkWidget creation is the same between
// both web view hosts and web widget hosts. The Windows code manages this by
// reusing the WndProc function (static, above). However, GTK doesn't use a
// single big callback function like that so we have a static function that
// sets up a GtkWidget correctly.
// parent: a GtkBox to pack the new widget at the end of
// host: a pointer to a WebWidgetHost (or subclass thereof)
// ---------------------------------------------------------------------------
static gfx::NativeView CreateWindow(gfx::NativeView parent_view,
WebWidgetHost* host);
void WindowDestroyed();
void Resize(const gfx::Size& size);
#endif
void TrackMouseLeave(bool enable);
void ResetScrollRect();
void PaintRect(const gfx::Rect& rect);
void set_painting(bool value) {
#ifndef NDEBUG
painting_ = value;
#endif
}
gfx::NativeView view_;
WebWidget* webwidget_;
scoped_ptr<skia::PlatformCanvas> canvas_;
// specifies the portion of the webwidget that needs painting
gfx::Rect paint_rect_;
// specifies the portion of the webwidget that needs scrolling
gfx::Rect scroll_rect_;
int scroll_dx_;
int scroll_dy_;
bool track_mouse_leave_;
#ifndef NDEBUG
bool painting_;
#endif
};
#endif // _WEBWIDGET_HOST_H