OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/canvas.h" | 5 #include "ui/gfx/canvas.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
507 shader_scale)); | 507 shader_scale)); |
508 return true; | 508 return true; |
509 } | 509 } |
510 | 510 |
511 void Canvas::Transform(const gfx::Transform& transform) { | 511 void Canvas::Transform(const gfx::Transform& transform) { |
512 canvas_->concat(transform.matrix()); | 512 canvas_->concat(transform.matrix()); |
513 } | 513 } |
514 | 514 |
515 SkBitmap Canvas::GetBitmap() const { | 515 SkBitmap Canvas::GetBitmap() const { |
516 DCHECK(bitmap_); | 516 DCHECK(bitmap_); |
517 SkBitmap bitmap = bitmap_.value(); | 517 return bitmap_.value(); |
518 // When the bitmap is copied, it shares the underlying pixelref, but doesn't | |
519 // initialize pixels unless they are locked. Hence, ensure that the returned | |
520 // bitmap keeps the pixelref alive by locking it. Note that the dtor of | |
521 // SkBitmap will unlock the pixelrefs, so this won't leak. Also note that | |
522 // moving SkBitmap retains the same lock as the source, so the caller | |
523 // will receive a locked-pixels bitmap. | |
524 bitmap.lockPixels(); | |
525 return bitmap; | |
526 } | 518 } |
527 | 519 |
528 bool Canvas::IntersectsClipRect(const SkRect& rect) { | 520 bool Canvas::IntersectsClipRect(const SkRect& rect) { |
529 SkRect clip; | 521 SkRect clip; |
530 return canvas_->getLocalClipBounds(&clip) && clip.intersects(rect); | 522 return canvas_->getLocalClipBounds(&clip) && clip.intersects(rect); |
531 } | 523 } |
532 | 524 |
533 void Canvas::DrawImageIntHelper(const ImageSkiaRep& image_rep, | 525 void Canvas::DrawImageIntHelper(const ImageSkiaRep& image_rep, |
534 int src_x, | 526 int src_x, |
535 int src_y, | 527 int src_y, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 bitmap_.emplace(); | 582 bitmap_.emplace(); |
591 bitmap_->allocPixels(info); | 583 bitmap_->allocPixels(info); |
592 // Ensure that the bitmap is zeroed, since the code expects that. | 584 // Ensure that the bitmap is zeroed, since the code expects that. |
593 memset(bitmap_->getPixels(), 0, bitmap_->getSafeSize()); | 585 memset(bitmap_->getPixels(), 0, bitmap_->getSafeSize()); |
594 | 586 |
595 owned_canvas_ = cc::SkiaPaintCanvas(bitmap_.value()); | 587 owned_canvas_ = cc::SkiaPaintCanvas(bitmap_.value()); |
596 return &owned_canvas_.value(); | 588 return &owned_canvas_.value(); |
597 } | 589 } |
598 | 590 |
599 } // namespace gfx | 591 } // namespace gfx |
OLD | NEW |