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 |