| Index: chrome/browser/renderer_host/render_widget_host_view_gtk.cc
|
| diff --git a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
|
| index 9950a58e59204f6da52c7307232f5e2dcb4b052b..56a3d35955534b5a5c51d6a181719dcf4956f790 100644
|
| --- a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
|
| +++ b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc
|
| @@ -10,6 +10,7 @@
|
|
|
| #include "base/logging.h"
|
| #include "base/string_util.h"
|
| +#include "chrome/common/x11_util.h"
|
| #include "chrome/browser/renderer_host/backing_store.h"
|
| #include "chrome/browser/renderer_host/render_widget_host.h"
|
| #include "skia/ext/bitmap_platform_device_linux.h"
|
| @@ -24,6 +25,7 @@ class RenderWidgetHostViewGtkWidget {
|
| public:
|
| static GtkWidget* CreateNewWidget(RenderWidgetHostViewGtk* host_view) {
|
| GtkWidget* widget = gtk_drawing_area_new();
|
| + gtk_widget_set_double_buffered(widget, FALSE);
|
|
|
| gtk_widget_add_events(widget, GDK_EXPOSURE_MASK |
|
| GDK_POINTER_MOTION_MASK |
|
| @@ -274,34 +276,28 @@ void RenderWidgetHostViewGtk::SetTooltipText(const std::wstring& tooltip_text) {
|
| }
|
| }
|
|
|
| +BackingStore* RenderWidgetHostViewGtk::AllocBackingStore(
|
| + const gfx::Size& size) {
|
| + Display* display = x11_util::GetXDisplay();
|
| + void* visual = x11_util::GetVisualFromGtkWidget(view_);
|
| + XID parent_window = x11_util::GetX11WindowFromGtkWidget(view_);
|
| + bool use_shared_memory = x11_util::QuerySharedMemorySupport(display);
|
| + int depth = gtk_widget_get_visual(view_)->depth;
|
| +
|
| + return new BackingStore(size, display, depth, visual, parent_window,
|
| + use_shared_memory);
|
| +}
|
| +
|
| void RenderWidgetHostViewGtk::Paint(const gfx::Rect& damage_rect) {
|
| BackingStore* backing_store = host_->GetBackingStore();
|
|
|
| if (backing_store) {
|
| - GdkRectangle grect = {
|
| - damage_rect.x(),
|
| - damage_rect.y(),
|
| - damage_rect.width(),
|
| - damage_rect.height()
|
| - };
|
| -
|
| // Only render the widget if it is attached to a window; there's a short
|
| // period where this object isn't attached to a window but hasn't been
|
| // Destroy()ed yet and it receives paint messages...
|
| GdkWindow* window = view_->window;
|
| - if (window) {
|
| - gdk_window_begin_paint_rect(window, &grect);
|
| -
|
| - skia::PlatformDeviceLinux &platdev =
|
| - backing_store->canvas()->getTopPlatformDevice();
|
| - skia::BitmapPlatformDeviceLinux* const bitdev =
|
| - static_cast<skia::BitmapPlatformDeviceLinux* >(&platdev);
|
| - cairo_t* cairo_drawable = gdk_cairo_create(window);
|
| - cairo_set_source_surface(cairo_drawable, bitdev->surface(), 0, 0);
|
| - cairo_paint(cairo_drawable);
|
| - cairo_destroy(cairo_drawable);
|
| - gdk_window_end_paint(window);
|
| - }
|
| + if (window)
|
| + backing_store->ShowRect(damage_rect);
|
|
|
| } else {
|
| NOTIMPLEMENTED();
|
|
|