1a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com#include "EdgeWalker_Test.h" 2a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com#include "Intersection_Tests.h" 3a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com#include "ShapeOps.h" 4a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 5a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.combool gShowOriginal = true; 6a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 7a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comstruct curve { 8a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com SkPath::Verb verb; 9a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com SkPoint pts[4]; 10a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com}; 11a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 12a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comstruct curve test1[] = { 13a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com{SkPath::kQuad_Verb, {{366.608826f, 151.196014f}, {378.803101f, 136.674606f}, {398.164948f, 136.674606f}}}, 14a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com{SkPath::kLine_Verb, {{354.009216f, 208.816208f}, {393.291473f, 102.232819f}}}, 15a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com{SkPath::kQuad_Verb, {{359.978058f, 136.581512f}, {378.315979f, 136.581512f}, {388.322723f, 149.613556f}}}, 16a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com{SkPath::kQuad_Verb, {{364.390686f, 157.898193f}, {375.281769f, 136.674606f}, {396.039917f, 136.674606f}}}, 17a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com{SkPath::kLine_Verb, {{396.039917f, 136.674606f}, {350, 120}}}, 18a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com{SkPath::kDone_Verb} 19a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com}; 20a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 21f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.comstruct curve test2[] = { 22f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com{SkPath::kQuad_Verb, {{366.608826f, 151.196014f}, {378.803101f, 136.674606f}, {398.164948f, 136.674606f}}}, 23f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com{SkPath::kQuad_Verb, {{359.978058f, 136.581512f}, {378.315979f, 136.581512f}, {388.322723f, 149.613556f}}}, 24f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com{SkPath::kQuad_Verb, {{364.390686f, 157.898193f}, {375.281769f, 136.674606f}, {396.039917f, 136.674606f}}}, 25f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com{SkPath::kDone_Verb} 26f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com}; 27f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com 28a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comstruct curve* testSet[] = { 29f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com test2, 30a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com test1 31a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com}; 32a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 33a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comsize_t testSet_count = sizeof(testSet) / sizeof(testSet[0]); 34a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 35a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comstatic void construct() { 36a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com for (size_t idx = 0; idx < testSet_count; ++idx) { 37a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com const curve* test = testSet[idx]; 38a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com SkPath path; 39a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com bool pathComplete = false; 40a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com bool first = true; 41a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com do { 42a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com if (first) { 43a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com path.moveTo(test->pts[0].fX, test->pts[0].fY); 44a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com first = false; 45a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } else if (test->verb != SkPath::kDone_Verb) { 46a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com path.lineTo(test->pts[0].fX, test->pts[0].fY); 47a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } 48a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com switch (test->verb) { 49a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com case SkPath::kDone_Verb: 50a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com pathComplete = true; 51a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com break; 52a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com case SkPath::kLine_Verb: 53a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com path.lineTo(test->pts[1].fX, test->pts[1].fY); 54a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com break; 55a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com case SkPath::kQuad_Verb: 56a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com path.quadTo(test->pts[1].fX, test->pts[1].fY, test->pts[2].fX, test->pts[2].fY); 57a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com break; 58a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com case SkPath::kCubic_Verb: 59a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com path.cubicTo(test->pts[1].fX, test->pts[1].fY, test->pts[2].fX, test->pts[2].fY, test->pts[3].fX, test->pts[3].fY); 60a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com break; 619f3e9a5a17a7546e1c5bfde1eb7e6e9c11870333caryclark@google.com default: 629f3e9a5a17a7546e1c5bfde1eb7e6e9c11870333caryclark@google.com SkASSERT(0); 63a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } 64a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com test++; 65a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } while (!pathComplete); 66a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com path.close(); 67a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com if (gShowOriginal) { 68a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com showPath(path, NULL); 69a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com SkDebugf("simplified:\n"); 70a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } 71a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com testSimplifyx(path); 72a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } 73a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com} 74a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 75a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comstatic void (*tests[])() = { 76a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com construct, 77a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com}; 78a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 79a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comstatic const size_t testCount = sizeof(tests) / sizeof(tests[0]); 80a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 81a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comstatic void (*firstTest)() = 0; 82a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comstatic bool skipAll = false; 83a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com 84a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.comvoid MiniSimplify_Test() { 85a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com if (skipAll) { 86a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com return; 87a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } 88a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com size_t index = 0; 89a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com if (firstTest) { 90a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com while (index < testCount && tests[index] != firstTest) { 91a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com ++index; 92a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } 93a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } 94a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com bool firstTestComplete = false; 95a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com for ( ; index < testCount; ++index) { 96a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com (*tests[index])(); 97a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com firstTestComplete = true; 98a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com } 99a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com} 100