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
This commit is contained in:
parent
59823f7f3b
commit
6db9375b4f
@ -8,25 +8,9 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "Sk2DPathEffect.h"
|
#include "Sk2DPathEffect.h"
|
||||||
#include "SkBlitter.h"
|
|
||||||
#include "SkFlattenableBuffers.h"
|
#include "SkFlattenableBuffers.h"
|
||||||
#include "SkPath.h"
|
#include "SkPath.h"
|
||||||
#include "SkScan.h"
|
#include "SkRegion.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;
|
|
||||||
};
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
Sk2DPathEffect::Sk2DPathEffect(const SkMatrix& mat) : fMatrix(mat) {
|
Sk2DPathEffect::Sk2DPathEffect(const SkMatrix& mat) : fMatrix(mat) {
|
||||||
fMatrixIsInvertible = mat.invert(&fInverse);
|
fMatrixIsInvertible = mat.invert(&fInverse);
|
||||||
@ -37,7 +21,6 @@ bool Sk2DPathEffect::filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Sk2DPathEffectBlitter blitter(this, dst);
|
|
||||||
SkPath tmp;
|
SkPath tmp;
|
||||||
SkIRect ir;
|
SkIRect ir;
|
||||||
|
|
||||||
@ -45,7 +28,17 @@ bool Sk2DPathEffect::filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*) {
|
|||||||
tmp.getBounds().round(&ir);
|
tmp.getBounds().round(&ir);
|
||||||
if (!ir.isEmpty()) {
|
if (!ir.isEmpty()) {
|
||||||
this->begin(ir, dst);
|
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);
|
this->end(dst);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user