12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // 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_, SkSurfaceProps{});
- 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
|