aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkRegion.cpp9
-rw-r--r--tests/RegionTest.cpp2
2 files changed, 8 insertions, 3 deletions
diff --git a/src/core/SkRegion.cpp b/src/core/SkRegion.cpp
index 0dcacd849e..f6fc2dc6c5 100644
--- a/src/core/SkRegion.cpp
+++ b/src/core/SkRegion.cpp
@@ -338,6 +338,10 @@ bool SkRegion::contains(int32_t x, int32_t y) const {
return false;
}
+static SkRegion::RunType scanline_bottom(const SkRegion::RunType runs[]) {
+ return runs[0];
+}
+
static const SkRegion::RunType* scanline_next(const SkRegion::RunType runs[]) {
// skip [B N [L R]... S]
return runs + 2 + runs[1] * 2 + 1;
@@ -370,13 +374,14 @@ bool SkRegion::contains(const SkIRect& r) const {
SkASSERT(this->isComplex());
const RunType* scanline = fRunHead->findScanline(r.fTop);
-
+ RunType bottom;
do {
if (!scanline_contains(scanline, r.fLeft, r.fRight)) {
return false;
}
+ bottom = scanline_bottom(scanline);
scanline = scanline_next(scanline);
- } while (r.fBottom >= scanline[0]);
+ } while (r.fBottom > bottom);
return true;
}
diff --git a/tests/RegionTest.cpp b/tests/RegionTest.cpp
index f3d1e0b5a1..e629a9eb93 100644
--- a/tests/RegionTest.cpp
+++ b/tests/RegionTest.cpp
@@ -15,7 +15,7 @@ static void Union(SkRegion* rgn, const SkIRect& rect) {
#define TEST_NO_INTERSECT(rgn, rect) REPORTER_ASSERT(reporter, !rgn.intersects(rect))
#define TEST_INTERSECT(rgn, rect) REPORTER_ASSERT(reporter, rgn.intersects(rect))
-#define TEST_NO_CONTAINS(rgn, rect) REPORTER_ASSERT(reporter, rgn.contains(rect))
+#define TEST_NO_CONTAINS(rgn, rect) REPORTER_ASSERT(reporter, !rgn.contains(rect))
// inspired by http://code.google.com/p/skia/issues/detail?id=958
//