Index: src/core/SkPictureCommon.h |
diff --git a/src/core/SkPictureCommon.h b/src/core/SkPictureCommon.h |
index 3d64888641df2e6e09013f24908af8aef39223c6..c9c023d2bb1249ce1b955647a4c1a6f4d9ebedd9 100644 |
--- a/src/core/SkPictureCommon.h |
+++ b/src/core/SkPictureCommon.h |
@@ -7,7 +7,7 @@ |
// Some shared code used by both SkBigPicture and SkMiniPicture. |
// SkTextHunter -- SkRecord visitor that returns true when the op draws text. |
-// SkBitmapHunter -- SkRecord visitor that returns true when the op draws a bitmap. |
+// SkBitmapHunter -- SkRecord visitor that returns true when the op draws a bitmap or image. |
// SkPathCounter -- SkRecord visitor that counts paths that draw slowly on the GPU. |
#include "SkPathEffect.h" |
@@ -26,18 +26,25 @@ struct SkTextHunter { |
}; |
+// N.B. This name is slightly historical: hunting season is now open for SkImages too. |
struct SkBitmapHunter { |
- // Helpers. These create HasMember_bitmap and HasMember_paint. |
+ // Helpers. These let us detect the presence of struct members with particular names. |
SK_CREATE_MEMBER_DETECTOR(bitmap); |
+ SK_CREATE_MEMBER_DETECTOR(image); |
SK_CREATE_MEMBER_DETECTOR(paint); |
+ template <typename T> |
+ struct HasMember_bitmap_or_image { |
+ static const bool value = HasMember_bitmap<T>::value || HasMember_image<T>::value; |
+ }; |
+ |
// Some ops have a paint, some have an optional paint. Either way, get back a pointer. |
static const SkPaint* AsPtr(const SkPaint& p) { return &p; } |
static const SkPaint* AsPtr(const SkRecords::Optional<SkPaint>& p) { return p; } |
// Main entry for visitor: |
// If the op is a DrawPicture, recurse. |
- // If the op has a bitmap directly, return true. |
+ // If the op has a bitmap or image directly, return true. |
// If the op has a paint and the paint has a bitmap, return true. |
// Otherwise, return false. |
bool operator()(const SkRecords::DrawPicture& op) { return op.picture->willPlayBackBitmaps(); } |
@@ -47,11 +54,15 @@ struct SkBitmapHunter { |
// If the op has a bitmap, of course we're going to play back bitmaps. |
template <typename T> |
- static SK_WHEN(HasMember_bitmap<T>, bool) CheckBitmap(const T&) { return true; } |
+ static SK_WHEN(HasMember_bitmap_or_image<T>, bool) CheckBitmap(const T&) { |
+ return true; |
+ } |
// If not, look for one in its paint (if it has a paint). |
template <typename T> |
- static SK_WHEN(!HasMember_bitmap<T>, bool) CheckBitmap(const T& r) { return CheckPaint(r); } |
+ static SK_WHEN(!HasMember_bitmap_or_image<T>, bool) CheckBitmap(const T& r) { |
+ return CheckPaint(r); |
+ } |
// If we have a paint, dig down into the effects looking for a bitmap. |
template <typename T> |