OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
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 "GrAAConvexTessellator.h" | 8 #include "GrAAConvexTessellator.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkPath.h" | 10 #include "SkPath.h" |
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 return; | 828 return; |
829 } | 829 } |
830 | 830 |
831 SkASSERT(fPts.count() <= 1 || fPts.count() == fNorms.count()+1); | 831 SkASSERT(fPts.count() <= 1 || fPts.count() == fNorms.count()+1); |
832 if (this->numPts() >= 2 && | 832 if (this->numPts() >= 2 && |
833 abs_dist_from_line(fPts.top(), fNorms.top(), p) < kClose) { | 833 abs_dist_from_line(fPts.top(), fNorms.top(), p) < kClose) { |
834 // The old last point is on the line from the second to last to the new
point | 834 // The old last point is on the line from the second to last to the new
point |
835 this->popLastPt(); | 835 this->popLastPt(); |
836 fNorms.pop(); | 836 fNorms.pop(); |
837 fIsCurve.pop(); | 837 fIsCurve.pop(); |
| 838 // double-check that the new last point is not a duplicate of the new po
int. In an ideal |
| 839 // world this wouldn't be necessary (since it's only possible for non-co
nvex paths), but |
| 840 // floating point precision issues mean it can actually happen on paths
that were determined |
| 841 // to be convex. |
| 842 if (duplicate_pt(p, this->lastPoint())) { |
| 843 return; |
| 844 } |
838 } | 845 } |
839 SkScalar initialRingCoverage = fStrokeWidth < 0.0f ? 0.5f : 1.0f; | 846 SkScalar initialRingCoverage = fStrokeWidth < 0.0f ? 0.5f : 1.0f; |
840 this->addPt(p, 0.0f, initialRingCoverage, false, isCurve); | 847 this->addPt(p, 0.0f, initialRingCoverage, false, isCurve); |
841 if (this->numPts() > 1) { | 848 if (this->numPts() > 1) { |
842 *fNorms.push() = fPts.top() - fPts[fPts.count()-2]; | 849 *fNorms.push() = fPts.top() - fPts[fPts.count()-2]; |
843 SkDEBUGCODE(SkScalar len =) SkPoint::Normalize(&fNorms.top()); | 850 SkDEBUGCODE(SkScalar len =) SkPoint::Normalize(&fNorms.top()); |
844 SkASSERT(len > 0.0f); | 851 SkASSERT(len > 0.0f); |
845 SkASSERT(SkScalarNearlyEqual(1.0f, fNorms.top().length())); | 852 SkASSERT(SkScalarNearlyEqual(1.0f, fNorms.top().length())); |
846 } | 853 } |
847 } | 854 } |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1018 SkString num; | 1025 SkString num; |
1019 num.printf("%d", i); | 1026 num.printf("%d", i); |
1020 canvas->drawText(num.c_str(), num.size(), | 1027 canvas->drawText(num.c_str(), num.size(), |
1021 this->point(i).fX, this->point(i).fY+(kPointRadius/2.0f
), | 1028 this->point(i).fX, this->point(i).fY+(kPointRadius/2.0f
), |
1022 paint); | 1029 paint); |
1023 } | 1030 } |
1024 } | 1031 } |
1025 | 1032 |
1026 #endif | 1033 #endif |
1027 | 1034 |
OLD | NEW |