Lines Matching refs:pts
31 void SkContourMeasure_segTo(const SkPoint pts[], unsigned segType,
53 dst->lineTo(pts[1]);
55 dst->lineTo(SkScalarInterp(pts[0].fX, pts[1].fX, stopT),
56 SkScalarInterp(pts[0].fY, pts[1].fY, stopT));
62 dst->quadTo(pts[1], pts[2]);
64 SkChopQuadAt(pts, tmp0, stopT);
68 SkChopQuadAt(pts, tmp0, startT);
78 SkConic conic(pts[0], pts[2], pts[3], pts[1].fX);
105 dst->cubicTo(pts[1], pts[2], pts[3]);
107 SkChopCubicAt(pts, tmp0, stopT);
111 SkChopCubicAt(pts, tmp0, startT);
137 static bool quad_too_curvy(const SkPoint pts[3], SkScalar tolerance) {
140 SkScalar dx = SkScalarHalf(pts[1].fX) -
141 SkScalarHalf(SkScalarHalf(pts[0].fX + pts[2].fX));
142 SkScalar dy = SkScalarHalf(pts[1].fY) -
143 SkScalarHalf(SkScalarHalf(pts[0].fY + pts[2].fY));
165 static bool cubic_too_curvy(const SkPoint pts[4], SkScalar tolerance) {
166 return cheap_dist_exceeds_limit(pts[1],
167 SkScalarInterp(pts[0].fX, pts[3].fX, SK_Scalar1/3),
168 SkScalarInterp(pts[0].fY, pts[3].fY, SK_Scalar1/3), tolerance)
170 cheap_dist_exceeds_limit(pts[2],
171 SkScalarInterp(pts[0].fX, pts[3].fX, SK_Scalar1*2/3),
172 SkScalarInterp(pts[0].fY, pts[3].fY, SK_Scalar1*2/3), tolerance);
198 SkScalar compute_quad_segs(const SkPoint pts[3], SkScalar distance,
204 SkScalar compute_cubic_segs(const SkPoint pts[4], SkScalar distance,
208 SkScalar SkContourMeasureIter::Impl::compute_quad_segs(const SkPoint pts[3], SkScalar distance,
210 if (tspan_big_enough(maxt - mint) && quad_too_curvy(pts, fTolerance)) {
214 SkChopQuadAtHalf(pts, tmp);
218 SkScalar d = SkPoint::Distance(pts[0], pts[2]);
261 SkScalar SkContourMeasureIter::Impl::compute_cubic_segs(const SkPoint pts[4], SkScalar distance,
263 if (tspan_big_enough(maxt - mint) && cubic_too_curvy(pts, fTolerance)) {
267 SkChopCubicAtHalf(pts, tmp);
271 SkScalar d = SkPoint::Distance(pts[0], pts[3]);
349 auto [verb, pts, w] = *fIter;
356 fPts.append(1, pts);
364 distance = this->compute_line_seg(pts[0], pts[1], distance, ptIndex);
366 fPts.append(1, pts + 1);
374 distance = this->compute_quad_segs(pts, distance, 0, kMaxTValue, ptIndex);
376 fPts.append(2, pts + 1);
383 const SkConic conic(pts, *w);
388 // we store the conic weight in our next point, followed by the last 2 pts
390 // SkConic(pts[0], pts[2], pts[3], weight = pts[1].fX)
392 fPts.append(2, pts + 1);
400 distance = this->compute_cubic_segs(pts, distance, 0, kMaxTValue, ptIndex);
402 fPts.append(3, pts + 1);
435 static void compute_pos_tan(const SkPoint pts[], unsigned segType,
440 pos->set(SkScalarInterp(pts[0].fX, pts[1].fX, t),
441 SkScalarInterp(pts[0].fY, pts[1].fY, t));
444 tangent->setNormalize(pts[1].fX - pts[0].fX, pts[1].fY - pts[0].fY);
448 SkEvalQuadAt(pts, t, pos, tangent);
454 SkConic(pts[0], pts[2], pts[3], pts[1].fX).evalAt(t, pos, tangent);
460 SkEvalCubicAt(pts, t, pos, tangent, nullptr);
509 SkContourMeasure::SkContourMeasure(SkTDArray<Segment>&& segs, SkTDArray<SkPoint>&& pts, SkScalar length, bool isClosed)
511 , fPts(std::move(pts))