| Index: cc/output/software_renderer.cc
|
| diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc
|
| index 817bb679be7538759ed3e46c221130fc316ed132..5c745c0e0dba0bf2baa5ca51f275cb74befd738f 100644
|
| --- a/cc/output/software_renderer.cc
|
| +++ b/cc/output/software_renderer.cc
|
| @@ -353,11 +353,31 @@ void SoftwareRenderer::DrawTextureQuad(const DrawingFrame* frame,
|
| bitmap->width(),
|
| bitmap->height());
|
| SkRect sk_uv_rect = gfx::RectFToSkRect(uv_rect);
|
| + SkRect quad_rect = gfx::RectFToSkRect(QuadVertexRect());
|
| +
|
| if (quad->flipped)
|
| current_canvas_->scale(1, -1);
|
| - current_canvas_->drawBitmapRectToRect(*bitmap, &sk_uv_rect,
|
| - gfx::RectFToSkRect(QuadVertexRect()),
|
| +
|
| + bool blend_background = quad->background_color != SK_ColorTRANSPARENT &&
|
| + !bitmap->isOpaque();
|
| + bool needs_layer = blend_background && (current_paint_.getAlpha() != 0xFF);
|
| + if (needs_layer) {
|
| + current_canvas_->saveLayerAlpha(&quad_rect, current_paint_.getAlpha());
|
| + current_paint_.setAlpha(0xFF);
|
| + }
|
| + if (blend_background) {
|
| + SkPaint background_paint;
|
| + background_paint.setColor(quad->background_color);
|
| + current_canvas_->drawRect(quad_rect, background_paint);
|
| + }
|
| +
|
| + current_canvas_->drawBitmapRectToRect(*bitmap,
|
| + &sk_uv_rect,
|
| + quad_rect,
|
| ¤t_paint_);
|
| +
|
| + if (needs_layer)
|
| + current_canvas_->restore();
|
| }
|
|
|
| void SoftwareRenderer::DrawTileQuad(const DrawingFrame* frame,
|
|
|