Lines Matching refs:element
20 SkClipStack::Element::Element(const Element& that) {
46 SkClipStack::Element::~Element() {
55 bool SkClipStack::Element::operator== (const Element& element) const {
56 if (this == &element) {
59 if (fOp != element.fOp || fDeviceSpaceType != element.fDeviceSpaceType ||
60 fDoAA != element.fDoAA || fSaveCount != element.fSaveCount) {
65 return this->getDeviceSpacePath() == element.getDeviceSpacePath();
67 return fDeviceSpaceRRect == element.fDeviceSpaceRRect;
69 return this->getDeviceSpaceRect() == element.getDeviceSpaceRect();
78 const SkRect& SkClipStack::Element::getBounds() const {
94 bool SkClipStack::Element::contains(const SkRect& rect) const {
110 bool SkClipStack::Element::contains(const SkRRect& rrect) const {
127 void SkClipStack::Element::invertShapeFillType() {
150 void SkClipStack::Element::initCommon(int saveCount, SkClipOp op, bool doAA) {
162 void SkClipStack::Element::initRect(int saveCount, const SkRect& rect, const SkMatrix& m,
178 void SkClipStack::Element::initRRect(int saveCount, const SkRRect& rrect, const SkMatrix& m,
196 void SkClipStack::Element::initPath(int saveCount, const SkPath& path, const SkMatrix& m,
215 void SkClipStack::Element::initAsPath(int saveCount, const SkPath& path, const SkMatrix& m,
223 void SkClipStack::Element::asDeviceSpacePath(SkPath* path) const {
243 void SkClipStack::Element::setEmpty() {
254 void SkClipStack::Element::checkEmpty() const {
263 bool SkClipStack::Element::canBeIntersectedInPlace(int saveCount, SkClipOp op) const {
275 bool SkClipStack::Element::rectRectIntersectAllowed(const SkRect& newR, bool newAA) const {
303 void SkClipStack::Element::combineBoundsDiff(FillCombo combination, const SkRect& prevFinite) {
340 SkDEBUGFAIL("SkClipStack::Element::combineBoundsDiff Invalid fill combination");
345 void SkClipStack::Element::combineBoundsXOR(int combination, const SkRect& prevFinite) {
372 SkDEBUGFAIL("SkClipStack::Element::combineBoundsXOR Invalid fill combination");
378 void SkClipStack::Element::combineBoundsUnion(int combination, const SkRect& prevFinite) {
402 SkDEBUGFAIL("SkClipStack::Element::combineBoundsUnion Invalid fill combination");
408 void SkClipStack::Element::combineBoundsIntersection(int combination, const SkRect& prevFinite) {
433 SkDEBUGFAIL("SkClipStack::Element::combineBoundsIntersection Invalid fill combination");
439 void SkClipStack::Element::combineBoundsRevDiff(int combination, const SkRect& prevFinite) {
468 SkDEBUGFAIL("SkClipStack::Element::combineBoundsRevDiff Invalid fill combination");
473 void SkClipStack::Element::updateBoundAndGenID(const Element* prior) {
478 // First, optimistically update the current Element's bound information
506 SkDEBUGFAIL("We shouldn't get here with an empty element.");
510 // Now determine the previous Element's bound information taking into
566 // This constant determines how many Element's are allocated together as a block in
573 : fDeque(sizeof(Element), kDefaultElementAllocCnt)
578 : fDeque(sizeof(Element), storage, size, kDefaultElementAllocCnt)
583 : fDeque(sizeof(Element), kDefaultElementAllocCnt) {
599 for (const Element* element = (const Element*)recIter.next();
600 element != nullptr;
601 element = (const Element*)recIter.next()) {
602 new (fDeque.push_back()) Element(*element);
618 const Element* myElement = (const Element*)myIter.next();
619 const Element* bElement = (const Element*)bIter.next();
625 myElement = (const Element*)myIter.next();
626 bElement = (const Element*)bIter.next();
635 Element* element = (Element*)fDeque.back();
636 element->~Element();
654 Element* element = (Element*)fDeque.back();
655 if (element->fSaveCount <= saveCount) {
658 element->~Element();
682 Element* element = (Element*)fDeque.back();
684 if (nullptr == element) {
694 *canvFiniteBound = element->fFiniteBound;
695 *boundType = element->fFiniteBoundType;
697 *isIntersectionOfRects = element->fIsIntersectionOfRects;
704 const Element* element = iter.prev();
705 while (element != nullptr) {
706 if (kIntersect_SkClipOp != element->getOp() && kReplace_SkClipOp != element->getOp())
708 if (element->isInverseFilled()) {
709 // Part of 'rect' could be trimmed off by the inverse-filled clip element
710 if (SkRect::Intersects(element->getBounds(), rect)) {
714 if (!element->contains(rect)) {
718 if (kReplace_SkClipOp == element->getOp()) {
721 element = iter.prev();
729 const Element* element = iter.prev();
730 while (element != nullptr) {
731 if (kIntersect_SkClipOp != element->getOp() && kReplace_SkClipOp != element->getOp())
733 if (element->isInverseFilled()) {
734 // Part of 'rrect' could be trimmed off by the inverse-filled clip element
735 if (SkRect::Intersects(element->getBounds(), rrect.getBounds())) {
739 if (!element->contains(rrect)) {
743 if (kReplace_SkClipOp == element->getOp()) {
746 element = iter.prev();
758 while (const SkClipStack::Element* element = iter.next()) {
760 if (element->getDeviceSpaceType() != SkClipStack::Element::DeviceSpaceType::kEmpty) {
761 element->asDeviceSpacePath(&operand);
764 SkClipOp elementOp = element->getOp();
774 isAA = (isAA || element->isAA());
780 void SkClipStack::pushElement(const Element& element) {
783 Element* prior = (Element*) iter.prev();
786 if (prior->canBeIntersectedInPlace(fSaveCount, element.getOp())) {
788 case Element::DeviceSpaceType::kEmpty:
791 case Element::DeviceSpaceType::kRect:
792 if (Element::DeviceSpaceType::kRect == element.getDeviceSpaceType()) {
793 if (prior->rectRectIntersectAllowed(element.getDeviceSpaceRect(),
794 element.isAA())) {
797 element.getDeviceSpaceRect())) {
803 prior->fDoAA = element.isAA();
804 Element* priorPrior = (Element*) iter.prev();
812 if (!SkRect::Intersects(prior->getBounds(), element.getBounds())) {
818 } else if (kReplace_SkClipOp == element.getOp()) {
820 prior = (Element*) fDeque.back();
823 Element* newElement = new (fDeque.push_back()) Element(element);
829 Element element(fSaveCount, rrect, matrix, op, doAA);
830 this->pushElement(element);
832 Element restriction(fSaveCount, fClipRestrictionRect, SkMatrix::I(), kIntersect_SkClipOp,
840 Element element(fSaveCount, rect, matrix, op, doAA);
841 this->pushElement(element);
843 Element restriction(fSaveCount, fClipRestrictionRect, SkMatrix::I(), kIntersect_SkClipOp,
851 Element element(fSaveCount, path, matrix, op, doAA);
852 this->pushElement(element);
854 Element restriction(fSaveCount, fClipRestrictionRect, SkMatrix::I(), kIntersect_SkClipOp,
861 Element* element = (Element*) fDeque.back();
863 if (element && element->canBeIntersectedInPlace(fSaveCount, kIntersect_SkClipOp)) {
864 element->setEmpty();
866 new (fDeque.push_back()) Element(fSaveCount);
868 ((Element*)fDeque.back())->fGenID = kEmptyGenID;
881 const SkClipStack::Element* SkClipStack::Iter::next() {
882 return (const SkClipStack::Element*)fIter.next();
885 const SkClipStack::Element* SkClipStack::Iter::prev() {
886 return (const SkClipStack::Element*)fIter.prev();
889 const SkClipStack::Element* SkClipStack::Iter::skipToTopmost(SkClipOp op) {
897 const SkClipStack::Element* element = nullptr;
899 for (element = (const SkClipStack::Element*) fIter.prev();
900 element;
901 element = (const SkClipStack::Element*) fIter.prev()) {
903 if (op == element->fOp) {
905 // returned value. So while "element" is the element we want to
907 // return on the next "next" or "prev" call) the element
920 if (nullptr == element) {
963 const Element* back = static_cast<const Element*>(fDeque.back());
968 // First check if the entire stack is known to be a rect by the top element.
975 if (back->getDeviceSpaceType() != SkClipStack::Element::DeviceSpaceType::kRect &&
976 back->getDeviceSpaceType() != SkClipStack::Element::DeviceSpaceType::kRRect) {
990 // We limit to 5 elements. This means the back element will be bounds checked at most 4
998 SkAssertResult(static_cast<const Element*>(iter.prev()) == back);
999 while (const Element* prior = (const Element*)iter.prev()) {
1034 const Element* back = static_cast<const Element*>(fDeque.back());
1043 void SkClipStack::Element::dump() const {
1094 const Element* e;