| Index: chrome/plugin/webplugin_proxy.cc
|
| ===================================================================
|
| --- chrome/plugin/webplugin_proxy.cc (revision 30214)
|
| +++ chrome/plugin/webplugin_proxy.cc (working copy)
|
| @@ -376,35 +376,36 @@
|
| #if defined(OS_WIN) || defined(OS_LINUX)
|
| windowless_canvas_->save();
|
|
|
| - // The given clip rect is in global coordinates, so install it before the
|
| - // transformation is done for the coordinate system.
|
| + // The given clip rect is relative to the plugin coordinate system.
|
| SkRect sk_rect = { SkIntToScalar(rect.x()),
|
| SkIntToScalar(rect.y()),
|
| SkIntToScalar(rect.right()),
|
| SkIntToScalar(rect.bottom()) };
|
| windowless_canvas_->clipRect(sk_rect);
|
| - windowless_canvas_->translate(SkIntToScalar(-delegate_->GetRect().x()),
|
| - SkIntToScalar(-delegate_->GetRect().y()));
|
|
|
| // Setup the background.
|
| - if (!background_canvas_.get()) {
|
| + if (background_canvas_.get()) {
|
| + // When a background canvas is given, we're in transparent mode. This means
|
| + // the plugin wants to have the image of the page in the canvas it's drawing
|
| + // into (which is windowless_canvas_) so it can do blending. So we copy the
|
| + // background bitmap into the windowless_canvas_.
|
| + const SkBitmap& background_bitmap =
|
| + background_canvas_->getTopPlatformDevice().accessBitmap(false);
|
| + windowless_canvas_->drawBitmap(background_bitmap, 0, 0);
|
| + } else {
|
| + // In non-transparent mode, the plugin doesn't care what's underneath, so we
|
| + // can just give it black.
|
| SkPaint black_fill_paint;
|
| black_fill_paint.setARGB(0xFF, 0x00, 0x00, 0x00);
|
| windowless_canvas_->drawPaint(black_fill_paint);
|
| - } else {
|
| - SkIRect src_rect = { rect.x(), rect.y(),
|
| - rect.x() + offset_rect.width(),
|
| - rect.y() + offset_rect.height() };
|
| -
|
| - SkRect dest_rect = { SkIntToScalar(offset_rect.x()),
|
| - SkIntToScalar(offset_rect.y()),
|
| - SkIntToScalar(offset_rect.right()),
|
| - SkIntToScalar(offset_rect.bottom()) };
|
| - const SkBitmap& background_bitmap =
|
| - background_canvas_->getTopPlatformDevice().accessBitmap(false);
|
| - windowless_canvas_->drawBitmapRect(background_bitmap, &src_rect, dest_rect);
|
| }
|
|
|
| + // Bring the windowless_canvas_ into the window coordinate system, which is
|
| + // how the plugin expects to draw (since the windowless API was originally
|
| + // designed just for scribbling over the web page).
|
| + windowless_canvas_->translate(SkIntToScalar(-delegate_->GetRect().x()),
|
| + SkIntToScalar(-delegate_->GetRect().y()));
|
| +
|
| // Before we send the invalidate, paint so that renderer uses the updated
|
| // bitmap.
|
| delegate_->Paint(windowless_canvas_.get(), offset_rect);
|
|
|