| Index: ui/gfx/canvas.cc
|
| diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc
|
| index 60f0077bf96087faf204441fb6148644cb6b3b6c..398a76da7ee845663f6acd3bb229b4311a00a02d 100644
|
| --- a/ui/gfx/canvas.cc
|
| +++ b/ui/gfx/canvas.cc
|
| @@ -31,14 +31,17 @@ namespace gfx {
|
|
|
| namespace {
|
|
|
| -sk_sp<cc::PaintSurface> CreateSurface(const Size& size, bool is_opaque) {
|
| +SkBitmap CreateBitmap(const Size& size, bool is_opaque) {
|
| // SkSurface cannot be zero-sized, but clients of Canvas sometimes request
|
| // that (and then later resize).
|
| int width = std::max(size.width(), 1);
|
| int height = std::max(size.height(), 1);
|
| SkAlphaType alpha = is_opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType;
|
| SkImageInfo info = SkImageInfo::MakeN32(width, height, alpha);
|
| - return cc::PaintSurface::MakeRaster(info);
|
| + SkBitmap bitmap;
|
| + bool success = bitmap.tryAllocPixels(info);
|
| + DCHECK(success);
|
| + return bitmap;
|
| }
|
|
|
| } // namespace
|
| @@ -46,8 +49,7 @@ sk_sp<cc::PaintSurface> CreateSurface(const Size& size, bool is_opaque) {
|
| Canvas::Canvas(const Size& size, float image_scale, bool is_opaque)
|
| : image_scale_(image_scale) {
|
| Size pixel_size = ScaleToCeiledSize(size, image_scale);
|
| - surface_ = CreateSurface(pixel_size, is_opaque);
|
| - canvas_ = surface_->getCanvas();
|
| + canvas_ = CreateOwnedCanvas(pixel_size, is_opaque);
|
|
|
| #if !defined(USE_CAIRO)
|
| // skia::PlatformCanvas instances are initialized to 0 by Cairo, but
|
| @@ -61,9 +63,7 @@ Canvas::Canvas(const Size& size, float image_scale, bool is_opaque)
|
| }
|
|
|
| Canvas::Canvas()
|
| - : image_scale_(1.f),
|
| - surface_(CreateSurface({0, 0}, false)),
|
| - canvas_(surface_->getCanvas()) {}
|
| + : image_scale_(1.f), canvas_(CreateOwnedCanvas({0, 0}, false)) {}
|
|
|
| Canvas::Canvas(cc::PaintCanvas* canvas, float image_scale)
|
| : image_scale_(image_scale), canvas_(canvas) {
|
| @@ -78,8 +78,7 @@ void Canvas::RecreateBackingCanvas(const Size& size,
|
| bool is_opaque) {
|
| image_scale_ = image_scale;
|
| Size pixel_size = ScaleToFlooredSize(size, image_scale);
|
| - surface_ = CreateSurface(pixel_size, is_opaque);
|
| - canvas_ = surface_->getCanvas();
|
| + canvas_ = CreateOwnedCanvas(pixel_size, is_opaque);
|
|
|
| SkScalar scale_scalar = SkFloatToScalar(image_scale);
|
| canvas_->scale(scale_scalar, scale_scalar);
|
| @@ -619,4 +618,10 @@ void Canvas::DrawImageIntHelper(const ImageSkiaRep& image_rep,
|
| canvas_->drawRect(dest_rect, flags);
|
| }
|
|
|
| +cc::PaintCanvas* Canvas::CreateOwnedCanvas(const Size& size, bool is_opaque) {
|
| + bitmap_ = CreateBitmap(size, is_opaque);
|
| + owned_canvas_ = cc::SkiaPaintCanvas(bitmap_.value());
|
| + return &owned_canvas_.value();
|
| +}
|
| +
|
| } // namespace gfx
|
|
|