Home | History | Annotate | Download | only in core

Lines Matching defs:quadPts

40     #define STROKER_RESULT(resultType, depth, quadPts, format, ...) \
42 SkDebugf(" " #resultType " t=(%g,%g)\n", quadPts->fStartT, quadPts->fEndT), \
46 #define STROKER_RESULT(resultType, depth, quadPts, format, ...) \
483 void SkPathStroker::init(StrokeType strokeType, SkQuadConstruct* quadPts, SkScalar tStart,
487 quadPts->init(tStart, tEnd);
713 SkQuadConstruct quadPts;
714 this->init(kOuter_StrokeType, &quadPts, 0, 1);
715 (void) this->conicStroke(conic, &quadPts);
716 this->init(kInner_StrokeType, &quadPts, 0, 1);
717 (void) this->conicStroke(conic, &quadPts);
751 SkQuadConstruct quadPts;
752 this->init(kOuter_StrokeType, &quadPts, 0, 1);
753 (void) this->quadStroke(quad, &quadPts);
754 this->init(kInner_StrokeType, &quadPts, 0, 1);
755 (void) this->quadStroke(quad, &quadPts);
795 void SkPathStroker::conicQuadEnds(const SkConic& conic, SkQuadConstruct* quadPts) const {
796 if (!quadPts->fStartSet) {
798 this->conicPerpRay(conic, quadPts->fStartT, &conicStartPt, &quadPts->fQuad[0],
799 &quadPts->fTangentStart);
800 quadPts->fStartSet = true;
802 if (!quadPts->fEndSet) {
804 this->conicPerpRay(conic, quadPts->fEndT, &conicEndPt, &quadPts->fQuad[2],
805 &quadPts->fTangentEnd);
806 quadPts->fEndSet = true;
841 quadPts) {
842 if (!quadPts->fStartSet) {
844 this->cubicPerpRay(cubic, quadPts->fStartT, &cubicStartPt, &quadPts->fQuad[0],
845 &quadPts->fTangentStart);
846 quadPts->fStartSet = true;
848 if (!quadPts->fEndSet) {
850 this->cubicPerpRay(cubic, quadPts->fEndT, &cubicEndPt, &quadPts->fQuad[2],
851 &quadPts->fTangentEnd);
852 quadPts->fEndSet = true;
856 void SkPathStroker::cubicQuadMid(const SkPoint cubic[4], const SkQuadConstruct* quadPts,
859 this->cubicPerpRay(cubic, quadPts->fMidT, &cubicMidPt, mid, nullptr);
876 SkPathStroker::ResultType SkPathStroker::intersectRay(SkQuadConstruct* quadPts,
878 const SkPoint& start = quadPts->fQuad[0];
879 const SkPoint& end = quadPts->fQuad[2];
880 SkVector aLen = quadPts->fTangentStart - start;
881 SkVector bLen = quadPts->fTangentEnd - end;
890 quadPts->fOppositeTangents = aLen.dot(bLen) < 0;
891 return STROKER_RESULT(kDegenerate_ResultType, depth, quadPts, "denom == 0");
893 quadPts->fOppositeTangents = false;
900 SkScalar dist1 = pt_to_line(start, end, quadPts->fTangentEnd);
901 SkScalar dist2 = pt_to_line(end, start, quadPts->fTangentStart);
903 return STROKER_RESULT(kDegenerate_ResultType, depth, quadPts,
906 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
915 SkPoint* ctrlPt = &quadPts->fQuad[1];
918 ctrlPt->fX = start.fX * (1 - numerA) + quadPts->fTangentStart.fX * numerA;
919 ctrlPt->fY = start.fY * (1 - numerA) + quadPts->fTangentStart.fY * numerA;
921 return STROKER_RESULT(kQuad_ResultType, depth, quadPts,
924 quadPts->fOppositeTangents = aLen.dot(bLen) < 0;
926 return STROKER_RESULT(kDegenerate_ResultType, depth, quadPts,
932 SkQuadConstruct* quadPts) {
933 this->cubicQuadEnds(cubic, quadPts);
934 return this->intersectRay(quadPts, kResultType_RayType STROKER_DEBUG_PARAMS(fRecursionDepth));
994 const SkPoint ray[2], SkQuadConstruct* quadPts STROKER_DEBUG_PARAMS(int depth)) const {
998 if (sharp_angle(quadPts->fQuad)) {
999 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
1001 quadPts->fQuad[0].fX, quadPts->fQuad[0].fY,
1002 quadPts->fQuad[1].fX, quadPts->fQuad[1].fY,
1003 quadPts->fQuad[2].fX, quadPts->fQuad[2].fY);
1005 return STROKER_RESULT(kQuad_ResultType, depth, quadPts,
1012 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
1021 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
1027 if (sharp_angle(quadPts->fQuad)) {
1028 return STROKER_RESULT(kSplit_ResultType, depth, quadPts,
1030 quadPts->fQuad[0].fX, quadPts->fQuad[0].fY,
1031 quadPts->fQuad[1].fX, quadPts->fQuad[1].fY,
1032 quadPts->fQuad[2].fX, quadPts->fQuad[2].fY);
1034 return STROKER_RESULT(kQuad_ResultType, depth, quadPts,
1039 return STROKER_RESULT(kSplit_ResultType, depth, quadPts, "%s", "fall through");
1043 SkQuadConstruct* quadPts) {
1045 this->cubicQuadEnds(cubic, quadPts);
1046 ResultType resultType = this->intersectRay(quadPts, kCtrlPt_RayType
1053 this->cubicPerpRay(cubic, quadPts->fMidT, &ray[1], &ray[0], nullptr);
1054 return this->strokeCloseEnough(quadPts->fQuad, ray, quadPts
1059 SkQuadConstruct* quadPts) const {
1061 this->conicQuadEnds(conic, quadPts);
1062 ResultType resultType = this->intersectRay(quadPts, kCtrlPt_RayType
1069 this->conicPerpRay(conic, quadPts->fMidT, &ray[1], &ray[0], nullptr);
1070 return this->strokeCloseEnough(quadPts->fQuad, ray, quadPts
1075 SkQuadConstruct* quadPts) {
1077 if (!quadPts->fStartSet) {
1079 this->quadPerpRay(quad, quadPts->fStartT, &quadStartPt, &quadPts->fQuad[0],
1080 &quadPts->fTangentStart);
1081 quadPts->fStartSet = true;
1083 if (!quadPts->fEndSet) {
1085 this->quadPerpRay(quad, quadPts->fEndT, &quadEndPt, &quadPts->fQuad[2],
1086 &quadPts->fTangentEnd);
1087 quadPts->fEndSet = true;
1089 ResultType resultType = this->intersectRay(quadPts, kCtrlPt_RayType
1096 this->quadPerpRay(quad, quadPts->fMidT, &ray[1], &ray[0], nullptr);
1097 return this->strokeCloseEnough(quadPts->fQuad, ray, quadPts
1101 void SkPathStroker::addDegenerateLine(const SkQuadConstruct* quadPts) {
1102 const SkPoint* quad = quadPts->fQuad;
1107 bool SkPathStroker::cubicMidOnLine(const SkPoint cubic[4], const SkQuadConstruct* quadPts) const {
1109 this->cubicQuadMid(cubic, quadPts, &strokeMid);
1110 SkScalar dist = pt_to_line(strokeMid, quadPts->fQuad[0], quadPts->fQuad[2]);
1114 bool SkPathStroker::cubicStroke(const SkPoint cubic[4], SkQuadConstruct* quadPts) {
1116 ResultType resultType = this->tangentsMeet(cubic, quadPts);
1119 || points_within_dist(quadPts->fQuad[0], quadPts->fQuad[2],
1120 fInvResScale)) && cubicMidOnLine(cubic, quadPts)) {
1121 addDegenerateLine(quadPts);
1129 ResultType resultType = this->compareQuadCubic(cubic, quadPts);
1132 const SkPoint* stroke = quadPts->fQuad;
1137 if (!quadPts->fOppositeTangents) {
1138 addDegenerateLine(quadPts);
1143 if (!SkScalarIsFinite(quadPts->fQuad[2].fX) || !SkScalarIsFinite(quadPts->fQuad[2].fY)) {
1154 if (!half.initWithStart(quadPts)) {
1155 addDegenerateLine(quadPts);
1161 if (!half.initWithEnd(quadPts)) {
1162 addDegenerateLine(quadPts);
1172 bool SkPathStroker::conicStroke(const SkConic& conic, SkQuadConstruct* quadPts) {
1173 ResultType resultType = this->compareQuadConic(conic, quadPts);
1175 const SkPoint* stroke = quadPts->fQuad;
1181 addDegenerateLine(quadPts);
1192 (void) half.initWithStart(quadPts);
1196 (void) half.initWithEnd(quadPts);
1204 bool SkPathStroker::quadStroke(const SkPoint quad[3], SkQuadConstruct* quadPts) {
1205 ResultType resultType = this->compareQuadQuad(quad, quadPts);
1207 const SkPoint* stroke = quadPts->fQuad;
1213 addDegenerateLine(quadPts);
1224 (void) half.initWithStart(quadPts);
1228 (void) half.initWithEnd(quadPts);
1278 SkQuadConstruct quadPts;
1279 this->init(kOuter_StrokeType, &quadPts, lastT, nextT);
1280 (void) this->cubicStroke(cubic, &quadPts);
1281 this->init(kInner_StrokeType, &quadPts, lastT, nextT);
1282 (void) this->cubicStroke(cubic, &quadPts);