OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 #include "PathOpsExtendedTest.h" | 7 #include "PathOpsExtendedTest.h" |
8 #include "PathOpsThreadedCommon.h" | 8 #include "PathOpsThreadedCommon.h" |
9 #include "SkIntersections.h" | 9 #include "SkIntersections.h" |
10 #include "SkPathOpsLine.h" | 10 #include "SkPathOpsLine.h" |
11 #include "SkPathOpsQuad.h" | 11 #include "SkPathOpsQuad.h" |
12 #include "SkReduceOrder.h" | 12 #include "SkReduceOrder.h" |
| 13 #include "SkString.h" |
13 | 14 |
14 static int doIntersect(SkIntersections& intersections, const SkDQuad& quad, cons
t SkDLine& line, | 15 static int doIntersect(SkIntersections& intersections, const SkDQuad& quad, cons
t SkDLine& line, |
15 bool& flipped) { | 16 bool& flipped) { |
16 int result; | 17 int result; |
17 flipped = false; | 18 flipped = false; |
18 if (line[0].fX == line[1].fX) { | 19 if (line[0].fX == line[1].fX) { |
19 double top = line[0].fY; | 20 double top = line[0].fY; |
20 double bottom = line[1].fY; | 21 double bottom = line[1].fY; |
21 flipped = top > bottom; | 22 flipped = top > bottom; |
22 if (flipped) { | 23 if (flipped) { |
(...skipping 10 matching lines...) Expand all Loading... |
33 result = intersections.horizontal(quad, left, right, line[0].fY, flipped
); | 34 result = intersections.horizontal(quad, left, right, line[0].fY, flipped
); |
34 } else { | 35 } else { |
35 intersections.intersect(quad, line); | 36 intersections.intersect(quad, line); |
36 result = intersections.used(); | 37 result = intersections.used(); |
37 } | 38 } |
38 return result; | 39 return result; |
39 } | 40 } |
40 | 41 |
41 static void testLineIntersect(skiatest::Reporter* reporter, const SkDQuad& quad, | 42 static void testLineIntersect(skiatest::Reporter* reporter, const SkDQuad& quad, |
42 const SkDLine& line, const double x, const double
y) { | 43 const SkDLine& line, const double x, const double
y) { |
43 char pathStr[1024]; | 44 SkString pathStr; |
44 sk_bzero(pathStr, sizeof(pathStr)); | 45 pathStr.appendf(" path.moveTo(%1.9g, %1.9g);\n", quad[0].fX, quad[0].fY); |
45 char* str = pathStr; | 46 pathStr.appendf(" path.quadTo(%1.9g, %1.9g, %1.9g, %1.9g);\n", quad[1].fX
, |
46 str += sprintf(str, " path.moveTo(%1.9g, %1.9g);\n", quad[0].fX, quad[0].
fY); | |
47 str += sprintf(str, " path.quadTo(%1.9g, %1.9g, %1.9g, %1.9g);\n", quad[1
].fX, | |
48 quad[1].fY, quad[2].fX, quad[2].fY); | 47 quad[1].fY, quad[2].fX, quad[2].fY); |
49 str += sprintf(str, " path.moveTo(%1.9g, %1.9g);\n", line[0].fX, line[0].
fY); | 48 pathStr.appendf(" path.moveTo(%1.9g, %1.9g);\n", line[0].fX, line[0].fY); |
50 str += sprintf(str, " path.lineTo(%1.9g, %1.9g);\n", line[1].fX, line[1].
fY); | 49 pathStr.appendf(" path.lineTo(%1.9g, %1.9g);\n", line[1].fX, line[1].fY); |
51 | 50 |
52 SkIntersections intersections; | 51 SkIntersections intersections; |
53 bool flipped = false; | 52 bool flipped = false; |
54 int result = doIntersect(intersections, quad, line, flipped); | 53 int result = doIntersect(intersections, quad, line, flipped); |
55 bool found = false; | 54 bool found = false; |
56 for (int index = 0; index < result; ++index) { | 55 for (int index = 0; index < result; ++index) { |
57 double quadT = intersections[0][index]; | 56 double quadT = intersections[0][index]; |
58 SkDPoint quadXY = quad.ptAtT(quadT); | 57 SkDPoint quadXY = quad.ptAtT(quadT); |
59 double lineT = intersections[1][index]; | 58 double lineT = intersections[1][index]; |
60 SkDPoint lineXY = line.ptAtT(lineT); | 59 SkDPoint lineXY = line.ptAtT(lineT); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 for (int c = 0 ; c < 16; ++c) { | 117 for (int c = 0 ; c < 16; ++c) { |
119 *testRunner.fRunnables.append() = new PathOpsThreadedRunnable( | 118 *testRunner.fRunnables.append() = new PathOpsThreadedRunnable( |
120 &testQuadLineIntersectMain, a, b, c, 0, &testRunner); | 119 &testQuadLineIntersectMain, a, b, c, 0, &testRunner); |
121 } | 120 } |
122 if (!reporter->allowExtendedTest()) goto finish; | 121 if (!reporter->allowExtendedTest()) goto finish; |
123 } | 122 } |
124 } | 123 } |
125 finish: | 124 finish: |
126 testRunner.render(); | 125 testRunner.render(); |
127 } | 126 } |
OLD | NEW |