Index: chrome/browser/renderer_host/backing_store_x.cc |
=================================================================== |
--- chrome/browser/renderer_host/backing_store_x.cc (revision 20318) |
+++ chrome/browser/renderer_host/backing_store_x.cc (working copy) |
@@ -7,6 +7,10 @@ |
#include <stdlib.h> |
#include <sys/ipc.h> |
#include <sys/shm.h> |
+#if defined(TOOLKIT_GTK) |
+#include <cairo-xlib.h> |
+#include <gtk/gtk.h> |
+#endif |
#include <algorithm> |
#include <utility> |
@@ -336,6 +340,31 @@ |
rect.x(), rect.y()); |
} |
+#if defined(TOOLKIT_GTK) |
+void BackingStore::PaintToRect(const gfx::Rect& rect, GdkDrawable* target) { |
+ cairo_surface_t* surface = cairo_xlib_surface_create( |
+ display_, pixmap_, static_cast<Visual*>(visual_), |
+ size_.width(), size_.height()); |
+ cairo_t* cr = gdk_cairo_create(target); |
+ |
+ cairo_translate(cr, rect.x(), rect.y()); |
+ double x_scale = static_cast<double>(rect.width()) / size_.width(); |
+ double y_scale = static_cast<double>(rect.height()) / size_.height(); |
+ cairo_scale(cr, x_scale, y_scale); |
+ |
+ cairo_pattern_t* pattern = cairo_pattern_create_for_surface(surface); |
+ cairo_pattern_set_filter(pattern, CAIRO_FILTER_BEST); |
+ cairo_set_source(cr, pattern); |
+ cairo_pattern_destroy(pattern); |
+ |
+ cairo_identity_matrix(cr); |
+ |
+ cairo_rectangle(cr, rect.x(), rect.y(), rect.width(), rect.height()); |
+ cairo_fill(cr); |
+ cairo_destroy(cr); |
+} |
+#endif |
+ |
SkBitmap BackingStore::PaintRectToBitmap(const gfx::Rect& rect) { |
base::TimeTicks begin_time = base::TimeTicks::Now(); |
const int width = std::min(size_.width(), rect.width()); |