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, |