Index: src/core/SkDrawLooper.cpp |
diff --git a/src/core/SkDrawLooper.cpp b/src/core/SkDrawLooper.cpp |
index bac2d969c0505d318fe7881c638c1a4750544fd3..c620cd08da5bac8718770e3f69b37916a17b49fb 100644 |
--- a/src/core/SkDrawLooper.cpp |
+++ b/src/core/SkDrawLooper.cpp |
@@ -10,14 +10,17 @@ |
#include "SkMatrix.h" |
#include "SkPaint.h" |
#include "SkRect.h" |
+#include "SkSmallAllocator.h" |
-bool SkDrawLooper::canComputeFastBounds(const SkPaint& paint) { |
+bool SkDrawLooper::canComputeFastBounds(const SkPaint& paint) const { |
SkCanvas canvas; |
+ SkSmallAllocator<1, 32> allocator; |
+ void* buffer = allocator.reserveT<SkDrawLooper::Context>(this->contextSize()); |
- this->init(&canvas); |
+ SkDrawLooper::Context* context = this->createContext(&canvas, buffer); |
for (;;) { |
SkPaint p(paint); |
- if (this->next(&canvas, &p)) { |
+ if (context->next(&canvas, &p)) { |
p.setLooper(NULL); |
if (!p.canComputeFastBounds()) { |
return false; |
@@ -30,14 +33,16 @@ bool SkDrawLooper::canComputeFastBounds(const SkPaint& paint) { |
} |
void SkDrawLooper::computeFastBounds(const SkPaint& paint, const SkRect& src, |
- SkRect* dst) { |
+ SkRect* dst) const { |
SkCanvas canvas; |
+ SkSmallAllocator<1, 32> allocator; |
+ void* buffer = allocator.reserveT<SkDrawLooper::Context>(this->contextSize()); |
*dst = src; // catch case where there are no loops |
- this->init(&canvas); |
+ SkDrawLooper::Context* context = this->createContext(&canvas, buffer); |
for (bool firstTime = true;; firstTime = false) { |
SkPaint p(paint); |
- if (this->next(&canvas, &p)) { |
+ if (context->next(&canvas, &p)) { |
SkRect r(src); |
p.setLooper(NULL); |