| Index: src/core/SkDraw.cpp
|
| diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
|
| index b77eb430c7be6ea33700a193a376d1b47ca719b8..9bc29b333a8123e5145fda6269ad2f698493bd27 100644
|
| --- a/src/core/SkDraw.cpp
|
| +++ b/src/core/SkDraw.cpp
|
| @@ -54,9 +54,10 @@ public:
|
| SkBlitter* get() const { return fBlitter; }
|
|
|
| void choose(const SkBitmap& device, const SkMatrix& matrix,
|
| - const SkPaint& paint) {
|
| + const SkPaint& paint, bool drawCoverage = false) {
|
| SkASSERT(!fBlitter);
|
| - fBlitter = SkBlitter::Choose(device, matrix, paint, &fAllocator);
|
| + fBlitter = SkBlitter::Choose(device, matrix, paint, &fAllocator,
|
| + drawCoverage);
|
| }
|
|
|
| private:
|
| @@ -992,7 +993,7 @@ DRAW_PATH:
|
|
|
| void SkDraw::drawPath(const SkPath& origSrcPath, const SkPaint& origPaint,
|
| const SkMatrix* prePathMatrix, bool pathIsMutable,
|
| - bool drawCoverage) const {
|
| + bool drawCoverage, SkBlitter* customBlitter) const {
|
| SkDEBUGCODE(this->validate();)
|
|
|
| // nothing to draw
|
| @@ -1078,12 +1079,19 @@ void SkDraw::drawPath(const SkPath& origSrcPath, const SkPaint& origPaint,
|
| // transform the path into device space
|
| pathPtr->transform(*matrix, devPathPtr);
|
|
|
| - SkAutoBlitterChoose blitter(*fBitmap, *fMatrix, *paint, drawCoverage);
|
| + SkBlitter* blitter = NULL;
|
| + SkAutoBlitterChoose blitterStorage;
|
| + if (NULL == customBlitter) {
|
| + blitterStorage.choose(*fBitmap, *fMatrix, *paint, drawCoverage);
|
| + blitter = blitterStorage.get();
|
| + } else {
|
| + blitter = customBlitter;
|
| + }
|
|
|
| if (paint->getMaskFilter()) {
|
| SkPaint::Style style = doFill ? SkPaint::kFill_Style :
|
| SkPaint::kStroke_Style;
|
| - if (paint->getMaskFilter()->filterPath(*devPathPtr, *fMatrix, *fRC, blitter.get(), style)) {
|
| + if (paint->getMaskFilter()->filterPath(*devPathPtr, *fMatrix, *fRC, blitter, style)) {
|
| return; // filterPath() called the blitter, so we're done
|
| }
|
| }
|
| @@ -1102,7 +1110,7 @@ void SkDraw::drawPath(const SkPath& origSrcPath, const SkPaint& origPaint,
|
| proc = SkScan::HairPath;
|
| }
|
| }
|
| - proc(*devPathPtr, *fRC, blitter.get());
|
| + proc(*devPathPtr, *fRC, blitter);
|
| }
|
|
|
| /** For the purposes of drawing bitmaps, if a matrix is "almost" translate
|
|
|