Lines Matching defs:segment
38 * of a segment to the kLeft_SegSide, the winding score should
43 * the segment. Winding score should be zero in this case.
50 * ...R|L......L|R.....L|R......R|L..... <= Scanline & side of segment
67 int fDeltaWindingScore; // +1 or -1 whenever a scanline cross over a segment
207 DAffineMatrix fXformMatrix; // transforms the segment into canonical space
246 // rotates the segment to the x-axis, with p0 at the origin
390 const PathSegment& segment,
413 if (!between_closed(result, segment.fP0T.fX, segment.fP2T.fX)) {
418 if (!between_closed(result, segment.fP0T.fX, segment.fP2T.fX)) {
427 // It is used to calculate segment side of a quadratic bezier.
437 // The direction of the quadratic segment/scanline in the canonical space.
438 // 1: The quadratic segment/scanline going from negative x-axis to positive x-axis.
440 // -1: The quadratic segment/scanline going from positive x-axis to negative x-axis.
452 void precomputation_for_row(RowData *rowData, const PathSegment& segment,
454 if (segment.fType != PathSegment::kQuad) {
458 const DPoint& xFormPtLeft = segment.fXformMatrix.mapPoint(pointLeft);
459 const DPoint& xFormPtRight = segment.fXformMatrix.mapPoint(pointRight);
461 rowData->fQuadXDirection = (int)sign_of(segment.fP2T.fX - segment.fP0T.fX);
469 if (nearly_equal(x1, x2, segment.fNearlyZeroScaled, true)) {
483 const double tol = 4.0 * segment.fTangentTolScaledSqd / (m2 + 1.0);
488 (segment.fPts[0].fY == pointLeft.fY ||
489 segment.fPts[2].fY == pointLeft.fY)) &&
506 const PathSegment& segment,
524 if ((rowData.fQuadXDirection == -1 && segment.fPts[0].fY <= point.fY &&
525 nearly_equal(segment.fP0T.fX, p1, segment.fNearlyZeroScaled, true)) ||
526 (rowData.fQuadXDirection == 1 && segment.fPts[2].fY <= point.fY &&
527 nearly_equal(segment.fP2T.fX, p1, segment.fNearlyZeroScaled, true))) {
530 if ((rowData.fQuadXDirection == -1 && segment.fPts[2].fY <= point.fY &&
531 nearly_equal(segment.fP2T.fX, p2, segment.fNearlyZeroScaled, true)) ||
532 (rowData.fQuadXDirection == 1 && segment.fPts[0].fY <= point.fY &&
533 nearly_equal(segment.fP0T.fX, p2, segment.fNearlyZeroScaled, true))) {
538 if (includeP1 && between_closed(p1, segment.fP0T.fX, segment.fP2T.fX,
539 segment.fNearlyZeroScaled, true)) {
542 if (includeP2 && between_closed(p2, segment.fP0T.fX, segment.fP2T.fX,
543 segment.fNearlyZeroScaled, true)) {
550 // The scanline is the tangent line of current quadratic segment.
556 if (segment.fPts[0].fY == point.fY) {
558 } else if (segment.fPts[2].fY == point.fY) {
568 const PathSegment& segment,
573 const DPoint xformPt = segment.fXformMatrix.mapPoint(point);
575 if (segment.fType == PathSegment::kLine) {
578 if (between_closed(xformPt.fX, segment.fP0T.fX, segment.fP2T.fX)) {
580 } else if (xformPt.fX < segment.fP0T.fX) {
583 result = (float)((xformPt.fX - segment.fP2T.fX) * (xformPt.fX - segment.fP2T.fX)
587 if (between_closed_open(point.fY, segment.fBoundingBox.fTop,
588 segment.fBoundingBox.fBottom)) {
595 SkASSERT(segment.fType == PathSegment::kQuad);
597 const float nearestPoint = calculate_nearest_point_for_quad(segment, xformPt);
601 if (between_closed(nearestPoint, segment.fP0T.fX, segment.fP2T.fX)) {
605 const float distToB0T = (float)xformPt.distanceSquared(segment.fP0T);
606 const float distToB2T = (float)xformPt.distanceSquared(segment.fP2T);
615 if (between_closed_open(point.fY, segment.fBoundingBox.fTop,
616 segment.fBoundingBox.fBottom)) {
617 *side = calculate_side_of_quad(segment, point, xformPt, rowData);
622 return (float)(dist * segment.fScalingFactorSqd);
630 // for each segment
632 PathSegment& segment = (*segments)[a];
633 const SkRect& segBB = segment.fBoundingBox;
662 // if this is a row inside the original segment bounding box
665 precomputation_for_row(&rowData, segment, pointLeft, pointRight);
688 float currDistSq = distance_to_segment(point, segment, rowData, &side);