diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkDraw.cpp | 22 | ||||
-rw-r--r-- | src/core/SkMaskFilter.cpp | 5 | ||||
-rw-r--r-- | src/core/SkRasterizer.cpp | 3 |
3 files changed, 19 insertions, 11 deletions
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index 74d10b6891..914950c2af 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -985,11 +985,14 @@ void SkDraw::drawPath(const SkPath& origSrcPath, const SkPaint& origPaint, SkAutoBlitterChoose blitter(*fBitmap, *fMatrix, *paint); - // how does filterPath() know to fill or hairline the path??? <mrr> - if (paint->getMaskFilter() && - paint->getMaskFilter()->filterPath(*devPathPtr, *fMatrix, *fRC, - fBounder, blitter.get())) { - return; // filterPath() called the blitter, so we're done + if (paint->getMaskFilter()) { + SkPaint::Style style = doFill ? SkPaint::kFill_Style : + SkPaint::kStroke_Style; + if (paint->getMaskFilter()->filterPath(*devPathPtr, *fMatrix, *fRC, + fBounder, blitter.get(), + style)) { + return; // filterPath() called the blitter, so we're done + } } if (fBounder && !fBounder->doPath(*devPathPtr, *paint, doFill)) { @@ -2585,7 +2588,8 @@ static bool compute_bounds(const SkPath& devPath, const SkIRect* clipBounds, return true; } -static void draw_into_mask(const SkMask& mask, const SkPath& devPath) { +static void draw_into_mask(const SkMask& mask, const SkPath& devPath, + SkPaint::Style style) { SkBitmap bm; SkDraw draw; SkRasterClip clip; @@ -2605,12 +2609,14 @@ static void draw_into_mask(const SkMask& mask, const SkPath& devPath) { draw.fMatrix = &matrix; draw.fBounder = NULL; paint.setAntiAlias(true); + paint.setStyle(style); draw.drawPath(devPath, paint); } bool SkDraw::DrawToMask(const SkPath& devPath, const SkIRect* clipBounds, SkMaskFilter* filter, const SkMatrix* filterMatrix, - SkMask* mask, SkMask::CreateMode mode) { + SkMask* mask, SkMask::CreateMode mode, + SkPaint::Style style) { if (SkMask::kJustRenderImage_CreateMode != mode) { if (!compute_bounds(devPath, clipBounds, filter, filterMatrix, &mask->fBounds)) return false; @@ -2629,7 +2635,7 @@ bool SkDraw::DrawToMask(const SkPath& devPath, const SkIRect* clipBounds, } if (SkMask::kJustComputeBounds_CreateMode != mode) { - draw_into_mask(*mask, devPath); + draw_into_mask(*mask, devPath, style); } return true; diff --git a/src/core/SkMaskFilter.cpp b/src/core/SkMaskFilter.cpp index 42d07a6db0..75e38ce734 100644 --- a/src/core/SkMaskFilter.cpp +++ b/src/core/SkMaskFilter.cpp @@ -21,11 +21,12 @@ bool SkMaskFilter::filterMask(SkMask*, const SkMask&, const SkMatrix&, bool SkMaskFilter::filterPath(const SkPath& devPath, const SkMatrix& matrix, const SkRasterClip& clip, SkBounder* bounder, - SkBlitter* blitter) { + SkBlitter* blitter, SkPaint::Style style) { SkMask srcM, dstM; if (!SkDraw::DrawToMask(devPath, &clip.getBounds(), this, &matrix, &srcM, - SkMask::kComputeBoundsAndRenderImage_CreateMode)) { + SkMask::kComputeBoundsAndRenderImage_CreateMode, + style)) { return false; } SkAutoMaskFreeImage autoSrc(srcM.fImage); diff --git a/src/core/SkRasterizer.cpp b/src/core/SkRasterizer.cpp index d5023b3044..0a0a959452 100644 --- a/src/core/SkRasterizer.cpp +++ b/src/core/SkRasterizer.cpp @@ -43,6 +43,7 @@ bool SkRasterizer::onRasterize(const SkPath& fillPath, const SkMatrix& matrix, SkPath devPath; fillPath.transform(matrix, &devPath); - return SkDraw::DrawToMask(devPath, clipBounds, NULL, NULL, mask, mode); + return SkDraw::DrawToMask(devPath, clipBounds, NULL, NULL, mask, mode, + SkPaint::kFill_Style); } |