From 6db9375b4f695c68a4e56e38bcd70f983440c2d5 Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Thu, 9 Aug 2012 19:18:02 +0000 Subject: [PATCH] use SkRegion instead of SkScan/SkBlitter, as we want to privatize the latter git-svn-id: http://skia.googlecode.com/svn/trunk@5037 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/effects/Sk2DPathEffect.cpp | 35 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/effects/Sk2DPathEffect.cpp b/src/effects/Sk2DPathEffect.cpp index 1a09a92d6b..a9a239f3c1 100644 --- a/src/effects/Sk2DPathEffect.cpp +++ b/src/effects/Sk2DPathEffect.cpp @@ -8,25 +8,9 @@ #include "Sk2DPathEffect.h" -#include "SkBlitter.h" #include "SkFlattenableBuffers.h" #include "SkPath.h" -#include "SkScan.h" - -class Sk2DPathEffectBlitter : public SkBlitter { -public: - Sk2DPathEffectBlitter(Sk2DPathEffect* pe, SkPath* dst) - : fPE(pe), fDst(dst) {} - - virtual void blitH(int x, int y, int count) { - fPE->nextSpan(x, y, count, fDst); - } -private: - Sk2DPathEffect* fPE; - SkPath* fDst; -}; - -/////////////////////////////////////////////////////////////////////////////// +#include "SkRegion.h" Sk2DPathEffect::Sk2DPathEffect(const SkMatrix& mat) : fMatrix(mat) { fMatrixIsInvertible = mat.invert(&fInverse); @@ -37,15 +21,24 @@ bool Sk2DPathEffect::filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*) { return false; } - Sk2DPathEffectBlitter blitter(this, dst); - SkPath tmp; - SkIRect ir; + SkPath tmp; + SkIRect ir; src.transform(fInverse, &tmp); tmp.getBounds().round(&ir); if (!ir.isEmpty()) { this->begin(ir, dst); - SkScan::FillPath(tmp, ir, &blitter); + + SkRegion rgn; + rgn.setPath(tmp, SkRegion(ir)); + SkRegion::Iterator iter(rgn); + for (; !iter.done(); iter.next()) { + const SkIRect& rect = iter.rect(); + for (int y = rect.fTop; y < rect.fBottom; ++y) { + this->nextSpan(rect.fLeft, y, rect.width(), dst); + } + } + this->end(dst); } return true;