summaryrefslogtreecommitdiff
path: root/chromium/ui/compositor/canvas_painter.cc
blob: 08393dc1b2e88577a61e50f23ccbbd9ddcd31ab3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 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/playback/display_item_list.h"

namespace ui {

CanvasPainter::CanvasPainter(SkBitmap* output,
                             const gfx::Size& paint_size,
                             float raster_scale,
                             SkColor clear_color)
    : 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_)) {}

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