Index: cc/output/software_renderer.cc |
diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc |
index 1082086f721cec28706b8ef45bbf6cfe684aa911..2fefebc8d24ea8b6f28de46b154fc7c624f801c5 100644 |
--- a/cc/output/software_renderer.cc |
+++ b/cc/output/software_renderer.cc |
@@ -452,12 +452,20 @@ void SoftwareRenderer::DrawUnsupportedQuad(const DrawingFrame* frame, |
void SoftwareRenderer::CopyCurrentRenderPassToBitmap( |
DrawingFrame* frame, |
scoped_ptr<CopyOutputRequest> request) { |
+ gfx::Rect copy_rect = frame->current_render_pass->output_rect; |
+ if (request->has_area()) { |
+ // Intersect with the request's area, positioned with its origin at the |
+ // origin of the full copy_rect. |
+ copy_rect.Intersect(request->area() - copy_rect.OffsetFromOrigin()); |
+ } |
+ gfx::Rect window_copy_rect = MoveFromDrawToWindowSpace(copy_rect); |
+ |
scoped_ptr<SkBitmap> bitmap(new SkBitmap); |
bitmap->setConfig(SkBitmap::kARGB_8888_Config, |
- current_viewport_rect_.width(), |
- current_viewport_rect_.height()); |
+ window_copy_rect.width(), |
+ window_copy_rect.height()); |
current_canvas_->readPixels( |
- bitmap.get(), current_viewport_rect_.x(), current_viewport_rect_.y()); |
+ bitmap.get(), window_copy_rect.x(), window_copy_rect.y()); |
request->SendBitmapResult(bitmap.Pass()); |
} |