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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: ui/compositor/canvas_painter.cc
diff --git a/ui/compositor/canvas_painter.cc b/ui/compositor/canvas_painter.cc
index 14f3b34282cd81fbab9c25e68a35feb947c562de..5de72c053ca6707fb048d211a20d917efe28e9e8 100644
--- a/ui/compositor/canvas_painter.cc
+++ b/ui/compositor/canvas_painter.cc
@@ -5,23 +5,34 @@
#include "ui/compositor/canvas_painter.h"
#include "cc/playback/display_item_list.h"
-#include "ui/gfx/canvas.h"
namespace ui {
-CanvasPainter::CanvasPainter(gfx::Canvas* canvas, float raster_scale_factor)
- : canvas_(canvas),
- raster_scale_factor_(raster_scale_factor),
- rect_(gfx::ScaleToEnclosedRect(
- gfx::Rect(canvas_->sk_canvas()->getBaseLayerSize().width(),
- canvas_->sk_canvas()->getBaseLayerSize().height()),
- 1.f / raster_scale_factor)),
+CanvasPainter::CanvasPainter(SkBitmap* output,
+ gfx::Size paint_size,
+ float raster_scale,
+ SkColor clear_color)
+ : output_(output),
+ paint_size_(paint_size),
+ clear_color_(clear_color),
list_(new cc::DisplayItemList),
- context_(list_.get(), raster_scale_factor_, rect_) {}
+ context_(list_.get(), raster_scale, gfx::Rect(paint_size_)) {}
CanvasPainter::~CanvasPainter() {
+ float raster_scale = context_.device_scale_factor();
+ 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_->sk_canvas(), nullptr, rect_, raster_scale_factor_);
+ list_->Raster(&canvas, nullptr);
}
} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698