blob: 31c4cabdc1fdcc013af8fdd462f3113530ca63b6 [file] [log] [blame]
// 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& output_size,
float device_scale_factor,
SkColor clear_color,
bool is_pixel_canvas)
: output_(output),
pixel_output_size_(
gfx::ScaleToCeiledSize(output_size, device_scale_factor)),
raster_scale_(is_pixel_canvas ? 1.f : device_scale_factor),
clear_color_(clear_color),
list_(new cc::DisplayItemList),
context_(list_.get(),
device_scale_factor,
gfx::Rect(output_size),
is_pixel_canvas) {}
CanvasPainter::~CanvasPainter() {
SkImageInfo info =
SkImageInfo::MakeN32(pixel_output_size_.width(),
pixel_output_size_.height(), kPremul_SkAlphaType);
if (!output_->tryAllocPixels(info))
return;
SkCanvas canvas(*output_);
canvas.clear(clear_color_);
// When pixel canvas is enabled, the recordings and canvas are already scaled
// to the correct raster size. This additional scaling is not required and
// hence |raster_scale_| should be equal to 1 during this operation.
canvas.scale(raster_scale_, raster_scale_);
list_->Finalize();
list_->Raster(&canvas, nullptr);
}
} // namespace ui