Index: cc/output/software_renderer.cc |
diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc |
index e7273a8c12cd1bddee6756b6ade8434564aa8cd5..f4093016c27469b100d4f3ac14c9867ca2762a69 100644 |
--- a/cc/output/software_renderer.cc |
+++ b/cc/output/software_renderer.cc |
@@ -352,11 +352,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 = (SkColorGetA(quad->background_color) != 0) && |
+ !bitmap->isOpaque(); |
+ bool needs_layer = blend_background && (current_paint_.getAlpha() != 0xFF); |
alokp
2013/07/09 00:08:06
reed@: Is there a paint mode in skia that will avo
|
+ 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, |