| Index: chrome/renderer/webplugin_delegate_proxy.cc
|
| diff --git a/chrome/renderer/webplugin_delegate_proxy.cc b/chrome/renderer/webplugin_delegate_proxy.cc
|
| index 233749b9898280c9b461be171fbc03441e7ec206..639be4b318ebf8ace5de94d7af177024849043f3 100644
|
| --- a/chrome/renderer/webplugin_delegate_proxy.cc
|
| +++ b/chrome/renderer/webplugin_delegate_proxy.cc
|
| @@ -17,6 +17,7 @@
|
| #include "base/logging.h"
|
| #include "base/ref_counted.h"
|
| #include "base/string_util.h"
|
| +#include "base/gfx/blit.h"
|
| #include "base/gfx/size.h"
|
| #include "base/gfx/native_widget_types.h"
|
| #include "chrome/common/child_process_logging.h"
|
| @@ -523,34 +524,8 @@ void WebPluginDelegateProxy::Paint(gfx::NativeDrawingContext context,
|
| bool background_changed = false;
|
| if (background_store_canvas_.get() && BackgroundChanged(context, rect)) {
|
| background_changed = true;
|
| -#if defined(OS_WIN)
|
| - HDC background_hdc =
|
| - background_store_canvas_->getTopPlatformDevice().getBitmapDC();
|
| - BitBlt(background_hdc, offset_rect.x(), offset_rect.y(),
|
| - rect.width(), rect.height(), context, rect.x(), rect.y(), SRCCOPY);
|
| -#elif defined(OS_MACOSX)
|
| - CGContextRef background_context =
|
| - background_store_canvas_->getTopPlatformDevice().GetBitmapContext();
|
| - scoped_cftyperef<CGImageRef>
|
| - background_image(CGBitmapContextCreateImage(background_context));
|
| - scoped_cftyperef<CGImageRef> sub_image(
|
| - CGImageCreateWithImageInRect(background_image, offset_rect.ToCGRect()));
|
| - CGContextDrawImage(context, rect.ToCGRect(), sub_image);
|
| -#else
|
| - cairo_t *cairo =
|
| - background_store_canvas_->getTopPlatformDevice().beginPlatformPaint();
|
| - cairo_save(cairo);
|
| - double surface_x = plugin_rect_.x();
|
| - double surface_y = plugin_rect_.y();
|
| - cairo_user_to_device(context, &surface_x, &surface_y);
|
| - cairo_set_source_surface(cairo, cairo_get_target(context),
|
| - -surface_x, -surface_y);
|
| - cairo_rectangle(cairo, offset_rect.x(), offset_rect.y(),
|
| - offset_rect.width(), offset_rect.height());
|
| - cairo_clip(cairo);
|
| - cairo_paint(cairo);
|
| - cairo_restore(cairo);
|
| -#endif
|
| + BlitContextToCanvas(background_store_canvas_.get(), offset_rect,
|
| + context, rect.origin());
|
| }
|
|
|
| if (background_changed || !backing_store_painted_.Contains(offset_rect)) {
|
| @@ -558,29 +533,8 @@ void WebPluginDelegateProxy::Paint(gfx::NativeDrawingContext context,
|
| CopyFromTransportToBacking(offset_rect);
|
| }
|
|
|
| -#if defined(OS_WIN)
|
| - HDC backing_hdc = backing_store_canvas_->getTopPlatformDevice().getBitmapDC();
|
| - BitBlt(context, rect.x(), rect.y(), rect.width(), rect.height(), backing_hdc,
|
| - offset_rect.x(), offset_rect.y(), SRCCOPY);
|
| -#elif defined(OS_MACOSX)
|
| - CGContextRef backing_context =
|
| - backing_store_canvas_->getTopPlatformDevice().GetBitmapContext();
|
| - scoped_cftyperef<CGImageRef>
|
| - backing_image(CGBitmapContextCreateImage(backing_context));
|
| - scoped_cftyperef<CGImageRef> sub_image(
|
| - CGImageCreateWithImageInRect(backing_image, offset_rect.ToCGRect()));
|
| - CGContextDrawImage(context, rect.ToCGRect(), sub_image);
|
| -#else
|
| - cairo_save(context);
|
| - cairo_t *cairo =
|
| - backing_store_canvas_->getTopPlatformDevice().beginPlatformPaint();
|
| - cairo_set_source_surface(context, cairo_get_target(cairo),
|
| - plugin_rect_.x(), plugin_rect_.y());
|
| - cairo_rectangle(context, rect.x(), rect.y(), rect.width(), rect.height());
|
| - cairo_paint(context);
|
| - cairo_clip(context);
|
| - cairo_restore(context);
|
| -#endif
|
| + BlitCanvasToContext(context, rect, backing_store_canvas_.get(),
|
| + offset_rect.origin());
|
|
|
| if (invalidate_pending_) {
|
| // Only send the PaintAck message if this paint is in response to an
|
| @@ -941,27 +895,7 @@ void WebPluginDelegateProxy::PaintSadPlugin(gfx::NativeDrawingContext context,
|
| std::max(0, (width - sad_plugin_->width())/2),
|
| std::max(0, (height - sad_plugin_->height())/2));
|
| }
|
| -
|
| -#if defined(OS_WIN)
|
| - skia::PlatformDevice& device = canvas.getTopPlatformDevice();
|
| - device.drawToHDC(context, plugin_rect_.x(), plugin_rect_.y(), NULL);
|
| -#elif defined(OS_LINUX)
|
| - cairo_save(context);
|
| - cairo_t* cairo = canvas.getTopPlatformDevice().beginPlatformPaint();
|
| - cairo_set_source_surface(context, cairo_get_target(cairo),
|
| - plugin_rect_.x(), plugin_rect_.y());
|
| - cairo_rectangle(context, rect.x(), rect.y(), rect.width(), rect.height());
|
| - cairo_clip(context);
|
| - cairo_paint(context);
|
| - cairo_restore(context);
|
| - // We have no endPlatformPaint() on the Linux PlatformDevice.
|
| - // The cairo_t* is owned by the device.
|
| -#elif defined(OS_MACOSX)
|
| - canvas.getTopPlatformDevice().DrawToContext(
|
| - context, plugin_rect_.x(), plugin_rect_.y(), NULL);
|
| -#else
|
| - NOTIMPLEMENTED();
|
| -#endif
|
| + BlitCanvasToContext(context, plugin_rect_, &canvas, gfx::Point(0, 0));
|
| }
|
|
|
| void WebPluginDelegateProxy::CopyFromTransportToBacking(const gfx::Rect& rect) {
|
| @@ -970,32 +904,8 @@ void WebPluginDelegateProxy::CopyFromTransportToBacking(const gfx::Rect& rect) {
|
| }
|
|
|
| // Copy the damaged rect from the transport bitmap to the backing store.
|
| -#if defined(OS_WIN)
|
| - HDC backing = backing_store_canvas_->getTopPlatformDevice().getBitmapDC();
|
| - HDC transport = transport_store_canvas_->getTopPlatformDevice().getBitmapDC();
|
| - BitBlt(backing, rect.x(), rect.y(), rect.width(), rect.height(),
|
| - transport, rect.x(), rect.y(), SRCCOPY);
|
| -#elif defined(OS_MACOSX)
|
| - gfx::NativeDrawingContext backing =
|
| - backing_store_canvas_->getTopPlatformDevice().GetBitmapContext();
|
| - gfx::NativeDrawingContext transport =
|
| - transport_store_canvas_->getTopPlatformDevice().GetBitmapContext();
|
| - scoped_cftyperef<CGImageRef> image(CGBitmapContextCreateImage(transport));
|
| - scoped_cftyperef<CGImageRef> sub_image(
|
| - CGImageCreateWithImageInRect(image, rect.ToCGRect()));
|
| - CGContextDrawImage(backing, rect.ToCGRect(), sub_image);
|
| -#else
|
| - cairo_t *cairo =
|
| - backing_store_canvas_->getTopPlatformDevice().beginPlatformPaint();
|
| - cairo_save(cairo);
|
| - cairo_t *transport =
|
| - transport_store_canvas_->getTopPlatformDevice().beginPlatformPaint();
|
| - cairo_set_source_surface(cairo, cairo_get_target(transport), 0, 0);
|
| - cairo_rectangle(cairo, rect.x(), rect.y(), rect.width(), rect.height());
|
| - cairo_clip(cairo);
|
| - cairo_paint(cairo);
|
| - cairo_restore(cairo);
|
| -#endif
|
| + BlitCanvasToCanvas(backing_store_canvas_.get(), rect,
|
| + transport_store_canvas_.get(), rect.origin());
|
| backing_store_painted_ = backing_store_painted_.Union(rect);
|
| }
|
|
|
|
|