| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/compositor/canvas_painter.h" |
| |
| #include "cc/paint/display_item_list.h" |
| |
| namespace ui { |
| |
| CanvasPainter::CanvasPainter(SkBitmap* output, |
| const gfx::Size& paint_size, |
| float raster_scale, |
| SkColor clear_color, |
| bool is_pixel_canvas) |
| : output_(output), |
| paint_size_(paint_size), |
| raster_scale_(raster_scale), |
| clear_color_(clear_color), |
| list_(new cc::DisplayItemList), |
| context_(list_.get(), |
| raster_scale, |
| gfx::Rect(paint_size_), |
| is_pixel_canvas) {} |
| |
| CanvasPainter::~CanvasPainter() { |
| gfx::Size pixel_size = gfx::ScaleToCeiledSize(paint_size_, raster_scale_); |
| SkImageInfo info = SkImageInfo::MakeN32( |
| pixel_size.width(), pixel_size.height(), kPremul_SkAlphaType); |
| if (!output_->tryAllocPixels(info)) |
| return; |
| |
| SkCanvas canvas(*output_); |
| canvas.clear(clear_color_); |
| |
| canvas.scale(raster_scale_, raster_scale_); |
| |
| list_->Finalize(); |
| list_->Raster(&canvas, nullptr); |
| } |
| |
| } // namespace ui |