| Index: webkit/glue/plugins/webplugin_delegate_impl_gtk.cc
|
| diff --git a/webkit/glue/plugins/webplugin_delegate_impl_gtk.cc b/webkit/glue/plugins/webplugin_delegate_impl_gtk.cc
|
| index 5afa911054df70fda6f784ac64ddda9fd6a62a6b..265551a5aae1683c136b7ec84b291f1d51fce33f 100644
|
| --- a/webkit/glue/plugins/webplugin_delegate_impl_gtk.cc
|
| +++ b/webkit/glue/plugins/webplugin_delegate_impl_gtk.cc
|
| @@ -374,7 +374,8 @@ void WebPluginDelegateImpl::EnsurePixmapAtLeastSize(int width, int height) {
|
| // |sys_visual| is owned by gdk; we shouldn't free it.
|
| GdkVisual* sys_visual = gdk_visual_get_system();
|
| pixmap_ = gdk_pixmap_new(NULL, // use width/height/depth params
|
| - width, height, sys_visual->depth);
|
| + std::max(1, width), std::max(1, height),
|
| + sys_visual->depth);
|
| GdkColormap* colormap = gdk_colormap_new(gdk_visual_get_system(),
|
| FALSE);
|
| gdk_drawable_set_colormap(GDK_DRAWABLE(pixmap_), colormap);
|
| @@ -383,17 +384,15 @@ void WebPluginDelegateImpl::EnsurePixmapAtLeastSize(int width, int height) {
|
| #ifdef DEBUG_RECTANGLES
|
| namespace {
|
|
|
| -// Draw a rectangle on a Cairo surface.
|
| +// Draw a rectangle on a Cairo context.
|
| // Useful for debugging various rectangles involved in drawing plugins.
|
| -void DrawDebugRectangle(cairo_surface_t* surface,
|
| +void DrawDebugRectangle(cairo_t* cairo,
|
| const gfx::Rect& rect,
|
| float r, float g, float b) {
|
| - cairo_t* cairo = cairo_create(surface);
|
| cairo_set_source_rgba(cairo, r, g, b, 0.5);
|
| cairo_rectangle(cairo, rect.x(), rect.y(),
|
| rect.width(), rect.height());
|
| cairo_stroke(cairo);
|
| - cairo_destroy(cairo);
|
| }
|
|
|
| } // namespace
|
| @@ -526,8 +525,11 @@ void WebPluginDelegateImpl::WindowlessPaint(cairo_t* context,
|
| // Copy the current image into the pixmap, so the plugin can draw over
|
| // this background.
|
| cairo_t* cairo = gdk_cairo_create(pixmap_);
|
| + double surface_x = -offset_x;
|
| + double surface_y = -offset_y;
|
| + cairo_user_to_device(context, &surface_x, &surface_y);
|
| cairo_set_source_surface(cairo, cairo_get_target(context),
|
| - offset_x, offset_y);
|
| + -surface_x, -surface_y);
|
| cairo_rectangle(cairo, draw_rect.x() + offset_x, draw_rect.y() + offset_y,
|
| draw_rect.width(), draw_rect.height());
|
| cairo_clip(cairo);
|
| @@ -551,6 +553,7 @@ void WebPluginDelegateImpl::WindowlessPaint(cairo_t* context,
|
| NPError err = instance()->NPP_HandleEvent(&np_event);
|
| DCHECK_EQ(err, NPERR_NO_ERROR);
|
|
|
| + cairo_save(context);
|
| // Now copy the rendered image pixmap back into the drawing buffer.
|
| gdk_cairo_set_source_pixmap(context, pixmap_, -offset_x, -offset_y);
|
| cairo_rectangle(context, draw_rect.x(), draw_rect.y(),
|
| @@ -565,6 +568,7 @@ void WebPluginDelegateImpl::WindowlessPaint(cairo_t* context,
|
| // Drawing rect = red.
|
| DrawDebugRectangle(context, draw_rect, 1, 0, 0);
|
| #endif
|
| + cairo_restore(context);
|
| }
|
|
|
| void WebPluginDelegateImpl::WindowlessSetWindow(bool force_set_window) {
|
|
|