static bool operator==(const SkRasterClip& a, const SkRasterClip& b) { if (a.isEmpty()) { return b.isEmpty(); } if (b.isEmpty()) { return false; } SkMask ma, mb; copyToMask(a, &ma); copyToMask(b, &mb); SkAutoMaskFreeImage aCleanUp(ma.fImage); SkAutoMaskFreeImage bCleanUp(mb.fImage); return ma == mb; }
static void copyToMask(const SkRasterClip& rc, SkMask* mask) { if (rc.isAA()) { rc.aaRgn().copyToMask(mask); } else { copyToMask(rc.bwRgn(), mask); } }
static bool operator==(const SkRegion& rgn, const SkAAClip& aaclip) { SkMask mask0, mask1; copyToMask(rgn, &mask0); aaclip.copyToMask(&mask1); bool eq = (mask0 == mask1); SkMask::FreeImage(mask0.fImage); SkMask::FreeImage(mask1.fImage); return eq; }
static void test_irect(skiatest::Reporter* reporter) { SkRandom rand; for (int i = 0; i < 10000; i++) { SkAAClip clip0, clip1; SkRegion rgn0, rgn1; SkIRect r0, r1; rand_irect(&r0, 10, rand); rand_irect(&r1, 10, rand); clip0.setRect(r0); clip1.setRect(r1); rgn0.setRect(r0); rgn1.setRect(r1); for (size_t j = 0; j < SK_ARRAY_COUNT(gRgnOps); ++j) { SkRegion::Op op = gRgnOps[j]; SkAAClip clip2; SkRegion rgn2; bool nonEmptyAA = clip2.op(clip0, clip1, op); bool nonEmptyBW = rgn2.op(rgn0, rgn1, op); if (nonEmptyAA != nonEmptyBW || clip2.getBounds() != rgn2.getBounds()) { ERRORF(reporter, "%s %s " "[%d %d %d %d] %s [%d %d %d %d] = BW:[%d %d %d %d] AA:[%d %d %d %d]\n", nonEmptyAA == nonEmptyBW ? "true" : "false", clip2.getBounds() == rgn2.getBounds() ? "true" : "false", r0.fLeft, r0.fTop, r0.right(), r0.bottom(), gRgnOpNames[j], r1.fLeft, r1.fTop, r1.right(), r1.bottom(), rgn2.getBounds().fLeft, rgn2.getBounds().fTop, rgn2.getBounds().right(), rgn2.getBounds().bottom(), clip2.getBounds().fLeft, clip2.getBounds().fTop, clip2.getBounds().right(), clip2.getBounds().bottom()); } SkMask maskBW, maskAA; copyToMask(rgn2, &maskBW); clip2.copyToMask(&maskAA); SkAutoMaskFreeImage freeBW(maskBW.fImage); SkAutoMaskFreeImage freeAA(maskAA.fImage); REPORTER_ASSERT(reporter, maskBW == maskAA); } } }