diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkDraw.cpp | 22 | ||||
-rw-r--r-- | src/core/SkMaskFilter.cpp | 5 | ||||
-rw-r--r-- | src/core/SkRasterizer.cpp | 3 | ||||
-rw-r--r-- | src/device/xps/SkXPSDevice.cpp | 3 | ||||
-rw-r--r-- | src/effects/SkLayerRasterizer.cpp | 3 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 3 |
6 files changed, 25 insertions, 14 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); } diff --git a/src/device/xps/SkXPSDevice.cpp b/src/device/xps/SkXPSDevice.cpp index f287087204..c803b7a29b 100644 --- a/src/device/xps/SkXPSDevice.cpp +++ b/src/device/xps/SkXPSDevice.cpp @@ -1784,7 +1784,8 @@ void SkXPSDevice::drawPath(const SkDraw& d, filter, //just to compute how much to draw. &matrix, &rasteredMask, - SkMask::kComputeBoundsAndRenderImage_CreateMode)) { + SkMask::kComputeBoundsAndRenderImage_CreateMode, + SkPaint::kFill_Style)) { SkAutoMaskFreeImage rasteredAmi(rasteredMask.fImage); mask = &rasteredMask; diff --git a/src/effects/SkLayerRasterizer.cpp b/src/effects/SkLayerRasterizer.cpp index 81263d13d1..8899b4216a 100644 --- a/src/effects/SkLayerRasterizer.cpp +++ b/src/effects/SkLayerRasterizer.cpp @@ -74,7 +74,8 @@ static bool compute_bounds(const SkDeque& layers, const SkPath& path, SkMask mask; if (!SkDraw::DrawToMask(devPath, clipBounds, paint.getMaskFilter(), &matrix, &mask, - SkMask::kJustComputeBounds_CreateMode)) { + SkMask::kJustComputeBounds_CreateMode, + SkPaint::kFill_Style)) { return false; } diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 9113fba236..750a4aa80f 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -899,7 +899,8 @@ bool drawWithMaskFilter(GrContext* context, const SkPath& path, SkMask srcM, dstM; if (!SkDraw::DrawToMask(path, &clip.getBounds(), filter, &matrix, &srcM, - SkMask::kComputeBoundsAndRenderImage_CreateMode)) { + SkMask::kComputeBoundsAndRenderImage_CreateMode, + SkPaint::kFill_Style)) { return false; } SkAutoMaskFreeImage autoSrc(srcM.fImage); |