Index: src/core/SkBitmapProcShader.cpp |
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp |
index 74b9e86669eead31a270822791558e2b2c2c0adc..bc4e96eeea62d3f6ef59d2e81bbe75b8f1e0baa1 100644 |
--- a/src/core/SkBitmapProcShader.cpp |
+++ b/src/core/SkBitmapProcShader.cpp |
@@ -294,8 +294,6 @@ static bool canUseColorShader(const SkBitmap& bm, SkColor* color) { |
return false; |
} |
-#include "SkTemplatesPriv.h" |
- |
static bool bitmapIsTooBig(const SkBitmap& bm) { |
// SkBitmapProcShader stores bitmap coordinates in a 16bit buffer, as it |
// communicates between its matrix-proc and its sampler-proc. Until we can |
@@ -306,20 +304,31 @@ static bool bitmapIsTooBig(const SkBitmap& bm) { |
return bm.width() > maxSize || bm.height() > maxSize; |
} |
-SkShader* SkShader::CreateBitmapShader(const SkBitmap& src, |
- TileMode tmx, TileMode tmy, |
- void* storage, size_t storageSize) { |
+SkShader* CreateBitmapShader(const SkBitmap& src, SkShader::TileMode tmx, |
+ SkShader::TileMode tmy, |
+ SkStackAllocator<kBlitterStorageByteCount>* allocator) { |
SkShader* shader; |
SkColor color; |
if (src.isNull() || bitmapIsTooBig(src)) { |
- SK_PLACEMENT_NEW(shader, SkEmptyShader, storage, storageSize); |
+ if (NULL == allocator) { |
+ shader = SkNEW(SkEmptyShader); |
+ } else { |
+ SkSTACK_ALLOCATE(shader, (*allocator), SkEmptyShader, ()); |
+ } |
} |
else if (canUseColorShader(src, &color)) { |
- SK_PLACEMENT_NEW_ARGS(shader, SkColorShader, storage, storageSize, |
- (color)); |
+ if (NULL == allocator) { |
+ shader = SkNEW_ARGS(SkColorShader, (color)); |
+ } else { |
+ SkSTACK_ALLOCATE(shader, (*allocator), SkColorShader, (color)); |
+ } |
} else { |
- SK_PLACEMENT_NEW_ARGS(shader, SkBitmapProcShader, storage, |
- storageSize, (src, tmx, tmy)); |
+ if (NULL == allocator) { |
+ shader = SkNEW_ARGS(SkBitmapProcShader, (src, tmx, tmy)); |
+ } else { |
+ SkSTACK_ALLOCATE(shader, (*allocator), SkBitmapProcShader, |
+ (src, tmx, tmy)); |
+ } |
} |
return shader; |
} |