Lines Matching refs:Element
22 SkClipStack::Element::Element(const Element& that) {
48 bool SkClipStack::Element::operator== (const Element& element) const {
49 if (this == &element) {
52 if (fOp != element.fOp ||
53 fType != element.fType ||
54 fDoAA != element.fDoAA ||
55 fSaveCount != element.fSaveCount) {
60 return this->getPath() == element.getPath();
62 return fRRect == element.fRRect;
64 return this->getRect() == element.getRect();
73 void SkClipStack::Element::invertShapeFillType() {
96 void SkClipStack::Element::initPath(int saveCount, const SkPath& path, SkClipOp op,
118 void SkClipStack::Element::asPath(SkPath* path) const {
141 void SkClipStack::Element::setEmpty() {
152 void SkClipStack::Element::checkEmpty() const {
161 bool SkClipStack::Element::canBeIntersectedInPlace(int saveCount, SkClipOp op) const {
173 bool SkClipStack::Element::rectRectIntersectAllowed(const SkRect& newR, bool newAA) const {
201 void SkClipStack::Element::combineBoundsDiff(FillCombo combination, const SkRect& prevFinite) {
238 SkDEBUGFAIL("SkClipStack::Element::combineBoundsDiff Invalid fill combination");
243 void SkClipStack::Element::combineBoundsXOR(int combination, const SkRect& prevFinite) {
270 SkDEBUGFAIL("SkClipStack::Element::combineBoundsXOR Invalid fill combination");
276 void SkClipStack::Element::combineBoundsUnion(int combination, const SkRect& prevFinite) {
300 SkDEBUGFAIL("SkClipStack::Element::combineBoundsUnion Invalid fill combination");
306 void SkClipStack::Element::combineBoundsIntersection(int combination, const SkRect& prevFinite) {
331 SkDEBUGFAIL("SkClipStack::Element::combineBoundsIntersection Invalid fill combination");
337 void SkClipStack::Element::combineBoundsRevDiff(int combination, const SkRect& prevFinite) {
366 SkDEBUGFAIL("SkClipStack::Element::combineBoundsRevDiff Invalid fill combination");
371 void SkClipStack::Element::updateBoundAndGenID(const Element* prior) {
376 // First, optimistically update the current Element's bound information
405 SkDEBUGFAIL("We shouldn't get here with an empty element.");
416 // Now determine the previous Element's bound information taking into
472 // This constant determines how many Element's are allocated together as a block in
479 : fDeque(sizeof(Element), kDefaultElementAllocCnt)
484 : fDeque(sizeof(Element), storage, size, kDefaultElementAllocCnt)
489 : fDeque(sizeof(Element), kDefaultElementAllocCnt) {
505 for (const Element* element = (const Element*)recIter.next();
506 element != nullptr;
507 element = (const Element*)recIter.next()) {
508 new (fDeque.push_back()) Element(*element);
524 const Element* myElement = (const Element*)myIter.next();
525 const Element* bElement = (const Element*)bIter.next();
531 myElement = (const Element*)myIter.next();
532 bElement = (const Element*)bIter.next();
541 Element* element = (Element*)fDeque.back();
542 element->~Element();
560 Element* element = (Element*)fDeque.back();
561 if (element->fSaveCount <= saveCount) {
564 element->~Element();
588 Element* element = (Element*)fDeque.back();
590 if (nullptr == element) {
600 *canvFiniteBound = element->fFiniteBound;
601 *boundType = element->fFiniteBoundType;
603 *isIntersectionOfRects = element->fIsIntersectionOfRects;
610 const Element* element = iter.prev();
611 while (element != nullptr) {
612 if (kIntersect_SkClipOp != element->getOp() && kReplace_SkClipOp != element->getOp())
614 if (element->isInverseFilled()) {
615 // Part of 'rect' could be trimmed off by the inverse-filled clip element
616 if (SkRect::Intersects(element->getBounds(), rect)) {
620 if (!element->contains(rect)) {
624 if (kReplace_SkClipOp == element->getOp()) {
627 element = iter.prev();
635 const Element* element = iter.prev();
636 while (element != nullptr) {
637 if (kIntersect_SkClipOp != element->getOp() && kReplace_SkClipOp != element->getOp())
639 if (element->isInverseFilled()) {
640 // Part of 'rrect' could be trimmed off by the inverse-filled clip element
641 if (SkRect::Intersects(element->getBounds(), rrect.getBounds())) {
645 if (!element->contains(rrect)) {
649 if (kReplace_SkClipOp == element->getOp()) {
652 element = iter.prev();
664 while (const SkClipStack::Element* element = iter.next()) {
666 if (element->getType() != SkClipStack::Element::kEmpty_Type) {
667 element->asPath(&operand);
670 SkClipOp elementOp = element->getOp();
680 isAA = (isAA || element->isAA());
686 void SkClipStack::pushElement(const Element& element) {
689 Element* prior = (Element*) iter.prev();
692 if (prior->canBeIntersectedInPlace(fSaveCount, element.getOp())) {
694 case Element::kEmpty_Type:
697 case Element::kRect_Type:
698 if (Element::kRect_Type == element.getType()) {
699 if (prior->rectRectIntersectAllowed(element.getRect(), element.isAA())) {
701 if (!isectRect.intersect(prior->getRect(), element.getRect())) {
707 prior->fDoAA = element.isAA();
708 Element* priorPrior = (Element*) iter.prev();
716 if (!SkRect::Intersects(prior->getBounds(), element.getBounds())) {
722 } else if (kReplace_SkClipOp == element.getOp()) {
724 prior = (Element*) fDeque.back();
727 Element* newElement = new (fDeque.push_back()) Element(element);
735 Element element(fSaveCount, transformedRRect, op, doAA);
736 this->pushElement(element);
738 Element element(fSaveCount, fClipRestrictionRect, kIntersect_SkClipOp, false);
739 this->pushElement(element);
759 Element element(fSaveCount, devRect, op, doAA);
760 this->pushElement(element);
773 Element element(fSaveCount, devPath, op, doAA);
774 this->pushElement(element);
776 Element element(fSaveCount, fClipRestrictionRect, kIntersect_SkClipOp, false);
777 this->pushElement(element);
782 Element* element = (Element*) fDeque.back();
784 if (element && element->canBeIntersectedInPlace(fSaveCount, kIntersect_SkClipOp)) {
785 element->setEmpty();
787 new (fDeque.push_back()) Element(fSaveCount);
789 ((Element*)fDeque.back())->fGenID = kEmptyGenID;
802 const SkClipStack::Element* SkClipStack::Iter::next() {
803 return (const SkClipStack::Element*)fIter.next();
806 const SkClipStack::Element* SkClipStack::Iter::prev() {
807 return (const SkClipStack::Element*)fIter.prev();
810 const SkClipStack::Element* SkClipStack::Iter::skipToTopmost(SkClipOp op) {
818 const SkClipStack::Element* element = nullptr;
820 for (element = (const SkClipStack::Element*) fIter.prev();
821 element;
822 element = (const SkClipStack::Element*) fIter.prev()) {
824 if (op == element->fOp) {
826 // returned value. So while "element" is the element we want to
828 // return on the next "next" or "prev" call) the element
841 if (nullptr == element) {
884 // We limit to 5 elements. This means the back element will be bounds checked at most 4 times if
890 const Element* back = static_cast<const Element*>(fDeque.back());
891 if (back->getType() != SkClipStack::Element::kRect_Type &&
892 back->getType() != SkClipStack::Element::kRRect_Type) {
908 SkAssertResult(static_cast<const Element*>(iter.prev()) == back);
909 while (const Element* prior = (const Element*)iter.prev()) {
940 const Element* back = static_cast<const Element*>(fDeque.back());
949 void SkClipStack::Element::dump() const {
1000 const Element* e;