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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/compositor/canvas_painter.cc
diff --git a/ui/compositor/canvas_painter.cc b/ui/compositor/canvas_painter.cc
index 14f3b34282cd81fbab9c25e68a35feb947c562de..08393dc1b2e88577a61e50f23ccbbd9ddcd31ab3 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,
+ 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_factor_, rect_) {}
+ 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_->sk_canvas(), nullptr, rect_, raster_scale_factor_);
+ list_->Raster(&canvas, nullptr);
}
} // namespace ui
« 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