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

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

Issue 2694023003: Make CanvasPainter raster directly to an SkBitmap (Closed)
Patch Set: tapted review 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
« no previous file with comments | « ui/compositor/canvas_painter.h ('k') | ui/views/button_drag_utils.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 const 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 raster_scale_(raster_scale),
18 clear_color_(clear_color),
19 list_(new cc::DisplayItemList), 19 list_(new cc::DisplayItemList),
20 context_(list_.get(), raster_scale_factor_, rect_) {} 20 context_(list_.get(), raster_scale, gfx::Rect(paint_size_)) {}
21 21
22 CanvasPainter::~CanvasPainter() { 22 CanvasPainter::~CanvasPainter() {
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
« no previous file with comments | « ui/compositor/canvas_painter.h ('k') | ui/views/button_drag_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698