Chromium Code Reviews| Index: ui/gfx/canvas.cc |
| diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc |
| index 60f0077bf96087faf204441fb6148644cb6b3b6c..fac618b585700a3fa96d6566148e5fa91ded3acb 100644 |
| --- a/ui/gfx/canvas.cc |
| +++ b/ui/gfx/canvas.cc |
| @@ -9,8 +9,10 @@ |
| #include "base/i18n/rtl.h" |
| #include "base/logging.h" |
| +#include "base/memory/ptr_util.h" |
| #include "cc/paint/paint_flags.h" |
| #include "cc/paint/paint_shader.h" |
| +#include "cc/paint/skia_paint_canvas.h" |
| #include "third_party/skia/include/core/SkBitmap.h" |
| #include "third_party/skia/include/core/SkPath.h" |
| #include "third_party/skia/include/core/SkRefCnt.h" |
| @@ -31,14 +33,11 @@ namespace gfx { |
| namespace { |
| -sk_sp<cc::PaintSurface> CreateSurface(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); |
| +std::unique_ptr<cc::PaintCanvas> CreateCanvas(const Size& size, |
|
danakj
2017/03/22 15:06:51
vmpstr is also changing this code in https://coder
|
| + bool is_opaque) { |
| SkAlphaType alpha = is_opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; |
| - SkImageInfo info = SkImageInfo::MakeN32(width, height, alpha); |
| - return cc::PaintSurface::MakeRaster(info); |
| + SkImageInfo info = SkImageInfo::MakeN32(size.width(), size.height(), alpha); |
| + return cc::SkiaPaintCanvas::CreateRasterZeroed(info); |
| } |
| } // namespace |
| @@ -46,8 +45,8 @@ 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(); |
| + owned_canvas_ = CreateCanvas(pixel_size, is_opaque); |
| + canvas_ = owned_canvas_.get(); |
| #if !defined(USE_CAIRO) |
| // skia::PlatformCanvas instances are initialized to 0 by Cairo, but |
| @@ -62,8 +61,8 @@ 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()) {} |
| + owned_canvas_(CreateCanvas({0, 0}, false)), |
| + canvas_(owned_canvas_.get()) {} |
| Canvas::Canvas(cc::PaintCanvas* canvas, float image_scale) |
| : image_scale_(image_scale), canvas_(canvas) { |
| @@ -78,8 +77,8 @@ 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(); |
| + owned_canvas_ = CreateCanvas(pixel_size, is_opaque); |
| + canvas_ = owned_canvas_.get(); |
| SkScalar scale_scalar = SkFloatToScalar(image_scale); |
| canvas_->scale(scale_scalar, scale_scalar); |