Lines Matching refs:distance
197 SkScalar compute_line_seg(SkPoint p0, SkPoint p1, SkScalar distance, unsigned ptIndex);
198 SkScalar compute_quad_segs(const SkPoint pts[3], SkScalar distance,
200 SkScalar compute_conic_segs(const SkConic& conic, 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,
215 distance = this->compute_quad_segs(tmp, distance, mint, halft, ptIndex);
216 distance = this->compute_quad_segs(&tmp[2], distance, halft, maxt, ptIndex);
219 SkScalar prevD = distance;
220 distance += d;
221 if (distance > prevD) {
224 seg->fDistance = distance;
230 return distance;
233 SkScalar SkContourMeasureIter::Impl::compute_conic_segs(const SkConic& conic, SkScalar distance,
240 return distance;
243 distance = this->compute_conic_segs(conic, distance, mint, minPt, halft, halfPt, ptIndex);
244 distance = this->compute_conic_segs(conic, distance, halft, halfPt, maxt, maxPt, ptIndex);
247 SkScalar prevD = distance;
248 distance += d;
249 if (distance > prevD) {
252 seg->fDistance = distance;
258 return distance;
261 SkScalar SkContourMeasureIter::Impl::compute_cubic_segs(const SkPoint pts[4], SkScalar distance,
268 distance = this->compute_cubic_segs(tmp, distance, mint, halft, ptIndex);
269 distance = this->compute_cubic_segs(&tmp[3], distance, halft, maxt, ptIndex);
272 SkScalar prevD = distance;
273 distance += d;
274 if (distance > prevD) {
277 seg->fDistance = distance;
283 return distance;
286 SkScalar SkContourMeasureIter::Impl::compute_line_seg(SkPoint p0, SkPoint p1, SkScalar distance,
290 SkScalar prevD = distance;
291 distance += d;
292 if (distance > prevD) {
295 seg->fDistance = distance;
300 return distance;
308 SkScalar distance = 0;
312 SkASSERT(seg->fDistance > distance);
323 distance = seg->fDistance;
332 SkScalar distance = 0;
337 * as we accumulate distance, we have to check that the result of +=
339 * still have no effect on distance (if distance >>> delta).
363 SkScalar prevD = distance;
364 distance = this->compute_line_seg(pts[0], pts[1], distance, ptIndex);
365 if (distance > prevD) {
373 SkScalar prevD = distance;
374 distance = this->compute_quad_segs(pts, distance, 0, kMaxTValue, ptIndex);
375 if (distance > prevD) {
384 SkScalar prevD = distance;
385 distance = this->compute_conic_segs(conic, distance, 0, conic.fPts[0],
387 if (distance > prevD) {
399 SkScalar prevD = distance;
400 distance = this->compute_cubic_segs(pts, distance, 0, kMaxTValue, ptIndex);
401 if (distance > prevD) {
414 if (!SkScalarIsFinite(distance)) {
422 SkScalar prevD = distance;
424 distance = this->compute_line_seg(fPts[ptIndex], firstPt, distance, ptIndex);
425 if (distance > prevD) {
432 return new SkContourMeasure(std::move(fSegments), std::move(fPts), distance, haveSeenClose);
546 const SkContourMeasure::Segment* SkContourMeasure::distanceToSegment( SkScalar distance,
549 SkASSERT(distance >= 0 && distance <= length);
554 int index = SkTKSearch<Segment, SkScalar>(seg, count, distance);
571 SkASSERT(distance >= startD);
574 *t = startT + (seg->getScalarT() - startT) * (distance - startD) / (seg->fDistance - startD);
578 bool SkContourMeasure::getPosTan(SkScalar distance, SkPoint* pos, SkVector* tangent) const {
579 if (SkScalarIsNaN(distance)) {
586 // pin the distance to a legal range
587 if (distance < 0) {
588 distance = 0;
589 } else if (distance > length) {
590 distance = length;
594 const Segment* seg = this->distanceToSegment(distance, &t);
604 bool SkContourMeasure::getMatrix(SkScalar distance, SkMatrix* matrix, MatrixFlags flags) const {
608 if (this->getPosTan(distance, &position, &tangent)) {