Lines Matching defs:quadPts

49     #define STROKER_RESULT(resultType, depth, quadPts, format, ...) \
51 SkDebugf(" " #resultType " t=(%g,%g)\n", quadPts->fStartT, quadPts->fEndT), \
55 #define STROKER_RESULT(resultType, depth, quadPts, format, ...) \
525 void SkPathStroker::init(StrokeType strokeType, SkQuadConstruct* quadPts, SkScalar tStart,
529 quadPts->init(tStart, tEnd);
749 SkQuadConstruct quadPts;
750 this->init(kOuter_StrokeType, &quadPts, 0, 1);
751 (void) this->conicStroke(conic, &quadPts);
752 this->init(kInner_StrokeType, &quadPts, 0, 1);
753 (void) this->conicStroke(conic, &quadPts);
787 SkQuadConstruct quadPts;
788 this->init(kOuter_StrokeType, &quadPts, 0, 1);
789 (void) this->quadStroke(quad, &quadPts);
790 this->init(kInner_StrokeType, &quadPts, 0, 1);
791 (void) this->quadStroke(quad, &quadPts);
826 void SkPathStroker::conicQuadEnds(const SkConic& conic, SkQuadConstruct* quadPts) const {
827 if (!quadPts->fStartSet) {
829 this->conicPerpRay(conic, quadPts->fStartT, &conicStartPt, &quadPts->fQuad[0],
830 &quadPts->fTangentStart);
831 quadPts->fStartSet = true;
833 if (!quadPts->fEndSet) {
835 this->conicPerpRay(conic, quadPts->fEndT, &conicEndPt, &quadPts->fQuad[2],
836 &quadPts->fTangentEnd);
837 quadPts->fEndSet = true;
872 void SkPathStroker::cubicQuadEnds(const SkPoint cubic[4], SkQuadConstruct* quadPts) {
873 if (!quadPts->fStartSet) {
875 this->cubicPerpRay(cubic, quadPts->fStartT, &cubicStartPt, &quadPts->fQuad[0],
876 &quadPts->fTangentStart);
877 quadPts->fStartSet = true;
879 if (!quadPts->fEndSet) {
881 this->cubicPerpRay(cubic, quadPts->fEndT, &cubicEndPt, &quadPts->fQuad[2],
882 &quadPts->fTangentEnd);
883 quadPts->fEndSet = true;
887 void SkPathStroker::cubicQuadMid(const SkPoint cubic[4], const SkQuadConstruct* quadPts,
890 this->cubicPerpRay(cubic, quadPts->fMidT, &cubicMidPt, mid, nullptr);
907 SkPathStroker::ResultType SkPathStroker::intersectRay(SkQuadConstruct* quadPts,
909 const SkPoint& start = quadPts->fQuad[0];
910 const SkPoint& end = quadPts->fQuad[2];
911 SkVector aLen = quadPts->fTangentStart - start;
912 SkVector bLen = quadPts->fTangentEnd - end;
921 quadPts->fOppositeTangents = aLen.dot(bLen) < 0;
922 return STROKER_RESULT(kDegenerate_ResultType, depth, quadPts, "denom == 0");
924 quadPts->fOppositeTangents = false;
931 SkScalar dist1 = pt_to_line(start, end, quadPts->fTangentEnd);
932 SkScalar dist2 = pt_to_line(end, start, quadPts->fTangentStart);
934 return STROKER_RESULT(kDegenerate_ResultType, depth, quadPts,
937 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
946 SkPoint* ctrlPt = &quadPts->fQuad[1];
949 ctrlPt->fX = start.fX * (1 - numerA) + quadPts->fTangentStart.fX * numerA;
950 ctrlPt->fY = start.fY * (1 - numerA) + quadPts->fTangentStart.fY * numerA;
952 return STROKER_RESULT(kQuad_ResultType, depth, quadPts,
955 quadPts->fOppositeTangents = aLen.dot(bLen) < 0;
957 return STROKER_RESULT(kDegenerate_ResultType, depth, quadPts,
963 SkQuadConstruct* quadPts) {
964 this->cubicQuadEnds(cubic, quadPts);
965 return this->intersectRay(quadPts, kResultType_RayType STROKER_DEBUG_PARAMS(fRecursionDepth));
1026 const SkPoint ray[2], SkQuadConstruct* quadPts STROKER_DEBUG_PARAMS(int depth)) const {
1030 if (sharp_angle(quadPts->fQuad)) {
1031 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
1033 quadPts->fQuad[0].fX, quadPts->fQuad[0].fY,
1034 quadPts->fQuad[1].fX, quadPts->fQuad[1].fY,
1035 quadPts->fQuad[2].fX, quadPts->fQuad[2].fY);
1037 return STROKER_RESULT(kQuad_ResultType, depth, quadPts,
1044 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
1053 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
1059 if (sharp_angle(quadPts->fQuad)) {
1060 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
1062 quadPts->fQuad[0].fX, quadPts->fQuad[0].fY,
1063 quadPts->fQuad[1].fX, quadPts->fQuad[1].fY,
1064 quadPts->fQuad[2].fX, quadPts->fQuad[2].fY);
1066 return STROKER_RESULT(kQuad_ResultType, depth, quadPts,
1071 return STROKER_RESULT(kSplit_ResultType, depth, quadPts, "%s", "fall through");
1075 SkQuadConstruct* quadPts) {
1077 this->cubicQuadEnds(cubic, quadPts);
1078 ResultType resultType = this->intersectRay(quadPts, kCtrlPt_RayType
1085 this->cubicPerpRay(cubic, quadPts->fMidT, &ray[1], &ray[0], nullptr);
1086 return this->strokeCloseEnough(quadPts->fQuad, ray, quadPts
1091 SkQuadConstruct* quadPts) const {
1093 this->conicQuadEnds(conic, quadPts);
1094 ResultType resultType = this->intersectRay(quadPts, kCtrlPt_RayType
1101 this->conicPerpRay(conic, quadPts->fMidT, &ray[1], &ray[0], nullptr);
1102 return this->strokeCloseEnough(quadPts->fQuad, ray, quadPts
1107 SkQuadConstruct* quadPts) {
1109 if (!quadPts->fStartSet) {
1111 this->quadPerpRay(quad, quadPts->fStartT, &quadStartPt, &quadPts->fQuad[0],
1112 &quadPts->fTangentStart);
1113 quadPts->fStartSet = true;
1115 if (!quadPts->fEndSet) {
1117 this->quadPerpRay(quad, quadPts->fEndT, &quadEndPt, &quadPts->fQuad[2],
1118 &quadPts->fTangentEnd);
1119 quadPts->fEndSet = true;
1121 ResultType resultType = this->intersectRay(quadPts, kCtrlPt_RayType
1128 this->quadPerpRay(quad, quadPts->fMidT, &ray[1], &ray[0], nullptr);
1129 return this->strokeCloseEnough(quadPts->fQuad, ray, quadPts
1133 void SkPathStroker::addDegenerateLine(const SkQuadConstruct* quadPts) {
1134 const SkPoint* quad = quadPts->fQuad;
1139 bool SkPathStroker::cubicMidOnLine(const SkPoint cubic[4], const SkQuadConstruct* quadPts) const {
1141 this->cubicQuadMid(cubic, quadPts, &strokeMid);
1142 SkScalar dist = pt_to_line(strokeMid, quadPts->fQuad[0], quadPts->fQuad[2]);
1146 bool SkPathStroker::cubicStroke(const SkPoint cubic[4], SkQuadConstruct* quadPts) {
1148 ResultType resultType = this->tangentsMeet(cubic, quadPts);
1151 || points_within_dist(quadPts->fQuad[0], quadPts->fQuad[2],
1152 fInvResScale)) && cubicMidOnLine(cubic, quadPts)) {
1153 addDegenerateLine(quadPts);
1162 ResultType resultType = this->compareQuadCubic(cubic, quadPts);
1165 const SkPoint* stroke = quadPts->fQuad;
1171 if (!quadPts->fOppositeTangents) {
1172 addDegenerateLine(quadPts);
1178 if (!SkScalarIsFinite(quadPts->fQuad[2].fX) || !SkScalarIsFinite(quadPts->fQuad[2].fY)) {
1191 if (!half.initWithStart(quadPts)) {
1192 addDegenerateLine(quadPts);
1200 if (!half.initWithEnd(quadPts)) {
1201 addDegenerateLine(quadPts);
1213 bool SkPathStroker::conicStroke(const SkConic& conic, SkQuadConstruct* quadPts) {
1214 ResultType resultType = this->compareQuadConic(conic, quadPts);
1216 const SkPoint* stroke = quadPts->fQuad;
1222 addDegenerateLine(quadPts);
1233 (void) half.initWithStart(quadPts);
1237 (void) half.initWithEnd(quadPts);
1245 bool SkPathStroker::quadStroke(const SkPoint quad[3], SkQuadConstruct* quadPts) {
1246 ResultType resultType = this->compareQuadQuad(quad, quadPts);
1248 const SkPoint* stroke = quadPts->fQuad;
1254 addDegenerateLine(quadPts);
1265 (void) half.initWithStart(quadPts);
1269 (void) half.initWithEnd(quadPts);
1319 SkQuadConstruct quadPts;
1320 this->init(kOuter_StrokeType, &quadPts, lastT, nextT);
1321 (void) this->cubicStroke(cubic, &quadPts);
1322 this->init(kInner_StrokeType, &quadPts, lastT, nextT);
1323 (void) this->cubicStroke(cubic, &quadPts);