Lines Matching defs:rect

46     //                          .actual().rect(r, GrAA::kYes, SkClipOp::kIntersect)
55 // .expect().rect(r, GrAA::kYes, SkClipOp::kIntersect)
111 // Add rect, rrect, or paths to the list of elements, possibly overriding the last set
113 ElementsBuilder& rect(const SkRect& rect) {
114 return this->rect(rect, fLocalToDevice, fAA, fOp);
116 ElementsBuilder& rect(const SkRect& rect, GrAA aa, SkClipOp op) {
117 return this->rect(rect, fLocalToDevice, aa, op);
119 ElementsBuilder& rect(const SkRect& rect, const SkMatrix& m, GrAA aa, SkClipOp op) {
120 fElements->push_back({GrShape(rect), m, op, aa});
263 elementBounds = GrClip::GetPixelIBounds(e.fShape.rect(), e.fAA,
286 return a.fShape.rect() == b.fShape.rect();
322 cs.clipRect(e.fLocalToDevice, e.fShape.rect(), e.fAA, e.fOp);
524 .rect(fracRect1).rect(fracRect2)
526 .expect().aa().intersect().rect(fracIntersect).finishElements()
533 .rect(fracRect1).rect(fracRect2)
535 .expect().nonAA().intersect().rect(fracIntersect).finishElements()
542 .aa().rect(pixelAligned).nonAA().rect(fracRect1)
544 .expect().nonAA().intersect().rect(alignedIntersect).finishElements()
551 .aa().rect(fracRect1).nonAA().rect(pixelAligned)
553 .expect().aa().intersect().rect(alignedIntersect).finishElements()
560 .aa().rect(fracRect1).nonAA().rect(fracRect2)
577 .actual().aa().intersect().rect(r1)
578 .difference().rect(r2)
604 .rect(fracRect1).rect(fracRect2)
607 .rect(fracIntersect).finishElements()
614 .rect(fracRect1).rect(fracRect2)
617 .rect(fracIntersect).finishElements()
624 .aa().rect(pixelAligned).nonAA().rect(fracRect1)
631 // Tests that intersection of two round rects can simplify to a single round rect when they have
689 // Tests that intersection of a round rect and rect can simplify to a new round rect or even a rect.
697 // Rect + RRect becomes a round rect with some square corners
702 .actual().intersect().aa().rrect(rrect).rect(cutTop).finishElements()
707 // Rect + RRect becomes a rect
709 run_test_case(r, TestCase::Build("to-rect", kDeviceBounds)
710 .actual().intersect().aa().rrect(rrect).rect(cutMid).finishElements()
711 .expect().intersect().aa().rect(cutRect).finishElements()
715 // But they can only combine when the intersecting shape is representable as a [r]rect.
718 .actual().intersect().aa().rrect(rrect).rect(cutRect).finishElements()
724 // Tests that a rect shape is actually pre-clipped to the device bounds
732 run_test_case(r, TestCase::Build("device-aa-rect", kDeviceBounds)
733 .actual().intersect().aa().rect(crossesDeviceEdge).finishElements()
734 .expect().intersect().aa().rect(insideDevice).finishElements()
738 run_test_case(r, TestCase::Build("device-nonaa-rect", kDeviceBounds)
739 .actual().intersect().nonAA().rect(crossesDeviceEdge).finishElements()
740 .expect().intersect().nonAA().rect(insideDevice).finishElements()
796 // Rect path -> rect element
797 SkRect rect = {0.f, 2.f, 10.f, 15.4f};
799 rectPath.addRect(rect);
800 run_test_case(r, TestCase::Build("rect", kDeviceBounds)
802 .expect().rect(rect).finishElements()
808 ovalPath.addOval(rect);
811 .expect().rrect(SkRRect::MakeOval(rect)).finishElements()
816 SkRRect rrect = SkRRect::MakeRectXY(rect, 2.f, 2.f);
830 // Same rect
831 SkRect rect = {5.3f, 62.f, 20.f, 85.f};
833 .actual().rect(rect).rect(rect).rect(rect).finishElements()
834 .expect().rect(rect).finishElements()
838 lm.setRotate(30.f, rect.centerX(), rect.centerY());
840 .actual().localToDevice(lm).rect(rect).rect(rect).rect(rect)
842 .expect().localToDevice(lm).rect(rect).finishElements()
847 SkRRect rrect = SkRRect::MakeRectXY(rect, 5.f, 2.5f);
862 .actual().path(make_octagon(rect)).path(make_octagon(rect))
864 .expect().path(make_octagon(rect)).finishElements()
869 .path(make_octagon(rect)).path(make_octagon(rect))
871 .expect().localToDevice(lm).path(make_octagon(rect))
902 SkRect rect = {0.f, 0.f, 16.f, 17.f};
904 rectPath.addRect(rect);
909 SkPath complexPath = make_octagon(rect);
913 // Inverse filled rect + intersect -> diff rect
914 run_test_case(r, TestCase::Build("inverse-rect-intersect", kDeviceBounds)
916 .expect().aa().difference().rect(rect).finishElements()
920 // Inverse filled rect + difference -> int. rect
921 run_test_case(r, TestCase::Build("inverse-rect-difference", kDeviceBounds)
923 .expect().aa().intersect().rect(rect).finishElements()
956 .rect(offscreenRect)
962 run_test_case(r, TestCase::Build("intersect-rect", kDeviceBounds)
964 .rect(offscreenRect)
984 .rect(offscreenRect)
990 run_test_case(r, TestCase::Build("difference-rect", kDeviceBounds)
992 .rect(offscreenRect)
1016 .actual().intersect().rect(SkRect::MakeEmpty()).finishElements()
1022 .actual().difference().rect(SkRect::MakeEmpty()).finishElements()
1028 .actual().difference().rrect(rrect).rect(SkRect::MakeEmpty())
1044 .actual().nonAA().difference().rect(rightSide).finishElements()
1045 .expect().nonAA().difference().rect(clipped).finishElements()
1060 .actual().rect(intR1, GrAA::kYes, SkClipOp::kIntersect)
1061 .rect(diff, GrAA::kYes, SkClipOp::kDifference)
1062 .rect(intR2, GrAA::kYes, SkClipOp::kIntersect)
1064 .expect().rect(intCombo, GrAA::kYes, SkClipOp::kIntersect)
1065 .rect(diff, GrAA::kYes, SkClipOp::kDifference)
1108 // Tests that a single rect is treated as kDeviceRect state when it's axis-aligned and intersect.
1113 SkRect rect = {0, 0, 20, 20};
1114 run_test_case(r, TestCase::Build("device-rect", kDeviceBounds)
1115 .actual().intersect().aa().rect(rect).finishElements()
1122 run_test_case(r, TestCase::Build("unaligned-rect", kDeviceBounds)
1123 .actual().localToDevice(lm).intersect().aa().rect(rect)
1130 run_test_case(r, TestCase::Build("diff-rect", kDeviceBounds)
1131 .actual().difference().aa().rect(rect).finishElements()
1142 SkRect rect = {0, 0, 20, 20};
1143 SkRRect rrect = SkRRect::MakeRectXY(rect, 5.f, 5.f);
1178 SkRect rect = {0.f, 0.f, 10.f, 10.f};
1179 run_test_case(r, TestCase::Build("st+rect", kDeviceBounds)
1180 .actual().rect(rect, lm, GrAA::kYes, SkClipOp::kIntersect)
1182 .expect().rect(lm.mapRect(rect), GrAA::kYes, SkClipOp::kIntersect)
1188 SkRRect localRRect = SkRRect::MakeRectXY(rect, 2.f, 2.f);
1201 .actual().intersect().localToDevice(lm).path(make_octagon(rect))
1208 // Tests that rect-stays-rect matrices that are not scale+translate matrices are pre-applied.
1217 SkRect rect = {0.f, 0.f, 10.f, 10.f};
1218 run_test_case(r, TestCase::Build("r90+rect", kDeviceBounds)
1219 .actual().rect(rect, lm, GrAA::kYes, SkClipOp::kIntersect)
1221 .expect().rect(lm.mapRect(rect), GrAA::kYes, SkClipOp::kIntersect)
1227 SkRRect localRRect = SkRRect::MakeRectXY(rect, 2.f, 2.f);
1240 .actual().intersect().localToDevice(lm).path(make_octagon(rect))
1247 // Tests that a convex path element can contain a rect or round rect, allowing the stack to be
1252 SkRect rect = {15.f, 15.f, 30.f, 30.f};
1253 SkRRect rrect = SkRRect::MakeRectXY(rect, 5.f, 5.f);
1254 SkPath bigPath = make_octagon(rect.makeOutset(10.f, 10.f), 5.f, 5.f);
1257 run_test_case(r, TestCase::Build("convex+rect-intersect", kDeviceBounds)
1258 .actual().aa().intersect().rect(rect).path(bigPath).finishElements()
1259 .expect().aa().intersect().rect(rect).finishElements()
1269 run_test_case(r, TestCase::Build("convex+rect-difference", kDeviceBounds)
1270 .actual().aa().difference().rect(rect).path(bigPath).finishElements()
1282 run_test_case(r, TestCase::Build("convex-diff+rect-int", kDeviceBounds)
1283 .actual().aa().intersect().rect(rect)
1294 run_test_case(r, TestCase::Build("convex-int+rect-diff", kDeviceBounds)
1295 .actual().aa().intersect().path(bigPath).difference().rect(rect)
1322 run_test_case(r, TestCase::Build("rect-rect-ii", kDeviceBounds)
1323 .actual().rect(bigR, lm1, GrAA::kYes, SkClipOp::kIntersect)
1324 .rect(smR, lm2, GrAA::kYes, SkClipOp::kIntersect)
1326 .expect().rect(smR, lm2, GrAA::kYes, SkClipOp::kIntersect)
1338 run_test_case(r, TestCase::Build("rect-rrect-ii", kDeviceBounds)
1339 .actual().rect(bigR, lm1, GrAA::kYes, SkClipOp::kIntersect)
1346 run_test_case(r, TestCase::Build("rrect-rect-ii", kDeviceBounds)
1348 .rect(smR, lm2, GrAA::kYes, SkClipOp::kIntersect)
1350 .expect().rect(smR, lm2, GrAA::kYes, SkClipOp::kIntersect)
1356 run_test_case(r, TestCase::Build("rect-rect-dd", kDeviceBounds)
1357 .actual().rect(bigR, lm1, GrAA::kYes, SkClipOp::kDifference)
1358 .rect(smR, lm2, GrAA::kYes, SkClipOp::kDifference)
1360 .expect().rect(bigR, lm1, GrAA::kYes, SkClipOp::kDifference)
1372 run_test_case(r, TestCase::Build("rect-rrect-dd", kDeviceBounds)
1373 .actual().rect(bigR, lm1, GrAA::kYes, SkClipOp::kDifference)
1376 .expect().rect(bigR, lm1, GrAA::kYes, SkClipOp::kDifference)
1380 run_test_case(r, TestCase::Build("rrect-rect-dd", kDeviceBounds)
1382 .rect(smR, lm2, GrAA::kYes, SkClipOp::kDifference)
1391 .actual().rect(bigR, lm1, GrAA::kYes, SkClipOp::kDifference)
1392 .rect(smR, lm2, GrAA::kYes, SkClipOp::kIntersect)
1403 .actual().rect(bigR, lm1, GrAA::kYes, SkClipOp::kDifference)
1410 .rect(smR, lm2, GrAA::kYes, SkClipOp::kIntersect)
1417 .actual().rect(bigR, lm1, GrAA::kYes, SkClipOp::kIntersect)
1418 .rect(smR, lm2, GrAA::kYes, SkClipOp::kDifference)
1432 .rect(smR, lm2, GrAA::kYes, SkClipOp::kDifference)
1438 .actual().rect(bigR, lm1, GrAA::kYes, SkClipOp::kIntersect)
1460 .actual().rect(r1, lm1, GrAA::kYes, SkClipOp::kIntersect)
1461 .rect(r2Safe, lm2, GrAA::kNo, SkClipOp::kIntersect)
1463 .expect().rect(r2Safe, lm2, GrAA::kNo, SkClipOp::kIntersect)
1469 .actual().rect(r1, lm1, GrAA::kNo, SkClipOp::kIntersect)
1470 .rect(r2Safe, lm2, GrAA::kYes, SkClipOp::kIntersect)
1472 .expect().rect(r2Safe, lm2, GrAA::kYes, SkClipOp::kIntersect)
1479 .actual().rect(r1, lm1, GrAA::kYes, SkClipOp::kIntersect)
1480 .rect(r2Unsafe, lm2, GrAA::kNo, SkClipOp::kIntersect)
1486 .actual().rect(r1, lm1, GrAA::kNo, SkClipOp::kIntersect)
1487 .rect(r2Unsafe, lm2, GrAA::kYes, SkClipOp::kIntersect)
1498 SkRect rect = SkRect::Make(kDeviceBounds).makeOutset(10.f, 10.f);
1499 SkRRect rrect = SkRRect::MakeRectXY(rect, 10.f, 10.f);
1500 SkPath convex = make_octagon(rect, 10.f, 10.f);
1503 run_test_case(r, TestCase::Build("rect-intersect", kDeviceBounds)
1504 .actual().intersect().rect(rect).finishElements()
1517 run_test_case(r, TestCase::Build("rect-difference", kDeviceBounds)
1518 .actual().difference().rect(rect).finishElements()
1542 .actual().aa().intersect().rect(rt).rrect(rr).path(p).finishElements()
1548 .actual().nonAA().difference().rect(rt).rrect(rr).path(p)
1554 // I+D from rect
1556 .actual().aa().intersect().rect(rt)
1559 .expect().aa().intersect().rect(rt).finishElements()
1566 .nonAA().difference().rect(rt).path(p)
1575 .nonAA().difference().rect(rt).rrect(rr)
1612 // Shrink the rect for difference ops, otherwise in the rect testcase
1617 b.actual().rect(r, GrAA::kYes, op);
1621 b.expect().rect(r, GrAA::kYes, SkClipOp::kDifference);
1655 b.expect().rect(expectedRectIntersection, GrAA::kYes, SkClipOp::kIntersect);
1693 "Clip did not become a device rect");
1696 REPORTER_ASSERT(r, replaceElement.fShape.rect() == SkRect::Make(replace) &&
1767 // The stack reports elements newest first, but the non-AA rect op was combined in place with
1768 // the first aa rect, so we should see nonAAPath as AA, and then the intersection of rects.
1772 REPORTER_ASSERT(r, nonAARectElement.fShape.isRect(), "Expected rect element");
1774 "Axis-aligned non-AA rect ignores forceAA");
1775 REPORTER_ASSERT(r, nonAARectElement.fShape.rect() == nonAARect,
1786 REPORTER_ASSERT(r, aaRectElement.fShape.isRect(), "Expected rect element");
1787 REPORTER_ASSERT(r, aaRectElement.fShape.rect() == aaRect,
1822 SkRect rect = {10.f, 10.f, 40.f, 40.f};
1823 SkRRect bigRRect = SkRRect::MakeRectXY(rect.makeOutset(5.f, 5.f), 5.f, 5.f);
1826 result = cs.preApply(rect, GrAA::kYes);
1838 SkPath path = make_octagon(rect.makeOutset(5.f, 5.f), 5.f, 5.f);
1845 // Intersecting clip is kDeviceRect for axis-aligned rect clip
1847 cs.clipRect(SkMatrix::I(), rect, GrAA::kYes, SkClipOp::kIntersect);
1848 result = cs.preApply(rect.makeOffset(2.f, 2.f), GrAA::kNo);
1852 result.fRRect == SkRRect::MakeRect(rect),
1858 SkRRect clipRRect = SkRRect::MakeRectXY(rect, 5.f, 5.f);
1860 result = cs.preApply(rect.makeOffset(2.f, 2.f), GrAA::kNo);
1911 // Adding a clip shader on top of a device rect clip should prevent preApply from reporting
1912 // it as a device rect
1918 "A clip shader should not produce a device rect from preApply");
1973 "Draw rect should be clipped to device rect");
1979 // Non-AA device rect intersect is just a scissor
1991 REPORTER_ASSERT(r, effect == GrClip::Effect::kClipped, "Draw should be clipped by rect");
1997 out.scissorState().rect() == expectedScissor,
2012 // Axis-aligned rect can be an analytic FP
2021 // Axis-aligned round rect can be an analytic FP
2023 SkRect rect = {4.f, 8.f, 20.f, 20.f};
2025 cs.clipRRect(SkMatrix::I(), SkRRect::MakeRectXY(rect, 3.f, 3.f), GrAA::kYes,
2027 testHasCoverageFP(rect.makeOffset(2.f, 2.f));
2031 // Transformed rect can be an analytic FP
2033 SkRect rect = {14.f, 8.f, 30.f, 22.34f};
2036 cs.clipRect(rot, rect, GrAA::kNo, SkClipOp::kIntersect);
2037 testHasCoverageFP(rot.mapRect(rect));
2043 SkRect rect = {15.f, 15.f, 45.f, 45.f};
2045 cs.clipPath(SkMatrix::I(), make_octagon(rect), GrAA::kYes, SkClipOp::kIntersect);
2046 testHasCoverageFP(rect.makeOutset(2.f, 2.f));