| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "skia/ext/pixel_ref_utils.h" | 5 #include "skia/ext/pixel_ref_utils.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "third_party/skia/include/core/SkBitmapDevice.h" | 9 #include "third_party/skia/include/core/SkBitmapDevice.h" |
| 10 #include "third_party/skia/include/core/SkCanvas.h" | 10 #include "third_party/skia/include/core/SkCanvas.h" |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 const SkMatrix& matrix, | 355 const SkMatrix& matrix, |
| 356 SkFilterQuality filter_quality) { | 356 SkFilterQuality filter_quality) { |
| 357 SkRect canvas_rect = SkRect::MakeWH(width(), height()); | 357 SkRect canvas_rect = SkRect::MakeWH(width(), height()); |
| 358 if (rect.intersects(canvas_rect)) { | 358 if (rect.intersects(canvas_rect)) { |
| 359 pixel_ref_set_->Add(bm.pixelRef(), rect, matrix, filter_quality); | 359 pixel_ref_set_->Add(bm.pixelRef(), rect, matrix, filter_quality); |
| 360 } | 360 } |
| 361 } | 361 } |
| 362 | 362 |
| 363 bool GetBitmapFromPaint(const SkPaint& paint, SkBitmap* bm) { | 363 bool GetBitmapFromPaint(const SkPaint& paint, SkBitmap* bm) { |
| 364 SkShader* shader = paint.getShader(); | 364 SkShader* shader = paint.getShader(); |
| 365 if (shader) { | 365 return shader && shader->isABitmap(bm, NULL, NULL); |
| 366 // Check whether the shader is a gradient in order to prevent generation | |
| 367 // of bitmaps from gradient shaders, which implement asABitmap. | |
| 368 if (SkShader::kNone_GradientType == shader->asAGradient(NULL)) | |
| 369 return shader->asABitmap(bm, NULL, NULL); | |
| 370 } | |
| 371 return false; | |
| 372 } | 366 } |
| 373 }; | 367 }; |
| 374 | 368 |
| 375 } // namespace | 369 } // namespace |
| 376 | 370 |
| 377 void PixelRefUtils::GatherDiscardablePixelRefs( | 371 void PixelRefUtils::GatherDiscardablePixelRefs( |
| 378 SkPicture* picture, | 372 SkPicture* picture, |
| 379 std::vector<PositionPixelRef>* pixel_refs) { | 373 std::vector<PositionPixelRef>* pixel_refs) { |
| 380 pixel_refs->clear(); | 374 pixel_refs->clear(); |
| 381 DiscardablePixelRefSet pixel_ref_set(pixel_refs); | 375 DiscardablePixelRefSet pixel_ref_set(pixel_refs); |
| 382 | 376 |
| 383 SkRect picture_bounds = picture->cullRect(); | 377 SkRect picture_bounds = picture->cullRect(); |
| 384 SkIRect picture_ibounds = picture_bounds.roundOut(); | 378 SkIRect picture_ibounds = picture_bounds.roundOut(); |
| 385 SkBitmap empty_bitmap; | 379 SkBitmap empty_bitmap; |
| 386 // Use right/bottom as the size so that we don't need a translate and, as a | 380 // Use right/bottom as the size so that we don't need a translate and, as a |
| 387 // result, the information is returned relative to the picture's origin. | 381 // result, the information is returned relative to the picture's origin. |
| 388 empty_bitmap.setInfo(SkImageInfo::MakeUnknown(picture_ibounds.right(), | 382 empty_bitmap.setInfo(SkImageInfo::MakeUnknown(picture_ibounds.right(), |
| 389 picture_ibounds.bottom())); | 383 picture_ibounds.bottom())); |
| 390 | 384 |
| 391 GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set); | 385 GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set); |
| 392 SkNoSaveLayerCanvas canvas(&device); | 386 SkNoSaveLayerCanvas canvas(&device); |
| 393 | 387 |
| 394 canvas.drawPicture(picture); | 388 canvas.drawPicture(picture); |
| 395 } | 389 } |
| 396 | 390 |
| 397 } // namespace skia | 391 } // namespace skia |
| OLD | NEW |