Lines Matching refs:stack
40 // Build up a clip stack with a path, an empty clip, and a rect.
131 static void assert_count(skiatest::Reporter* reporter, const SkClipStack& stack,
133 SkClipStack::B2TIter iter(stack);
144 SkClipStack stack;
155 stack.clipRect(gRects[i], SkMatrix::I(), SkClipOp::kDifference, false);
158 assert_count(reporter, stack, 4);
164 SkClipStack::B2TIter iter(stack);
180 SkClipStack::Iter iter(stack, SkClipStack::Iter::kTop_IterStart);
196 SkClipStack::Iter iter(stack, SkClipStack::Iter::kBottom_IterStart);
246 SkClipStack stack;
255 stack.save();
270 stack.clipRect(rectA, SkMatrix::I(), SkClipOp::kIntersect, false);
271 stack.clipRect(rectB, SkMatrix::I(), gOps[op], false);
274 stack.clipRRect(rrectA, SkMatrix::I(), SkClipOp::kIntersect, false);
275 stack.clipRRect(rrectB, SkMatrix::I(), gOps[op], false);
278 stack.clipPath(pathA, SkMatrix::I(), SkClipOp::kIntersect, false);
279 stack.clipPath(pathB, SkMatrix::I(), gOps[op], false);
283 REPORTER_ASSERT(reporter, !stack.isWideOpen());
284 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID != stack.getTopmostGenID());
286 stack.getConservativeBounds(0, 0, 100, 100, &devClipBound,
300 stack.restore();
308 // Empty stack is wide open. Wide open stack means that gen id is wide open.
309 SkClipStack stack;
310 REPORTER_ASSERT(reporter, stack.isWideOpen());
311 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmostGenID());
321 SkClipStack stack;
323 REPORTER_ASSERT(reporter, stack.isWideOpen());
324 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmostGenID());
329 SkClipStack stack;
334 stack.clipRect(emptyRect, SkMatrix::I(), SkClipOp::kDifference, false);
336 REPORTER_ASSERT(reporter, stack.isWideOpen());
337 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmostGenID());
342 SkClipStack stack;
344 stack.save();
346 stack.clipRect(rectA, SkMatrix::I(), SkClipOp::kIntersect, false);
348 REPORTER_ASSERT(reporter, !stack.isWideOpen());
349 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID != stack.getTopmostGenID());
351 stack.restore();
353 REPORTER_ASSERT(reporter, stack.isWideOpen());
354 REPORTER_ASSERT(reporter, SkClipStack::kWideOpenGenID == stack.getTopmostGenID());
358 static int count(const SkClipStack& stack) {
360 SkClipStack::Iter iter(stack, SkClipStack::Iter::kTop_IterStart);
378 SkClipStack stack;
379 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
383 stack.getBounds(&bounds, &boundsType);
397 // the stack depth. BW replacing BW.
399 SkClipStack stack;
400 REPORTER_ASSERT(reporter, 0 == count(stack));
401 stack.replaceClip(rect, false);
402 REPORTER_ASSERT(reporter, 1 == count(stack));
403 stack.replaceClip(rect, false);
404 REPORTER_ASSERT(reporter, 1 == count(stack));
408 // the stack depth. AA replacing AA.
410 SkClipStack stack;
411 REPORTER_ASSERT(reporter, 0 == count(stack));
412 stack.replaceClip(rect, true);
413 REPORTER_ASSERT(reporter, 1 == count(stack));
414 stack.replaceClip(rect, true);
415 REPORTER_ASSERT(reporter, 1 == count(stack));
419 // the stack depth. BW replacing AA replacing BW.
421 SkClipStack stack;
422 REPORTER_ASSERT(reporter, 0 == count(stack));
423 stack.replaceClip(rect, false);
424 REPORTER_ASSERT(reporter, 1 == count(stack));
425 stack.replaceClip(rect, true);
426 REPORTER_ASSERT(reporter, 1 == count(stack));
427 stack.replaceClip(rect, false);
428 REPORTER_ASSERT(reporter, 1 == count(stack));
433 SkClipStack stack;
434 stack.replaceClip(rect, false);
435 stack.clipRect(rect2, SkMatrix::I(), SkClipOp::kIntersect, false);
436 REPORTER_ASSERT(reporter, 1 == count(stack));
438 stack.save();
439 stack.replaceClip(rect, false);
440 REPORTER_ASSERT(reporter, 2 == count(stack));
441 stack.getBounds(&bound, &type, &isIntersectionOfRects);
443 stack.restore();
444 REPORTER_ASSERT(reporter, 1 == count(stack));
446 stack.save();
447 stack.replaceClip(rect, false);
448 stack.replaceClip(rect, false);
449 REPORTER_ASSERT(reporter, 2 == count(stack));
450 stack.restore();
451 REPORTER_ASSERT(reporter, 1 == count(stack));
453 stack.save();
454 stack.replaceClip(rect, false);
455 stack.clipRect(rect2, SkMatrix::I(), SkClipOp::kIntersect, false);
456 stack.replaceClip(rect, false);
457 REPORTER_ASSERT(reporter, 2 == count(stack));
458 stack.restore();
459 REPORTER_ASSERT(reporter, 1 == count(stack));
465 auto replacePath = [](SkClipStack* stack, const SkPath& path, bool doAA) {
467 stack->replaceClip(wideOpen, false);
468 stack->clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, doAA);
476 // combine with prior elements, but the subsequent intersect cannot be combined so the stack
479 SkClipStack stack;
480 REPORTER_ASSERT(reporter, 0 == count(stack));
481 replacePath(&stack, path, false);
482 REPORTER_ASSERT(reporter, 2 == count(stack));
483 replacePath(&stack, path, false);
484 REPORTER_ASSERT(reporter, 2 == count(stack));
489 SkClipStack stack;
490 stack.replaceClip(rect, true);
491 REPORTER_ASSERT(reporter, 1 == count(stack));
492 replacePath(&stack, path, true);
493 REPORTER_ASSERT(reporter, 2 == count(stack));
513 SkClipStack stack;
514 stack.clipRect(overlapLeft, SkMatrix::I(), SkClipOp::kIntersect, false);
515 stack.clipRect(overlapRight, SkMatrix::I(), SkClipOp::kIntersect, false);
517 REPORTER_ASSERT(reporter, 1 == count(stack));
519 stack.getBounds(&bound, &type, &isIntersectionOfRects);
526 SkClipStack stack;
527 stack.clipRect(overlapLeft, SkMatrix::I(), SkClipOp::kIntersect, true);
528 stack.clipRect(overlapRight, SkMatrix::I(), SkClipOp::kIntersect, true);
530 REPORTER_ASSERT(reporter, 1 == count(stack));
532 stack.getBounds(&bound, &type, &isIntersectionOfRects);
539 SkClipStack stack;
540 stack.clipRect(overlapLeft, SkMatrix::I(), SkClipOp::kIntersect, true);
541 stack.clipRect(overlapRight, SkMatrix::I(), SkClipOp::kIntersect, false);
543 REPORTER_ASSERT(reporter, 2 == count(stack));
545 stack.getBounds(&bound, &type, &isIntersectionOfRects);
552 SkClipStack stack;
553 stack.clipRect(nestedParent, SkMatrix::I(), SkClipOp::kIntersect, true);
554 stack.clipRect(nestedChild, SkMatrix::I(), SkClipOp::kIntersect, false);
556 REPORTER_ASSERT(reporter, 1 == count(stack));
558 stack.getBounds(&bound, &type, &isIntersectionOfRects);
565 SkClipStack stack;
566 stack.clipRect(nestedParent, SkMatrix::I(), SkClipOp::kIntersect, false);
567 stack.clipRect(nestedChild, SkMatrix::I(), SkClipOp::kIntersect, true);
569 REPORTER_ASSERT(reporter, 1 == count(stack));
571 stack.getBounds(&bound, &type, &isIntersectionOfRects);
578 SkClipStack stack;
579 stack.clipRect(nestedChild, SkMatrix::I(), SkClipOp::kIntersect, false);
580 stack.clipRect(nestedParent, SkMatrix::I(), SkClipOp::kIntersect, true);
582 REPORTER_ASSERT(reporter, 2 == count(stack));
584 stack.getBounds(&bound, &type, &isIntersectionOfRects);
607 SkClipStack stack;
608 stack.clipRect(outsideRect, SkMatrix::I(), SkClipOp::kDifference, false);
610 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
615 SkClipStack stack;
616 stack.replaceClip(outsideRect, false);
617 REPORTER_ASSERT(reporter, true == stack.quickContains(testRect));
621 SkClipStack stack;
622 stack.clipRect(insideRect, SkMatrix::I(), SkClipOp::kIntersect, false);
623 stack.save(); // To prevent in-place substitution by replace OP
624 stack.replaceClip(outsideRect, false);
625 REPORTER_ASSERT(reporter, true == stack.quickContains(testRect));
626 stack.restore();
630 SkClipStack stack;
631 stack.clipRect(outsideRect, SkMatrix::I(), SkClipOp::kIntersect, false);
632 stack.save(); // To prevent in-place substitution by replace OP
633 stack.replaceClip(insideRect, false);
634 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
635 stack.restore();
640 SkClipStack stack;
641 stack.clipRect(insideRect, SkMatrix::I(), SkClipOp::kIntersect, false);
643 stack.clipPath(outsideCircle, SkMatrix::I(), SkClipOp::kIntersect, false);
644 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
649 SkClipStack stack;
650 stack.clipRect(outsideRect, SkMatrix::I(), SkClipOp::kIntersect, false);
651 REPORTER_ASSERT(reporter, true == stack.quickContains(testRect));
655 SkClipStack stack;
656 stack.clipRect(insideRect, SkMatrix::I(), SkClipOp::kIntersect, false);
657 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
661 SkClipStack stack;
662 stack.clipRect(intersectingRect, SkMatrix::I(), SkClipOp::kIntersect, false);
663 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
667 SkClipStack stack;
668 stack.clipRect(nonIntersectingRect, SkMatrix::I(), SkClipOp::kIntersect, false);
669 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
674 SkClipStack stack;
675 stack.clipPath(outsideCircle, SkMatrix::I(), SkClipOp::kIntersect, false);
676 REPORTER_ASSERT(reporter, true == stack.quickContains(testRect));
680 SkClipStack stack;
681 stack.clipPath(insideCircle, SkMatrix::I(), SkClipOp::kIntersect, false);
682 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
686 SkClipStack stack;
687 stack.clipPath(intersectingCircle, SkMatrix::I(), SkClipOp::kIntersect, false);
688 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
692 SkClipStack stack;
693 stack.clipPath(nonIntersectingCircle, SkMatrix::I(), SkClipOp::kIntersect, false);
694 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
699 SkClipStack stack;
703 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
704 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
708 SkClipStack stack;
712 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
713 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
717 SkClipStack stack;
721 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
722 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
726 SkClipStack stack;
730 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
731 REPORTER_ASSERT(reporter, true == stack.quickContains(testRect));
736 SkClipStack stack;
739 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
740 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
744 SkClipStack stack;
747 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
748 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
752 SkClipStack stack;
755 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
756 REPORTER_ASSERT(reporter, false == stack.quickContains(testRect));
760 SkClipStack stack;
763 stack.clipPath(path, SkMatrix::I(), SkClipOp::kIntersect, false);
764 REPORTER_ASSERT(reporter, true == stack.quickContains(testRect));
768 static void set_region_to_stack(const SkClipStack& stack, const SkIRect& bounds, SkRegion* region) {
770 SkClipStack::Iter iter(stack, SkClipStack::Iter::kBottom_IterStart);
792 SkClipStack stack;
793 stack.clipRect({10, 10, 20, 20}, SkMatrix::I(), SkClipOp::kIntersect, false);
798 stack.clipPath(path, SkMatrix::I(), SkClipOp::kDifference, false);
800 REPORTER_ASSERT(reporter, SkClipStack::kEmptyGenID == stack.getTopmostGenID());
804 stack.getBounds(&stackBounds, &stackBoundsType);
810 set_region_to_stack(stack, {0, 0, 50, 30}, ®ion);
821 SkClipStack stack;
823 stack.save();
824 stack.clipRect(SkRect::MakeLTRB(i, 0.5, kTargetBounds.width(), kTargetBounds.height()),
831 if (stack.isRRect(kTargetBounds, &rrect, &isAA)) {
839 SkClipStack stack;
843 stack.save();
844 stack.clipRect(SkRect::MakeLTRB(i, j + 0.5, kTargetBounds.width(), kTargetBounds.height()),
849 REPORTER_ASSERT(reporter, !stack.isRRect(kTargetBounds, &rrect, &isAA));
853 SkClipStack stack;
855 REPORTER_ASSERT(reporter, 0 == stack.getSaveCount());
856 assert_count(reporter, stack, 0);
865 stack.clipDevRect(gRects[i], SkClipOp::kIntersect);
869 SkClipStack::B2TIter iter(stack);
882 stack.reset();
883 REPORTER_ASSERT(reporter, 0 == stack.getSaveCount());
884 assert_count(reporter, stack, 0);