Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(186)

Unified Diff: chrome/browser/renderer_host/render_widget_host_view_gtk.cc

Issue 20230: Do some more work on RenderWidgetHostViewGtk... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/renderer_host/render_widget_host_view_gtk.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/renderer_host/render_widget_host_view_gtk.cc
===================================================================
--- chrome/browser/renderer_host/render_widget_host_view_gtk.cc (revision 9480)
+++ chrome/browser/renderer_host/render_widget_host_view_gtk.cc (working copy)
@@ -13,97 +13,112 @@
#include "chrome/browser/renderer_host/render_widget_host.h"
#include "skia/ext/bitmap_platform_device_linux.h"
#include "skia/ext/platform_device_linux.h"
+#include "webkit/glue/webinputevent.h"
namespace {
-// -----------------------------------------------------------------------------
-// Callback functions to proxy to RenderWidgetHostViewGtk...
+// This class is a simple convenience wrapper for Gtk functions. It has only
+// static methods.
+class RenderWidgetHostViewGtkWidget {
+ public:
+ static GtkWidget* CreateNewWidget(RenderWidgetHostViewGtk* host_view) {
+ GtkWidget* widget = gtk_drawing_area_new();
-gboolean ConfigureEvent(GtkWidget* widget, GdkEventConfigure* config,
- RenderWidgetHostViewGtk* host) {
- NOTIMPLEMENTED();
- return FALSE;
-}
+ gtk_widget_add_events(widget, GDK_EXPOSURE_MASK |
+ GDK_POINTER_MOTION_MASK |
+ GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_KEY_PRESS_MASK |
+ GDK_KEY_RELEASE_MASK);
+ GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS);
-gboolean ExposeEvent(GtkWidget* widget, GdkEventExpose* expose,
- RenderWidgetHostViewGtk* host) {
- const gfx::Rect damage_rect(expose->area);
- host->Paint(damage_rect);
- return FALSE;
-}
+ g_signal_connect(widget, "configure-event",
+ G_CALLBACK(ConfigureEvent), host_view);
+ g_signal_connect(widget, "expose-event",
+ G_CALLBACK(ExposeEvent), host_view);
+ g_signal_connect(widget, "key-press-event",
+ G_CALLBACK(KeyPressReleaseEvent), host_view);
+ g_signal_connect(widget, "key-release-event",
+ G_CALLBACK(KeyPressReleaseEvent), host_view);
+ g_signal_connect(widget, "focus-in-event",
+ G_CALLBACK(FocusIn), host_view);
+ g_signal_connect(widget, "focus-out-event",
+ G_CALLBACK(FocusOut), host_view);
+ g_signal_connect(widget, "button-press-event",
+ G_CALLBACK(ButtonPressReleaseEvent), host_view);
+ g_signal_connect(widget, "button-release-event",
+ G_CALLBACK(ButtonPressReleaseEvent), host_view);
+ g_signal_connect(widget, "motion-notify-event",
+ G_CALLBACK(MouseMoveEvent), host_view);
+ g_signal_connect(widget, "scroll-event",
+ G_CALLBACK(MouseScrollEvent), host_view);
-gboolean KeyPressReleaseEvent(GtkWidget* widget, GdkEventKey* event,
- RenderWidgetHostViewGtk* host) {
- NOTIMPLEMENTED();
- return FALSE;
-}
+ return widget;
+ }
-gboolean FocusIn(GtkWidget* widget, GdkEventFocus* focus,
- RenderWidgetHostViewGtk* host) {
- NOTIMPLEMENTED();
- return FALSE;
-}
+ private:
+ static gboolean ConfigureEvent(GtkWidget* widget, GdkEventConfigure* config,
+ RenderWidgetHostViewGtk* host_view) {
+ host_view->GetRenderWidgetHost()->WasResized();
+ return FALSE;
+ }
-gboolean FocusOut(GtkWidget* widget, GdkEventFocus* focus,
- RenderWidgetHostViewGtk* host) {
- NOTIMPLEMENTED();
- return FALSE;
-}
+ static gboolean ExposeEvent(GtkWidget* widget, GdkEventExpose* expose,
+ RenderWidgetHostViewGtk* host_view) {
+ const gfx::Rect damage_rect(expose->area);
+ host_view->Paint(damage_rect);
+ return FALSE;
+ }
-gboolean ButtonPressReleaseEvent(GtkWidget* widget, GdkEventButton* event,
- RenderWidgetHostViewGtk* host) {
- NOTIMPLEMENTED();
- return FALSE;
-}
+ static gboolean KeyPressReleaseEvent(GtkWidget* widget, GdkEventKey* event,
+ RenderWidgetHostViewGtk* host_view) {
+ return FALSE;
+ }
-gboolean MouseMoveEvent(GtkWidget* widget, GdkEventMotion* event,
- RenderWidgetHostViewGtk* host) {
- return FALSE;
-}
+ static gboolean FocusIn(GtkWidget* widget, GdkEventFocus* focus,
+ RenderWidgetHostViewGtk* host_view) {
+ NOTIMPLEMENTED();
+ return FALSE;
+ }
-gboolean MouseScrollEvent(GtkWidget* widget, GdkEventScroll* event,
- RenderWidgetHostViewGtk* host) {
- NOTIMPLEMENTED();
- return FALSE;
-}
+ static gboolean FocusOut(GtkWidget* widget, GdkEventFocus* focus,
+ RenderWidgetHostViewGtk* host_view) {
+ NOTIMPLEMENTED();
+ return FALSE;
+ }
-} // anonymous namespace
+ static gboolean ButtonPressReleaseEvent(
+ GtkWidget* widget, GdkEventButton* event,
+ RenderWidgetHostViewGtk* host_view) {
+ WebMouseEvent wme(event);
+ host_view->GetRenderWidgetHost()->ForwardMouseEvent(wme);
+ return FALSE;
+ }
+ static gboolean MouseMoveEvent(GtkWidget* widget, GdkEventMotion* event,
+ RenderWidgetHostViewGtk* host_view) {
+ return FALSE;
+ }
+
+ static gboolean MouseScrollEvent(GtkWidget* widget, GdkEventScroll* event,
+ RenderWidgetHostViewGtk* host_view) {
+ NOTIMPLEMENTED();
+ return FALSE;
+ }
+};
+
+} // namespace
+
// static
RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget(
RenderWidgetHost* widget) {
return new RenderWidgetHostViewGtk(widget);
}
-RenderWidgetHostViewGtk::RenderWidgetHostViewGtk(RenderWidgetHost* widget)
- : widget_(widget) {
- widget_->set_view(this);
-
- view_ = gtk_drawing_area_new();
-
- gtk_widget_add_events(view_, GDK_EXPOSURE_MASK |
- GDK_POINTER_MOTION_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_KEY_PRESS_MASK |
- GDK_KEY_RELEASE_MASK);
- GTK_WIDGET_SET_FLAGS(view_, GTK_CAN_FOCUS);
- g_signal_connect(view_, "configure-event", G_CALLBACK(ConfigureEvent), this);
- g_signal_connect(view_, "expose-event", G_CALLBACK(ExposeEvent), this);
- g_signal_connect(view_, "key-press-event", G_CALLBACK(KeyPressReleaseEvent),
- this);
- g_signal_connect(view_, "key-release-event",
- G_CALLBACK(KeyPressReleaseEvent), this);
- g_signal_connect(view_, "focus-in-event", G_CALLBACK(FocusIn), this);
- g_signal_connect(view_, "focus-out-event", G_CALLBACK(FocusOut), this);
- g_signal_connect(view_, "button-press-event",
- G_CALLBACK(ButtonPressReleaseEvent), this);
- g_signal_connect(view_, "button-release-event",
- G_CALLBACK(ButtonPressReleaseEvent), this);
- g_signal_connect(view_, "motion-notify-event", G_CALLBACK(MouseMoveEvent),
- this);
- g_signal_connect(view_, "scroll-event", G_CALLBACK(MouseScrollEvent),
- this);
+RenderWidgetHostViewGtk::RenderWidgetHostViewGtk(RenderWidgetHost* widget_host)
+ : host_(widget_host) {
+ host_->set_view(this);
+ view_ = RenderWidgetHostViewGtkWidget::CreateNewWidget(this);
}
RenderWidgetHostViewGtk::~RenderWidgetHostViewGtk() {
@@ -200,7 +215,7 @@
}
void RenderWidgetHostViewGtk::Paint(const gfx::Rect& damage_rect) {
- BackingStore* backing_store = widget_->GetBackingStore();
+ BackingStore* backing_store = host_->GetBackingStore();
if (backing_store) {
GdkRectangle grect = {
« no previous file with comments | « chrome/browser/renderer_host/render_widget_host_view_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698