Lines Matching defs:dst
156 void SkChopQuadAt(const SkPoint src[3], SkPoint dst[5], SkScalar t) {
167 dst[0] = to_point(p0);
168 dst[1] = to_point(p01);
169 dst[2] = to_point(interp(p01, p12, tt));
170 dst[3] = to_point(p12);
171 dst[4] = to_point(p2);
174 void SkChopQuadAtHalf(const SkPoint src[3], SkPoint dst[5]) {
175 SkChopQuadAt(src, dst, 0.5f);
258 stored in dst[]. Guarantees that the 1/2 quads will be monotonic.
260 int SkChopQuadAtYExtrema(const SkPoint src[3], SkPoint dst[5]) {
262 SkASSERT(dst);
271 SkChopQuadAt(src, dst, tValue);
272 flatten_double_quad_extrema(&dst[0].fY);
275 // if we get here, we need to force dst to be monotonic, even though
279 dst[0].set(src[0].fX, a);
280 dst[1].set(src[1].fX, b);
281 dst[2].set(src[2].fX, c);
286 stored in dst[]. Guarantees that the 1/2 quads will be monotonic.
288 int SkChopQuadAtXExtrema(const SkPoint src[3], SkPoint dst[5]) {
290 SkASSERT(dst);
299 SkChopQuadAt(src, dst, tValue);
300 flatten_double_quad_extrema(&dst[0].fX);
303 // if we get here, we need to force dst to be monotonic, even though
307 dst[0].set(a, src[0].fY);
308 dst[1].set(b, src[1].fY);
309 dst[2].set(c, src[2].fY);
348 int SkChopQuadAtMaxCurvature(const SkPoint src[3], SkPoint dst[5]) {
351 SkChopQuadAt(src, dst, t);
354 memcpy(dst, src, 3 * sizeof(SkPoint));
359 void SkConvertQuadToCubic(const SkPoint src[3], SkPoint dst[4]) {
365 dst[0] = to_point(s0);
366 dst[1] = to_point(s0 + (s1 - s0) * scale);
367 dst[2] = to_point(s2 + (s1 - s2) * scale);
368 dst[3] = to_point(s2);
454 void SkChopCubicAt(const SkPoint src[4], SkPoint dst[7], SkScalar t) {
459 memcpy(dst, src, sizeof(SkPoint) * 4);
460 dst[4] = dst[5] = dst[6] = src[3];
477 dst[0] = skvx::bit_pun<SkPoint>(p0);
478 dst[1] = skvx::bit_pun<SkPoint>(ab);
479 dst[2] = skvx::bit_pun<SkPoint>(abc);
480 dst[3] = skvx::bit_pun<SkPoint>(abcd);
481 dst[4] = skvx::bit_pun<SkPoint>(bcd);
482 dst[5] = skvx::bit_pun<SkPoint>(cd);
483 dst[6] = skvx::bit_pun<SkPoint>(p3);
486 void SkChopCubicAt(const SkPoint src[4], SkPoint dst[10], float t0, float t1) {
492 SkChopCubicAt(src, dst, t0);
493 dst[7] = dst[8] = dst[9] = src[3];
514 dst[0] = skvx::bit_pun<SkPoint>(p00.lo);
515 dst[1] = skvx::bit_pun<SkPoint>(ab.lo);
516 dst[2] = skvx::bit_pun<SkPoint>(abc.lo);
517 dst[3] = skvx::bit_pun<SkPoint>(abcd.lo);
518 middle.store(dst + 4);
519 dst[6] = skvx::bit_pun<SkPoint>(abcd.hi);
520 dst[7] = skvx::bit_pun<SkPoint>(bcd.hi);
521 dst[8] = skvx::bit_pun<SkPoint>(cd.hi);
522 dst[9] = skvx::bit_pun<SkPoint>(p33.hi);
525 void SkChopCubicAt(const SkPoint src[4], SkPoint dst[],
532 if (dst) {
534 memcpy(dst, src, 4*sizeof(SkPoint));
544 SkChopCubicAt(src, dst, tt[0], tt[1]);
545 src = dst = dst + 6;
555 SkChopCubicAt(src, dst, t);
561 void SkChopCubicAtHalf(const SkPoint src[4], SkPoint dst[7]) {
562 SkChopCubicAt(src, dst, 0.5f);
678 converter. Depending on what is returned, dst[] is treated as follows:
679 0 dst[0..3] is the original cubic
680 1 dst[0..3] and dst[3..6] are the two new cubics
681 2 dst[0..3], dst[3..6], dst[6..9] are the three new cubics
682 If dst == null, it is ignored and only the count is returned.
684 int SkChopCubicAtYExtrema(const SkPoint src[4], SkPoint dst[10]) {
689 SkChopCubicAt(src, dst, tValues, roots);
690 if (dst && roots > 0) {
692 flatten_double_cubic_extrema(&dst[0].fY);
694 flatten_double_cubic_extrema(&dst[3].fY);
700 int SkChopCubicAtXExtrema(const SkPoint src[4], SkPoint dst[10]) {
705 SkChopCubicAt(src, dst, tValues, roots);
706 if (dst && roots > 0) {
708 flatten_double_cubic_extrema(&dst[0].fX);
710 flatten_double_cubic_extrema(&dst[3].fX);
741 int SkChopCubicAtInflections(const SkPoint src[], SkPoint dst[10]) {
745 if (dst) {
747 memcpy(dst, src, 4 * sizeof(SkPoint));
749 SkChopCubicAt(src, dst, tValues, count);
925 SkScalar dst[3];
926 memcpy(dst, data[i].fData, data[i].fCount * sizeof(dst[0]));
927 int count = collaps_duplicates(dst, data[i].fCount);
930 SkASSERT(dst[j-1] < dst[j]);
1046 int SkChopCubicAtMaxCurvature(const SkPoint src[4], SkPoint dst[13],
1065 if (dst) {
1067 memcpy(dst, src, 4 * sizeof(SkPoint));
1069 SkChopCubicAt(src, dst, tValues, count);
1142 static bool cubic_dchop_at_intercept(const SkPoint src[4], SkScalar intercept, SkPoint dst[7],
1150 dst[i] = pair.pts[i].asSkPoint();
1157 bool SkChopMonoCubicAtY(SkPoint src[4], SkScalar y, SkPoint dst[7]) {
1158 return cubic_dchop_at_intercept(src, y, dst, &SkDCubic::horizontalIntersect);
1161 bool SkChopMonoCubicAtX(SkPoint src[4], SkScalar x, SkPoint dst[7]) {
1162 return cubic_dchop_at_intercept(src, x, dst, &SkDCubic::verticalIntersect);
1223 static void p3d_interp(const SkScalar src[7], SkScalar dst[7], SkScalar t) {
1226 dst[0] = ab;
1227 dst[3] = SkScalarInterp(ab, bc, t);
1228 dst[6] = bc;
1231 static void ratquad_mapTo3D(const SkPoint src[3], SkScalar w, SkPoint3 dst[3]) {
1232 dst[0].set(src[0].fX * 1, src[0].fY * 1, 1);
1233 dst[1].set(src[1].fX * w, src[1].fY * w, w);
1234 dst[2].set(src[2].fX * 1, src[2].fY * 1, 1);
1242 bool SkConic::chopAt(SkScalar t, SkConic dst[2]) const {
1251 dst[0].fPts[0] = fPts[0];
1252 dst[0].fPts[1] = project_down(tmp2[0]);
1253 dst[0].fPts[2] = project_down(tmp2[1]); dst[1].fPts[0] = dst[0].fPts[2];
1254 dst[1].fPts[1] = project_down(tmp2[2]);
1255 dst[1].fPts[2] = fPts[2];
1262 // However, in our case, we know that for dst[0]:
1263 // w0 == 1, and for dst[1], w2 == 1
1266 dst[0].fW = tmp2[0].fZ / root;
1267 dst[1].fW = tmp2[2].fZ / root;
1268 SkASSERT(sizeof(dst[0]) == sizeof(SkScalar) * 7);
1270 return SkScalarsAreFinite(&dst[0].fPts[0].fX, 7 * 2);
1273 void SkConic::chopAt(SkScalar t1, SkScalar t2, SkConic* dst) const {
1276 *dst = *this;
1281 *dst = pair[SkToBool(t1)];
1298 dst->fPts[0] = to_point(aXY / aZZ);
1299 dst->fPts[1] = to_point(bXY / bZZ);
1300 dst->fPts[2] = to_point(cXY / cZZ);
1302 dst->fW = ww[0];
1346 void SkConic::chop(SkConic * SK_RESTRICT dst) const {
1365 dst[0].fPts[0] = fPts[0];
1366 dst[0].fPts[1] = to_point((p0 + wp1) * scale);
1367 dst[0].fPts[2] = dst[1].fPts[0] = mPt;
1368 dst[1].fPts[1] = to_point((wp1 + p2) * scale);
1369 dst[1].fPts[2] = fPts[2];
1371 dst[0].fW = dst[1].fW = newW;
1445 SkConic dst[2];
1446 src.chop(dst);
1452 SkScalar midY = dst[0].fPts[2].fY;
1456 dst[0].fPts[2].fY = dst[1].fPts[0].fY = closerY;
1458 if (!between(startY, dst[0].fPts[1].fY, dst[0].fPts[2].fY)) {
1461 dst[0].fPts[1].fY = startY;
1463 if (!between(dst[1].fPts[0].fY, dst[1].fPts[1].fY, endY)) {
1466 dst[1].fPts[1].fY = endY;
1469 SkASSERT(between(startY, dst[0].fPts[1].fY, dst[0].fPts[2].fY));
1470 SkASSERT(between(dst[0].fPts[1].fY, dst[0].fPts[2].fY, dst[1].fPts[1].fY));
1471 SkASSERT(between(dst[0].fPts[2].fY, dst[1].fPts[1].fY, endY));
1474 pts = subdivide(dst[0], pts, level);
1475 return subdivide(dst[1], pts, level);
1484 SkConic dst[2];
1485 this->chop(dst);
1487 if (SkPointPriv::EqualsWithinTolerance(dst[0].fPts[1], dst[0].fPts[2]) &&
1488 SkPointPriv::EqualsWithinTolerance(dst[1].fPts[0], dst[1].fPts[1])) {
1489 pts[1] = pts[2] = pts[3] = dst[0].fPts[1]; // set ctrl == end to make lines
1490 pts[4] = dst[1].fPts[2];
1556 bool SkConic::chopAtXExtrema(SkConic dst[2]) const {
1559 if (!this->chopAt(t, dst)) {
1565 SkScalar value = dst[0].fPts[2].fX;
1566 dst[0].fPts[1].fX = value;
1567 dst[1].fPts[0].fX = value;
1568 dst[1].fPts[1].fX = value;
1574 bool SkConic::chopAtYExtrema(SkConic dst[2]) const {
1577 if (!this->chopAt(t, dst)) {
1583 SkScalar value = dst[0].fPts[2].fY;
1584 dst[0].fPts[1].fY = value;
1585 dst[1].fPts[0].fY = value;
1586 dst[1].fPts[1].fY = value;
1624 SkPoint3 src[3], dst[3];
1628 matrix.mapHomogeneousPoints(dst, src, 3);
1632 double w0 = dst[0].fZ;
1633 double w1 = dst[1].fZ;
1634 double w2 = dst[2].fZ;
1639 const SkMatrix* userMatrix, SkConic dst[kMaxConicsForArc]) {
1687 dst[i].set(&quadrantPts[i * 2], quadrantWeight);
1706 dst[conicCount].set(lastQ, offCurve, finalP, cosThetaOver2);
1721 matrix.mapPoints(dst[i].fPts, 3);