OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkBuffer.h" | 8 #include "SkBuffer.h" |
9 #include "SkCubicClipper.h" | 9 #include "SkCubicClipper.h" |
10 #include "SkErrorInternals.h" | 10 #include "SkErrorInternals.h" |
(...skipping 1394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1405 | 1405 |
1406 if (SkScalarNearlyZero(sinh)) { // angle is too tight | 1406 if (SkScalarNearlyZero(sinh)) { // angle is too tight |
1407 this->lineTo(x1, y1); | 1407 this->lineTo(x1, y1); |
1408 return; | 1408 return; |
1409 } | 1409 } |
1410 | 1410 |
1411 SkScalar dist = SkScalarAbs(SkScalarMulDiv(radius, SK_Scalar1 - cosh, sinh))
; | 1411 SkScalar dist = SkScalarAbs(SkScalarMulDiv(radius, SK_Scalar1 - cosh, sinh))
; |
1412 | 1412 |
1413 SkScalar xx = x1 - SkScalarMul(dist, before.fX); | 1413 SkScalar xx = x1 - SkScalarMul(dist, before.fX); |
1414 SkScalar yy = y1 - SkScalarMul(dist, before.fY); | 1414 SkScalar yy = y1 - SkScalarMul(dist, before.fY); |
1415 #ifndef SK_SUPPORT_LEGACY_ARCTO | |
1416 after.setLength(dist); | 1415 after.setLength(dist); |
1417 this->lineTo(xx, yy); | 1416 this->lineTo(xx, yy); |
1418 SkScalar weight = SkScalarSqrt(SK_ScalarHalf + cosh * SK_ScalarHalf); | 1417 SkScalar weight = SkScalarSqrt(SK_ScalarHalf + cosh * SK_ScalarHalf); |
1419 this->conicTo(x1, y1, x1 + after.fX, y1 + after.fY, weight); | 1418 this->conicTo(x1, y1, x1 + after.fX, y1 + after.fY, weight); |
1420 #else | |
1421 SkRotationDirection arcDir; | |
1422 | |
1423 // now turn before/after into normals | |
1424 if (sinh > 0) { | |
1425 before.rotateCCW(); | |
1426 after.rotateCCW(); | |
1427 arcDir = kCW_SkRotationDirection; | |
1428 } else { | |
1429 before.rotateCW(); | |
1430 after.rotateCW(); | |
1431 arcDir = kCCW_SkRotationDirection; | |
1432 } | |
1433 | |
1434 SkMatrix matrix; | |
1435 SkPoint pts[kSkBuildQuadArcStorage]; | |
1436 | |
1437 matrix.setScale(radius, radius); | |
1438 matrix.postTranslate(xx - SkScalarMul(radius, before.fX), | |
1439 yy - SkScalarMul(radius, before.fY)); | |
1440 | |
1441 int count = SkBuildQuadArc(before, after, arcDir, &matrix, pts); | |
1442 | |
1443 this->incReserve(count); | |
1444 // [xx,yy] == pts[0] | |
1445 this->lineTo(xx, yy); | |
1446 for (int i = 1; i < count; i += 2) { | |
1447 this->quadTo(pts[i], pts[i+1]); | |
1448 } | |
1449 #endif | |
1450 } | 1419 } |
1451 | 1420 |
1452 /////////////////////////////////////////////////////////////////////////////// | 1421 /////////////////////////////////////////////////////////////////////////////// |
1453 | 1422 |
1454 void SkPath::addPath(const SkPath& path, SkScalar dx, SkScalar dy, AddPathMode m
ode) { | 1423 void SkPath::addPath(const SkPath& path, SkScalar dx, SkScalar dy, AddPathMode m
ode) { |
1455 SkMatrix matrix; | 1424 SkMatrix matrix; |
1456 | 1425 |
1457 matrix.setTranslate(dx, dy); | 1426 matrix.setTranslate(dx, dy); |
1458 this->addPath(path, matrix, mode); | 1427 this->addPath(path, matrix, mode); |
1459 } | 1428 } |
(...skipping 1743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3203 } | 3172 } |
3204 } while (!done); | 3173 } while (!done); |
3205 return SkToBool(tangents.count()) ^ isInverse; | 3174 return SkToBool(tangents.count()) ^ isInverse; |
3206 } | 3175 } |
3207 | 3176 |
3208 int SkPath::ConvertConicToQuads(const SkPoint& p0, const SkPoint& p1, const SkPo
int& p2, | 3177 int SkPath::ConvertConicToQuads(const SkPoint& p0, const SkPoint& p1, const SkPo
int& p2, |
3209 SkScalar w, SkPoint pts[], int pow2) { | 3178 SkScalar w, SkPoint pts[], int pow2) { |
3210 const SkConic conic(p0, p1, p2, w); | 3179 const SkConic conic(p0, p1, p2, w); |
3211 return conic.chopIntoQuadsPOW2(pts, pow2); | 3180 return conic.chopIntoQuadsPOW2(pts, pow2); |
3212 } | 3181 } |
OLD | NEW |