diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-10-13 15:11:59 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-10-13 15:11:59 +0000 |
commit | 34f7e47a3593911d03307a08e5af625b218ceec3 (patch) | |
tree | 4ad0d10c577e26cd84c0f10bf98a8598e5be70c8 /src/core/SkRasterClip.cpp | |
parent | e295313f019d36be5303673dd0c58c751e516fdb (diff) |
checkpoint -- more support changes for soft clipping
git-svn-id: http://skia.googlecode.com/svn/trunk@2475 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkRasterClip.cpp')
-rw-r--r-- | src/core/SkRasterClip.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/core/SkRasterClip.cpp b/src/core/SkRasterClip.cpp index d5ce395a0e..5588dfbc5c 100644 --- a/src/core/SkRasterClip.cpp +++ b/src/core/SkRasterClip.cpp @@ -12,6 +12,15 @@ SkRasterClip::SkRasterClip() { fIsBW = true; } +SkRasterClip::SkRasterClip(const SkRasterClip& src) { + fIsBW = src.fIsBW; + if (fIsBW) { + fBW = src.fBW; + } else { + fAA = src.fAA; + } +} + SkRasterClip::SkRasterClip(const SkIRect& bounds) : fBW(bounds) { fIsBW = true; } @@ -141,6 +150,32 @@ bool SkRasterClip::op(const SkRect& r, SkRegion::Op op, bool doAA) { } } +void SkRasterClip::translate(int dx, int dy, SkRasterClip* dst) const { + if (NULL == dst) { + return; + } + + if (this->isEmpty()) { + dst->setEmpty(); + return; + } + if (0 == (dx | dy)) { + *dst = *this; + return; + } + + dst->fIsBW = fIsBW; + if (fIsBW) { + fBW.translate(dx, dy, &dst->fBW); + dst->fAA.setEmpty(); + } else { + fAA.translate(dx, dy, &dst->fAA); + dst->fBW.setEmpty(); + } +} + +/////////////////////////////////////////////////////////////////////////////// + const SkRegion& SkRasterClip::forceGetBW() { if (!fIsBW) { fBW.setRect(fAA.getBounds()); |