| 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);
|
|
|