From 748157f70e3fd74e4cb4fe542351eac25c9adfa3 Mon Sep 17 00:00:00 2001 From: tomhudson Date: Thu, 4 Feb 2016 10:49:56 -0800 Subject: gfx::Canvas typically had both a skia::RefPtr and a raw pointer to the same object. This CL gets rid of the duplication. Worth particular attention in review is the Canvas::Canvas() which previously took a raw SkCanvas*; according to skia/ext/refptr.h that's unexpected? R=sky@chromium.org Review URL: https://codereview.chromium.org/1615923003 Cr-Commit-Position: refs/heads/master@{#373573} --- ui/gfx/canvas.cc | 31 +++++++++++++------------------ ui/gfx/canvas.h | 8 +++----- ui/gfx/canvas_paint_mac.mm | 2 +- ui/gfx/render_text_unittest.cc | 4 ++-- 4 files changed, 19 insertions(+), 26 deletions(-) (limited to 'ui/gfx') diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc index 459a0e6..874c328 100644 --- a/ui/gfx/canvas.cc +++ b/ui/gfx/canvas.cc @@ -24,18 +24,16 @@ namespace gfx { Canvas::Canvas(const Size& size, float image_scale, bool is_opaque) - : image_scale_(image_scale), - canvas_(NULL) { + : image_scale_(image_scale) { Size pixel_size = ScaleToCeiledSize(size, image_scale); - owned_canvas_ = skia::AdoptRef(skia::CreatePlatformCanvas(pixel_size.width(), - pixel_size.height(), - is_opaque)); - canvas_ = owned_canvas_.get(); + canvas_ = skia::AdoptRef(skia::CreatePlatformCanvas(pixel_size.width(), + pixel_size.height(), + is_opaque)); #if !defined(USE_CAIRO) // skia::PlatformCanvas instances are initialized to 0 by Cairo, but // uninitialized on other platforms. if (!is_opaque) - owned_canvas_->clear(SkColorSetARGB(0, 0, 0, 0)); + canvas_->clear(SkColorSetARGB(0, 0, 0, 0)); #endif SkScalar scale_scalar = SkFloatToScalar(image_scale); @@ -44,11 +42,10 @@ Canvas::Canvas(const Size& size, float image_scale, bool is_opaque) Canvas::Canvas(const ImageSkiaRep& image_rep, bool is_opaque) : image_scale_(image_rep.scale()), - owned_canvas_(skia::AdoptRef( + canvas_(skia::AdoptRef( skia::CreatePlatformCanvas(image_rep.pixel_width(), image_rep.pixel_height(), - is_opaque))), - canvas_(owned_canvas_.get()) { + is_opaque))) { SkScalar scale_scalar = SkFloatToScalar(image_scale_); canvas_->scale(scale_scalar, scale_scalar); DrawImageInt(ImageSkia(image_rep), 0, 0); @@ -56,11 +53,10 @@ Canvas::Canvas(const ImageSkiaRep& image_rep, bool is_opaque) Canvas::Canvas() : image_scale_(1.f), - owned_canvas_(skia::AdoptRef(skia::CreatePlatformCanvas(0, 0, false))), - canvas_(owned_canvas_.get()) {} + canvas_(skia::AdoptRef(skia::CreatePlatformCanvas(0, 0, false))) {} -Canvas::Canvas(SkCanvas* canvas, float image_scale) - : image_scale_(image_scale), owned_canvas_(), canvas_(canvas) { +Canvas::Canvas(const skia::RefPtr& canvas, float image_scale) + : image_scale_(image_scale), canvas_(canvas) { DCHECK(canvas); } @@ -72,10 +68,9 @@ void Canvas::RecreateBackingCanvas(const Size& size, bool is_opaque) { image_scale_ = image_scale; Size pixel_size = ScaleToFlooredSize(size, image_scale); - owned_canvas_ = skia::AdoptRef(skia::CreatePlatformCanvas(pixel_size.width(), - pixel_size.height(), - is_opaque)); - canvas_ = owned_canvas_.get(); + canvas_ = skia::AdoptRef(skia::CreatePlatformCanvas(pixel_size.width(), + pixel_size.height(), + is_opaque)); SkScalar scale_scalar = SkFloatToScalar(image_scale); canvas_->scale(scale_scalar, scale_scalar); } diff --git a/ui/gfx/canvas.h b/ui/gfx/canvas.h index dd30d54..6233af3 100644 --- a/ui/gfx/canvas.h +++ b/ui/gfx/canvas.h @@ -89,7 +89,7 @@ class GFX_EXPORT Canvas { // Creates a Canvas backed by an |sk_canvas| with |image_scale_|. // |sk_canvas| is assumed to be already scaled based on |image_scale| // so no additional scaling is applied. - Canvas(SkCanvas* sk_canvas, float image_scale); + Canvas(const skia::RefPtr& sk_canvas, float image_scale); virtual ~Canvas(); @@ -409,8 +409,7 @@ class GFX_EXPORT Canvas { const Rect& display_rect, int flags); - SkCanvas* platform_canvas() { return owned_canvas_.get(); } - SkCanvas* sk_canvas() { return canvas_; } + SkCanvas* sk_canvas() { return canvas_.get(); } float image_scale() const { return image_scale_; } private: @@ -439,8 +438,7 @@ class GFX_EXPORT Canvas { // Canvas::Scale() does not affect |image_scale_|. float image_scale_; - skia::RefPtr owned_canvas_; - SkCanvas* canvas_; + skia::RefPtr canvas_; DISALLOW_COPY_AND_ASSIGN(Canvas); }; diff --git a/ui/gfx/canvas_paint_mac.mm b/ui/gfx/canvas_paint_mac.mm index cc926d2..d5178a0 100644 --- a/ui/gfx/canvas_paint_mac.mm +++ b/ui/gfx/canvas_paint_mac.mm @@ -23,7 +23,7 @@ CanvasSkiaPaint::CanvasSkiaPaint(NSRect dirtyRect, bool opaque) CanvasSkiaPaint::~CanvasSkiaPaint() { if (!is_empty()) { - platform_canvas()->restoreToCount(1); + sk_canvas()->restoreToCount(1); // Blit the dirty rect to the current context. CGImageRef image = CGBitmapContextCreateImage(context_); diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc index 51e1ac7..cea1786 100644 --- a/ui/gfx/render_text_unittest.cc +++ b/ui/gfx/render_text_unittest.cc @@ -3019,7 +3019,7 @@ TEST_F(RenderTextTest, TextDoesntClip) { skia::RefPtr surface = skia::AdoptRef( SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); - Canvas canvas(surface->getCanvas(), 1.0f); + Canvas canvas(skia::SharePtr(surface->getCanvas()), 1.0f); scoped_ptr render_text(RenderText::CreateInstance()); render_text->SetHorizontalAlignment(ALIGN_LEFT); render_text->SetColor(SK_ColorBLACK); @@ -3101,7 +3101,7 @@ TEST_F(RenderTextTest, TextDoesClip) { skia::RefPtr surface = skia::AdoptRef( SkSurface::NewRasterN32Premul(kCanvasSize.width(), kCanvasSize.height())); - Canvas canvas(surface->getCanvas(), 1.0f); + Canvas canvas(skia::SharePtr(surface->getCanvas()), 1.0f); scoped_ptr render_text(RenderText::CreateInstance()); render_text->SetHorizontalAlignment(ALIGN_LEFT); render_text->SetColor(SK_ColorBLACK); -- cgit v1.1