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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/renderer_host/render_widget_host_view_gtk.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/renderer_host/render_widget_host_view_gtk.h" 5 #include "chrome/browser/renderer_host/render_widget_host_view_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 #include <gdk/gdk.h> 8 #include <gdk/gdk.h>
9 #include <cairo/cairo.h> 9 #include <cairo/cairo.h>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "chrome/browser/renderer_host/backing_store.h" 12 #include "chrome/browser/renderer_host/backing_store.h"
13 #include "chrome/browser/renderer_host/render_widget_host.h" 13 #include "chrome/browser/renderer_host/render_widget_host.h"
14 #include "skia/ext/bitmap_platform_device_linux.h" 14 #include "skia/ext/bitmap_platform_device_linux.h"
15 #include "skia/ext/platform_device_linux.h" 15 #include "skia/ext/platform_device_linux.h"
16 #include "webkit/glue/webinputevent.h"
16 17
17 namespace { 18 namespace {
18 19
19 // ----------------------------------------------------------------------------- 20 // This class is a simple convenience wrapper for Gtk functions. It has only
20 // Callback functions to proxy to RenderWidgetHostViewGtk... 21 // static methods.
22 class RenderWidgetHostViewGtkWidget {
23 public:
24 static GtkWidget* CreateNewWidget(RenderWidgetHostViewGtk* host_view) {
25 GtkWidget* widget = gtk_drawing_area_new();
21 26
22 gboolean ConfigureEvent(GtkWidget* widget, GdkEventConfigure* config, 27 gtk_widget_add_events(widget, GDK_EXPOSURE_MASK |
23 RenderWidgetHostViewGtk* host) { 28 GDK_POINTER_MOTION_MASK |
24 NOTIMPLEMENTED(); 29 GDK_BUTTON_PRESS_MASK |
25 return FALSE; 30 GDK_BUTTON_RELEASE_MASK |
26 } 31 GDK_KEY_PRESS_MASK |
32 GDK_KEY_RELEASE_MASK);
33 GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS);
27 34
28 gboolean ExposeEvent(GtkWidget* widget, GdkEventExpose* expose, 35 g_signal_connect(widget, "configure-event",
29 RenderWidgetHostViewGtk* host) { 36 G_CALLBACK(ConfigureEvent), host_view);
30 const gfx::Rect damage_rect(expose->area); 37 g_signal_connect(widget, "expose-event",
31 host->Paint(damage_rect); 38 G_CALLBACK(ExposeEvent), host_view);
32 return FALSE; 39 g_signal_connect(widget, "key-press-event",
33 } 40 G_CALLBACK(KeyPressReleaseEvent), host_view);
41 g_signal_connect(widget, "key-release-event",
42 G_CALLBACK(KeyPressReleaseEvent), host_view);
43 g_signal_connect(widget, "focus-in-event",
44 G_CALLBACK(FocusIn), host_view);
45 g_signal_connect(widget, "focus-out-event",
46 G_CALLBACK(FocusOut), host_view);
47 g_signal_connect(widget, "button-press-event",
48 G_CALLBACK(ButtonPressReleaseEvent), host_view);
49 g_signal_connect(widget, "button-release-event",
50 G_CALLBACK(ButtonPressReleaseEvent), host_view);
51 g_signal_connect(widget, "motion-notify-event",
52 G_CALLBACK(MouseMoveEvent), host_view);
53 g_signal_connect(widget, "scroll-event",
54 G_CALLBACK(MouseScrollEvent), host_view);
34 55
35 gboolean KeyPressReleaseEvent(GtkWidget* widget, GdkEventKey* event, 56 return widget;
36 RenderWidgetHostViewGtk* host) { 57 }
37 NOTIMPLEMENTED();
38 return FALSE;
39 }
40 58
41 gboolean FocusIn(GtkWidget* widget, GdkEventFocus* focus, 59 private:
42 RenderWidgetHostViewGtk* host) { 60 static gboolean ConfigureEvent(GtkWidget* widget, GdkEventConfigure* config,
43 NOTIMPLEMENTED(); 61 RenderWidgetHostViewGtk* host_view) {
44 return FALSE; 62 host_view->GetRenderWidgetHost()->WasResized();
45 } 63 return FALSE;
64 }
46 65
47 gboolean FocusOut(GtkWidget* widget, GdkEventFocus* focus, 66 static gboolean ExposeEvent(GtkWidget* widget, GdkEventExpose* expose,
48 RenderWidgetHostViewGtk* host) { 67 RenderWidgetHostViewGtk* host_view) {
49 NOTIMPLEMENTED(); 68 const gfx::Rect damage_rect(expose->area);
50 return FALSE; 69 host_view->Paint(damage_rect);
51 } 70 return FALSE;
71 }
52 72
53 gboolean ButtonPressReleaseEvent(GtkWidget* widget, GdkEventButton* event, 73 static gboolean KeyPressReleaseEvent(GtkWidget* widget, GdkEventKey* event,
54 RenderWidgetHostViewGtk* host) { 74 RenderWidgetHostViewGtk* host_view) {
55 NOTIMPLEMENTED(); 75 return FALSE;
56 return FALSE; 76 }
57 }
58 77
59 gboolean MouseMoveEvent(GtkWidget* widget, GdkEventMotion* event, 78 static gboolean FocusIn(GtkWidget* widget, GdkEventFocus* focus,
60 RenderWidgetHostViewGtk* host) { 79 RenderWidgetHostViewGtk* host_view) {
61 return FALSE; 80 NOTIMPLEMENTED();
62 } 81 return FALSE;
82 }
63 83
64 gboolean MouseScrollEvent(GtkWidget* widget, GdkEventScroll* event, 84 static gboolean FocusOut(GtkWidget* widget, GdkEventFocus* focus,
65 RenderWidgetHostViewGtk* host) { 85 RenderWidgetHostViewGtk* host_view) {
66 NOTIMPLEMENTED(); 86 NOTIMPLEMENTED();
67 return FALSE; 87 return FALSE;
68 } 88 }
69 89
70 } // anonymous namespace 90 static gboolean ButtonPressReleaseEvent(
91 GtkWidget* widget, GdkEventButton* event,
92 RenderWidgetHostViewGtk* host_view) {
93 WebMouseEvent wme(event);
94 host_view->GetRenderWidgetHost()->ForwardMouseEvent(wme);
95 return FALSE;
96 }
97
98 static gboolean MouseMoveEvent(GtkWidget* widget, GdkEventMotion* event,
99 RenderWidgetHostViewGtk* host_view) {
100 return FALSE;
101 }
102
103 static gboolean MouseScrollEvent(GtkWidget* widget, GdkEventScroll* event,
104 RenderWidgetHostViewGtk* host_view) {
105 NOTIMPLEMENTED();
106 return FALSE;
107 }
108 };
109
110 } // namespace
71 111
72 // static 112 // static
73 RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget( 113 RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget(
74 RenderWidgetHost* widget) { 114 RenderWidgetHost* widget) {
75 return new RenderWidgetHostViewGtk(widget); 115 return new RenderWidgetHostViewGtk(widget);
76 } 116 }
77 117
78 RenderWidgetHostViewGtk::RenderWidgetHostViewGtk(RenderWidgetHost* widget) 118 RenderWidgetHostViewGtk::RenderWidgetHostViewGtk(RenderWidgetHost* widget_host)
79 : widget_(widget) { 119 : host_(widget_host) {
80 widget_->set_view(this); 120 host_->set_view(this);
81 121 view_ = RenderWidgetHostViewGtkWidget::CreateNewWidget(this);
82 view_ = gtk_drawing_area_new();
83
84 gtk_widget_add_events(view_, GDK_EXPOSURE_MASK |
85 GDK_POINTER_MOTION_MASK |
86 GDK_BUTTON_PRESS_MASK |
87 GDK_BUTTON_RELEASE_MASK |
88 GDK_KEY_PRESS_MASK |
89 GDK_KEY_RELEASE_MASK);
90 GTK_WIDGET_SET_FLAGS(view_, GTK_CAN_FOCUS);
91 g_signal_connect(view_, "configure-event", G_CALLBACK(ConfigureEvent), this);
92 g_signal_connect(view_, "expose-event", G_CALLBACK(ExposeEvent), this);
93 g_signal_connect(view_, "key-press-event", G_CALLBACK(KeyPressReleaseEvent),
94 this);
95 g_signal_connect(view_, "key-release-event",
96 G_CALLBACK(KeyPressReleaseEvent), this);
97 g_signal_connect(view_, "focus-in-event", G_CALLBACK(FocusIn), this);
98 g_signal_connect(view_, "focus-out-event", G_CALLBACK(FocusOut), this);
99 g_signal_connect(view_, "button-press-event",
100 G_CALLBACK(ButtonPressReleaseEvent), this);
101 g_signal_connect(view_, "button-release-event",
102 G_CALLBACK(ButtonPressReleaseEvent), this);
103 g_signal_connect(view_, "motion-notify-event", G_CALLBACK(MouseMoveEvent),
104 this);
105 g_signal_connect(view_, "scroll-event", G_CALLBACK(MouseScrollEvent),
106 this);
107 } 122 }
108 123
109 RenderWidgetHostViewGtk::~RenderWidgetHostViewGtk() { 124 RenderWidgetHostViewGtk::~RenderWidgetHostViewGtk() {
110 gtk_widget_destroy(view_); 125 gtk_widget_destroy(view_);
111 } 126 }
112 127
113 void RenderWidgetHostViewGtk::DidBecomeSelected() { 128 void RenderWidgetHostViewGtk::DidBecomeSelected() {
114 NOTIMPLEMENTED(); 129 NOTIMPLEMENTED();
115 } 130 }
116 131
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 208
194 void RenderWidgetHostViewGtk::Destroy() { 209 void RenderWidgetHostViewGtk::Destroy() {
195 NOTIMPLEMENTED(); 210 NOTIMPLEMENTED();
196 } 211 }
197 212
198 void RenderWidgetHostViewGtk::SetTooltipText(const std::wstring& tooltip_text) { 213 void RenderWidgetHostViewGtk::SetTooltipText(const std::wstring& tooltip_text) {
199 NOTIMPLEMENTED(); 214 NOTIMPLEMENTED();
200 } 215 }
201 216
202 void RenderWidgetHostViewGtk::Paint(const gfx::Rect& damage_rect) { 217 void RenderWidgetHostViewGtk::Paint(const gfx::Rect& damage_rect) {
203 BackingStore* backing_store = widget_->GetBackingStore(); 218 BackingStore* backing_store = host_->GetBackingStore();
204 219
205 if (backing_store) { 220 if (backing_store) {
206 GdkRectangle grect = { 221 GdkRectangle grect = {
207 damage_rect.x(), 222 damage_rect.x(),
208 damage_rect.y(), 223 damage_rect.y(),
209 damage_rect.width(), 224 damage_rect.width(),
210 damage_rect.height() 225 damage_rect.height()
211 }; 226 };
212 GdkWindow* window = view_->window; 227 GdkWindow* window = view_->window;
213 gdk_window_begin_paint_rect(window, &grect); 228 gdk_window_begin_paint_rect(window, &grect);
214 229
215 skia::PlatformDeviceLinux &platdev = 230 skia::PlatformDeviceLinux &platdev =
216 backing_store->canvas()->getTopPlatformDevice(); 231 backing_store->canvas()->getTopPlatformDevice();
217 skia::BitmapPlatformDeviceLinux* const bitdev = 232 skia::BitmapPlatformDeviceLinux* const bitdev =
218 static_cast<skia::BitmapPlatformDeviceLinux* >(&platdev); 233 static_cast<skia::BitmapPlatformDeviceLinux* >(&platdev);
219 cairo_t* cairo_drawable = gdk_cairo_create(window); 234 cairo_t* cairo_drawable = gdk_cairo_create(window);
220 cairo_set_source_surface(cairo_drawable, bitdev->surface(), 0, 0); 235 cairo_set_source_surface(cairo_drawable, bitdev->surface(), 0, 0);
221 cairo_paint(cairo_drawable); 236 cairo_paint(cairo_drawable);
222 cairo_destroy(cairo_drawable); 237 cairo_destroy(cairo_drawable);
223 238
224 gdk_window_end_paint(window); 239 gdk_window_end_paint(window);
225 } else { 240 } else {
226 NOTIMPLEMENTED(); 241 NOTIMPLEMENTED();
227 } 242 }
228 } 243 }
229 244
OLDNEW
« 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