Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(534)

Side by Side Diff: ui/compositor/canvas_painter.cc

Issue 2694023003: Make CanvasPainter raster directly to an SkBitmap (Closed)
Patch Set: Replace CanvasPainter rect with size Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/compositor/canvas_painter.h" 5 #include "ui/compositor/canvas_painter.h"
6 6
7 #include "cc/playback/display_item_list.h" 7 #include "cc/playback/display_item_list.h"
8 #include "ui/gfx/canvas.h"
9 8
10 namespace ui { 9 namespace ui {
11 10
12 CanvasPainter::CanvasPainter(gfx::Canvas* canvas, float raster_scale_factor) 11 CanvasPainter::CanvasPainter(SkBitmap* output,
13 : canvas_(canvas), 12 gfx::Size paint_size,
14 raster_scale_factor_(raster_scale_factor), 13 float raster_scale,
15 rect_(gfx::ScaleToEnclosedRect( 14 SkColor clear_color)
16 gfx::Rect(canvas_->sk_canvas()->getBaseLayerSize().width(), 15 : output_(output),
17 canvas_->sk_canvas()->getBaseLayerSize().height()), 16 paint_size_(paint_size),
18 1.f / raster_scale_factor)), 17 clear_color_(clear_color),
19 list_(new cc::DisplayItemList), 18 list_(new cc::DisplayItemList),
20 context_(list_.get(), raster_scale_factor_, rect_) {} 19 context_(list_.get(), raster_scale, gfx::Rect(paint_size_)) {}
21 20
22 CanvasPainter::~CanvasPainter() { 21 CanvasPainter::~CanvasPainter() {
22 float raster_scale = context_.device_scale_factor();
23 gfx::Size pixel_size = gfx::ScaleToCeiledSize(paint_size_, raster_scale);
24 SkImageInfo info = SkImageInfo::MakeN32(
25 pixel_size.width(), pixel_size.height(), kPremul_SkAlphaType);
26 if (!output_->tryAllocPixels(info))
27 return;
28
29 SkCanvas canvas(*output_);
30 canvas.clear(clear_color_);
31
32 canvas.scale(raster_scale, raster_scale);
33
23 list_->Finalize(); 34 list_->Finalize();
24 list_->Raster(canvas_->sk_canvas(), nullptr, rect_, raster_scale_factor_); 35 list_->Raster(&canvas, nullptr);
25 } 36 }
26 37
27 } // namespace ui 38 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698