| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "Test.h" | 8 #include "Test.h" |
| 9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 #include "SkPaint.h" | 10 #include "SkPaint.h" |
| (...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1274 // passing tests (all moveTo / lineTo... | 1274 // passing tests (all moveTo / lineTo... |
| 1275 SkPoint r1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; | 1275 SkPoint r1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; |
| 1276 SkPoint r2[] = {{1, 0}, {1, 1}, {0, 1}, {0, 0}}; | 1276 SkPoint r2[] = {{1, 0}, {1, 1}, {0, 1}, {0, 0}}; |
| 1277 SkPoint r3[] = {{1, 1}, {0, 1}, {0, 0}, {1, 0}}; | 1277 SkPoint r3[] = {{1, 1}, {0, 1}, {0, 0}, {1, 0}}; |
| 1278 SkPoint r4[] = {{0, 1}, {0, 0}, {1, 0}, {1, 1}}; | 1278 SkPoint r4[] = {{0, 1}, {0, 0}, {1, 0}, {1, 1}}; |
| 1279 SkPoint r5[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}}; | 1279 SkPoint r5[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}}; |
| 1280 SkPoint r6[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; | 1280 SkPoint r6[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; |
| 1281 SkPoint r7[] = {{1, 1}, {1, 0}, {0, 0}, {0, 1}}; | 1281 SkPoint r7[] = {{1, 1}, {1, 0}, {0, 0}, {0, 1}}; |
| 1282 SkPoint r8[] = {{1, 0}, {0, 0}, {0, 1}, {1, 1}}; | 1282 SkPoint r8[] = {{1, 0}, {0, 0}, {0, 1}, {1, 1}}; |
| 1283 SkPoint r9[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; | 1283 SkPoint r9[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; |
| 1284 SkPoint ra[] = {{0, 0}, {0, .5f}, {0, 1}, {.5f, 1}, {1, 1}, {1, .5f}, | 1284 SkPoint ra[] = {{0, 0}, {0, .5f}, {0, 1}, {.5f, 1}, {1, 1}, {1, .5f}, {1, 0}
, {.5f, 0}}; |
| 1285 {1, 0}, {.5f, 0}}; | 1285 SkPoint rb[] = {{0, 0}, {.5f, 0}, {1, 0}, {1, .5f}, {1, 1}, {.5f, 1}, {0, 1}
, {0, .5f}}; |
| 1286 SkPoint rb[] = {{0, 0}, {.5f, 0}, {1, 0}, {1, .5f}, {1, 1}, {.5f, 1}, | |
| 1287 {0, 1}, {0, .5f}}; | |
| 1288 SkPoint rc[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}}; | 1286 SkPoint rc[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}}; |
| 1289 SkPoint rd[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}, {0, 0}}; | 1287 SkPoint rd[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}, {0, 0}}; |
| 1290 SkPoint re[] = {{0, 0}, {1, 0}, {1, 0}, {1, 1}, {0, 1}}; | 1288 SkPoint re[] = {{0, 0}, {1, 0}, {1, 0}, {1, 1}, {0, 1}}; |
| 1291 SkPoint rf[] = {{1, 0}, {8, 0}, {8, 8}, {0, 8}, {0, 0}}; | 1289 SkPoint rf[] = {{1, 0}, {8, 0}, {8, 8}, {0, 8}, {0, 0}}; |
| 1292 | 1290 |
| 1293 // failing tests | 1291 // failing tests |
| 1294 SkPoint f1[] = {{0, 0}, {1, 0}, {1, 1}}; // too few points | 1292 SkPoint f1[] = {{0, 0}, {1, 0}, {1, 1}}; // too few points |
| 1295 SkPoint f2[] = {{0, 0}, {1, 1}, {0, 1}, {1, 0}}; // diagonal | 1293 SkPoint f2[] = {{0, 0}, {1, 1}, {0, 1}, {1, 0}}; // diagonal |
| 1296 SkPoint f3[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}, {1, 0}}; // wraps | 1294 SkPoint f3[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}, {1, 0}}; // wraps |
| 1297 SkPoint f4[] = {{0, 0}, {1, 0}, {0, 0}, {1, 0}, {1, 1}, {0, 1}}; // backs up | 1295 SkPoint f4[] = {{0, 0}, {1, 0}, {0, 0}, {1, 0}, {1, 1}, {0, 1}}; // backs up |
| 1298 SkPoint f5[] = {{0, 0}, {1, 0}, {1, 1}, {2, 0}}; // end overshoots | 1296 SkPoint f5[] = {{0, 0}, {1, 0}, {1, 1}, {2, 0}}; // end overshoots |
| 1299 SkPoint f6[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 2}}; // end overshoots | 1297 SkPoint f6[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 2}}; // end overshoots |
| 1300 SkPoint f7[] = {{0, 0}, {1, 0}, {1, 1}, {0, 2}}; // end overshoots | 1298 SkPoint f7[] = {{0, 0}, {1, 0}, {1, 1}, {0, 2}}; // end overshoots |
| 1301 SkPoint f8[] = {{0, 0}, {1, 0}, {1, 1}, {1, 0}}; // 'L' | 1299 SkPoint f8[] = {{0, 0}, {1, 0}, {1, 1}, {1, 0}}; // 'L' |
| 1302 SkPoint f9[] = {{1, 0}, {8, 0}, {8, 8}, {0, 8}, {0, 0}, {2, 0}}; // overlaps | 1300 SkPoint f9[] = {{1, 0}, {8, 0}, {8, 8}, {0, 8}, {0, 0}, {2, 0}}; // overlaps |
| 1303 SkPoint fa[] = {{1, 0}, {8, 0}, {8, 8}, {0, 8}, {0, -1}, {1, -1}}; // non co
linear gap | 1301 SkPoint fa[] = {{1, 0}, {8, 0}, {8, 8}, {0, 8}, {0, -1}, {1, -1}}; // non co
linear gap |
| 1304 SkPoint fb[] = {{1, 0}, {8, 0}, {8, 8}, {0, 8}, {0, 1}}; // falls short | 1302 SkPoint fb[] = {{1, 0}, {8, 0}, {8, 8}, {0, 8}, {0, 1}}; // falls short |
| 1305 | 1303 |
| 1306 // failing, no close | 1304 // failing, no close |
| 1307 SkPoint c1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; // close doesn't match | 1305 SkPoint c1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; // close doesn't match |
| 1308 SkPoint c2[] = {{0, 0}, {1, 0}, {1, 2}, {0, 2}, {0, 1}}; // ditto | 1306 SkPoint c2[] = {{0, 0}, {1, 0}, {1, 2}, {0, 2}, {0, 1}}; // ditto |
| 1309 | 1307 |
| 1310 size_t testLen[] = { | 1308 struct IsRectTest { |
| 1311 sizeof(r1), sizeof(r2), sizeof(r3), sizeof(r4), sizeof(r5), sizeof(r6), | 1309 SkPoint *fPoints; |
| 1312 sizeof(r7), sizeof(r8), sizeof(r9), sizeof(ra), sizeof(rb), sizeof(rc), | 1310 size_t fPointCount; |
| 1313 sizeof(rd), sizeof(re), sizeof(rf), | 1311 bool fClose; |
| 1314 sizeof(f1), sizeof(f2), sizeof(f3), sizeof(f4), sizeof(f5), sizeof(f6), | 1312 bool fIsRect; |
| 1315 sizeof(f7), sizeof(f8), sizeof(f9), sizeof(fa), sizeof(fb), | 1313 } tests[] = { |
| 1316 sizeof(c1), sizeof(c2) | 1314 { r1, SK_ARRAY_COUNT(r1), true, true }, |
| 1315 { r2, SK_ARRAY_COUNT(r2), true, true }, |
| 1316 { r3, SK_ARRAY_COUNT(r3), true, true }, |
| 1317 { r4, SK_ARRAY_COUNT(r4), true, true }, |
| 1318 { r5, SK_ARRAY_COUNT(r5), true, true }, |
| 1319 { r6, SK_ARRAY_COUNT(r6), true, true }, |
| 1320 { r7, SK_ARRAY_COUNT(r7), true, true }, |
| 1321 { r8, SK_ARRAY_COUNT(r8), true, true }, |
| 1322 { r9, SK_ARRAY_COUNT(r9), true, true }, |
| 1323 { ra, SK_ARRAY_COUNT(ra), true, true }, |
| 1324 { rb, SK_ARRAY_COUNT(rb), true, true }, |
| 1325 { rc, SK_ARRAY_COUNT(rc), true, true }, |
| 1326 { rd, SK_ARRAY_COUNT(rd), true, true }, |
| 1327 { re, SK_ARRAY_COUNT(re), true, true }, |
| 1328 { rf, SK_ARRAY_COUNT(rf), true, true }, |
| 1329 |
| 1330 { f1, SK_ARRAY_COUNT(f1), true, false }, |
| 1331 { f2, SK_ARRAY_COUNT(f2), true, false }, |
| 1332 { f3, SK_ARRAY_COUNT(f3), true, false }, |
| 1333 { f4, SK_ARRAY_COUNT(f4), true, false }, |
| 1334 { f5, SK_ARRAY_COUNT(f5), true, false }, |
| 1335 { f6, SK_ARRAY_COUNT(f6), true, false }, |
| 1336 { f7, SK_ARRAY_COUNT(f7), true, false }, |
| 1337 { f8, SK_ARRAY_COUNT(f8), true, false }, |
| 1338 { f9, SK_ARRAY_COUNT(f9), true, false }, |
| 1339 { fa, SK_ARRAY_COUNT(fa), true, false }, |
| 1340 { fb, SK_ARRAY_COUNT(fb), true, false }, |
| 1341 |
| 1342 { c1, SK_ARRAY_COUNT(c1), false, false }, |
| 1343 { c2, SK_ARRAY_COUNT(c2), false, false }, |
| 1317 }; | 1344 }; |
| 1318 SkPoint* tests[] = { | 1345 |
| 1319 r1, r2, r3, r4, r5, r6, r7, r8, r9, ra, rb, rc, rd, re, rf, | 1346 const size_t testCount = SK_ARRAY_COUNT(tests); |
| 1320 f1, f2, f3, f4, f5, f6, f7, f8, f9, fa, fb, | |
| 1321 c1, c2 | |
| 1322 }; | |
| 1323 SkPoint* lastPass = rf; | |
| 1324 SkPoint* lastClose = fb; | |
| 1325 bool fail = false; | |
| 1326 bool close = true; | |
| 1327 const size_t testCount = sizeof(tests) / sizeof(tests[0]); | |
| 1328 size_t index; | 1347 size_t index; |
| 1329 for (size_t testIndex = 0; testIndex < testCount; ++testIndex) { | 1348 for (size_t testIndex = 0; testIndex < testCount; ++testIndex) { |
| 1330 SkPath path; | 1349 SkPath path; |
| 1331 path.moveTo(tests[testIndex][0].fX, tests[testIndex][0].fY); | 1350 path.moveTo(tests[testIndex].fPoints[0].fX, tests[testIndex].fPoints[0].
fY); |
| 1332 for (index = 1; index < testLen[testIndex] / sizeof(SkPoint); ++index) { | 1351 for (index = 1; index < tests[testIndex].fPointCount; ++index) { |
| 1333 path.lineTo(tests[testIndex][index].fX, tests[testIndex][index].fY); | 1352 path.lineTo(tests[testIndex].fPoints[index].fX, tests[testIndex].fPo
ints[index].fY); |
| 1334 } | 1353 } |
| 1335 if (close) { | 1354 if (tests[testIndex].fClose) { |
| 1336 path.close(); | 1355 path.close(); |
| 1337 } | 1356 } |
| 1338 REPORTER_ASSERT(reporter, fail ^ path.isRect(0)); | 1357 REPORTER_ASSERT(reporter, tests[testIndex].fIsRect == path.isRect(NULL))
; |
| 1339 REPORTER_ASSERT(reporter, fail ^ path.isRect(NULL, NULL)); | 1358 REPORTER_ASSERT(reporter, tests[testIndex].fIsRect == path.isRect(NULL,
NULL)); |
| 1340 | 1359 |
| 1341 if (!fail) { | 1360 if (tests[testIndex].fIsRect) { |
| 1342 SkRect computed, expected; | 1361 SkRect computed, expected; |
| 1343 expected.set(tests[testIndex], testLen[testIndex] / sizeof(SkPoint))
; | 1362 expected.set(tests[testIndex].fPoints, tests[testIndex].fPointCount)
; |
| 1344 REPORTER_ASSERT(reporter, path.isRect(&computed)); | 1363 REPORTER_ASSERT(reporter, path.isRect(&computed)); |
| 1345 REPORTER_ASSERT(reporter, expected == computed); | 1364 REPORTER_ASSERT(reporter, expected == computed); |
| 1346 | 1365 |
| 1347 bool isClosed; | 1366 bool isClosed; |
| 1348 SkPath::Direction direction, cheapDirection; | 1367 SkPath::Direction direction, cheapDirection; |
| 1349 REPORTER_ASSERT(reporter, path.cheapComputeDirection(&cheapDirection
)); | 1368 REPORTER_ASSERT(reporter, path.cheapComputeDirection(&cheapDirection
)); |
| 1350 REPORTER_ASSERT(reporter, path.isRect(&isClosed, &direction)); | 1369 REPORTER_ASSERT(reporter, path.isRect(&isClosed, &direction)); |
| 1351 REPORTER_ASSERT(reporter, isClosed == close); | 1370 REPORTER_ASSERT(reporter, isClosed == tests[testIndex].fClose); |
| 1352 REPORTER_ASSERT(reporter, direction == cheapDirection); | 1371 REPORTER_ASSERT(reporter, direction == cheapDirection); |
| 1353 } else { | 1372 } else { |
| 1354 SkRect computed; | 1373 SkRect computed; |
| 1355 computed.set(123, 456, 789, 1011); | 1374 computed.set(123, 456, 789, 1011); |
| 1356 REPORTER_ASSERT(reporter, !path.isRect(&computed)); | 1375 REPORTER_ASSERT(reporter, !path.isRect(&computed)); |
| 1357 REPORTER_ASSERT(reporter, computed.fLeft == 123 && computed.fTop ==
456); | 1376 REPORTER_ASSERT(reporter, computed.fLeft == 123 && computed.fTop ==
456); |
| 1358 REPORTER_ASSERT(reporter, computed.fRight == 789 && computed.fBottom
== 1011); | 1377 REPORTER_ASSERT(reporter, computed.fRight == 789 && computed.fBottom
== 1011); |
| 1359 | 1378 |
| 1360 bool isClosed = (bool) -1; | 1379 bool isClosed = (bool) -1; |
| 1361 SkPath::Direction direction = (SkPath::Direction) -1; | 1380 SkPath::Direction direction = (SkPath::Direction) -1; |
| 1362 REPORTER_ASSERT(reporter, !path.isRect(&isClosed, &direction)); | 1381 REPORTER_ASSERT(reporter, !path.isRect(&isClosed, &direction)); |
| 1363 REPORTER_ASSERT(reporter, isClosed == (bool) -1); | 1382 REPORTER_ASSERT(reporter, isClosed == (bool) -1); |
| 1364 REPORTER_ASSERT(reporter, direction == (SkPath::Direction) -1); | 1383 REPORTER_ASSERT(reporter, direction == (SkPath::Direction) -1); |
| 1365 } | 1384 } |
| 1366 | |
| 1367 if (tests[testIndex] == lastPass) { | |
| 1368 fail = true; | |
| 1369 } | |
| 1370 if (tests[testIndex] == lastClose) { | |
| 1371 close = false; | |
| 1372 } | |
| 1373 } | 1385 } |
| 1374 | 1386 |
| 1375 // fail, close then line | 1387 // fail, close then line |
| 1376 SkPath path1; | 1388 SkPath path1; |
| 1377 path1.moveTo(r1[0].fX, r1[0].fY); | 1389 path1.moveTo(r1[0].fX, r1[0].fY); |
| 1378 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1390 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1379 path1.lineTo(r1[index].fX, r1[index].fY); | 1391 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1380 } | 1392 } |
| 1381 path1.close(); | 1393 path1.close(); |
| 1382 path1.lineTo(1, 0); | 1394 path1.lineTo(1, 0); |
| 1383 REPORTER_ASSERT(reporter, fail ^ path1.isRect(0)); | 1395 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); |
| 1384 | 1396 |
| 1385 // fail, move in the middle | 1397 // fail, move in the middle |
| 1386 path1.reset(); | 1398 path1.reset(); |
| 1387 path1.moveTo(r1[0].fX, r1[0].fY); | 1399 path1.moveTo(r1[0].fX, r1[0].fY); |
| 1388 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1400 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1389 if (index == 2) { | 1401 if (index == 2) { |
| 1390 path1.moveTo(1, .5f); | 1402 path1.moveTo(1, .5f); |
| 1391 } | 1403 } |
| 1392 path1.lineTo(r1[index].fX, r1[index].fY); | 1404 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1393 } | 1405 } |
| 1394 path1.close(); | 1406 path1.close(); |
| 1395 REPORTER_ASSERT(reporter, fail ^ path1.isRect(0)); | 1407 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); |
| 1396 | 1408 |
| 1397 // fail, move on the edge | 1409 // fail, move on the edge |
| 1398 path1.reset(); | 1410 path1.reset(); |
| 1399 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1411 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1400 path1.moveTo(r1[index - 1].fX, r1[index - 1].fY); | 1412 path1.moveTo(r1[index - 1].fX, r1[index - 1].fY); |
| 1401 path1.lineTo(r1[index].fX, r1[index].fY); | 1413 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1402 } | 1414 } |
| 1403 path1.close(); | 1415 path1.close(); |
| 1404 REPORTER_ASSERT(reporter, fail ^ path1.isRect(0)); | 1416 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); |
| 1405 | 1417 |
| 1406 // fail, quad | 1418 // fail, quad |
| 1407 path1.reset(); | 1419 path1.reset(); |
| 1408 path1.moveTo(r1[0].fX, r1[0].fY); | 1420 path1.moveTo(r1[0].fX, r1[0].fY); |
| 1409 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1421 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1410 if (index == 2) { | 1422 if (index == 2) { |
| 1411 path1.quadTo(1, .5f, 1, .5f); | 1423 path1.quadTo(1, .5f, 1, .5f); |
| 1412 } | 1424 } |
| 1413 path1.lineTo(r1[index].fX, r1[index].fY); | 1425 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1414 } | 1426 } |
| 1415 path1.close(); | 1427 path1.close(); |
| 1416 REPORTER_ASSERT(reporter, fail ^ path1.isRect(0)); | 1428 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); |
| 1417 | 1429 |
| 1418 // fail, cubic | 1430 // fail, cubic |
| 1419 path1.reset(); | 1431 path1.reset(); |
| 1420 path1.moveTo(r1[0].fX, r1[0].fY); | 1432 path1.moveTo(r1[0].fX, r1[0].fY); |
| 1421 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1433 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1422 if (index == 2) { | 1434 if (index == 2) { |
| 1423 path1.cubicTo(1, .5f, 1, .5f, 1, .5f); | 1435 path1.cubicTo(1, .5f, 1, .5f, 1, .5f); |
| 1424 } | 1436 } |
| 1425 path1.lineTo(r1[index].fX, r1[index].fY); | 1437 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1426 } | 1438 } |
| 1427 path1.close(); | 1439 path1.close(); |
| 1428 REPORTER_ASSERT(reporter, fail ^ path1.isRect(0)); | 1440 REPORTER_ASSERT(reporter, !path1.isRect(NULL)); |
| 1429 } | 1441 } |
| 1430 | 1442 |
| 1431 static void test_isNestedRects(skiatest::Reporter* reporter) { | 1443 static void test_isNestedRects(skiatest::Reporter* reporter) { |
| 1432 // passing tests (all moveTo / lineTo... | 1444 // passing tests (all moveTo / lineTo... |
| 1433 SkPoint r1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; // CW | 1445 SkPoint r1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; // CW |
| 1434 SkPoint r2[] = {{1, 0}, {1, 1}, {0, 1}, {0, 0}}; | 1446 SkPoint r2[] = {{1, 0}, {1, 1}, {0, 1}, {0, 0}}; |
| 1435 SkPoint r3[] = {{1, 1}, {0, 1}, {0, 0}, {1, 0}}; | 1447 SkPoint r3[] = {{1, 1}, {0, 1}, {0, 0}, {1, 0}}; |
| 1436 SkPoint r4[] = {{0, 1}, {0, 0}, {1, 0}, {1, 1}}; | 1448 SkPoint r4[] = {{0, 1}, {0, 0}, {1, 0}, {1, 1}}; |
| 1437 SkPoint r5[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}}; // CCW | 1449 SkPoint r5[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}}; // CCW |
| 1438 SkPoint r6[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; | 1450 SkPoint r6[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; |
| 1439 SkPoint r7[] = {{1, 1}, {1, 0}, {0, 0}, {0, 1}}; | 1451 SkPoint r7[] = {{1, 1}, {1, 0}, {0, 0}, {0, 1}}; |
| 1440 SkPoint r8[] = {{1, 0}, {0, 0}, {0, 1}, {1, 1}}; | 1452 SkPoint r8[] = {{1, 0}, {0, 0}, {0, 1}, {1, 1}}; |
| 1441 SkPoint r9[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; | 1453 SkPoint r9[] = {{0, 1}, {1, 1}, {1, 0}, {0, 0}}; |
| 1442 SkPoint ra[] = {{0, 0}, {0, .5f}, {0, 1}, {.5f, 1}, {1, 1}, {1, .5f}, // CCW | 1454 SkPoint ra[] = {{0, 0}, {0, .5f}, {0, 1}, {.5f, 1}, {1, 1}, {1, .5f}, {1, 0}
, {.5f, 0}}; // CCW |
| 1443 {1, 0}, {.5f, 0}}; | 1455 SkPoint rb[] = {{0, 0}, {.5f, 0}, {1, 0}, {1, .5f}, {1, 1}, {.5f, 1}, {0, 1}
, {0, .5f}}; // CW |
| 1444 SkPoint rb[] = {{0, 0}, {.5f, 0}, {1, 0}, {1, .5f}, {1, 1}, {.5f, 1}, // CW | |
| 1445 {0, 1}, {0, .5f}}; | |
| 1446 SkPoint rc[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}}; // CW | 1456 SkPoint rc[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}}; // CW |
| 1447 SkPoint rd[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}, {0, 0}}; // CCW | 1457 SkPoint rd[] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}, {0, 0}}; // CCW |
| 1448 SkPoint re[] = {{0, 0}, {1, 0}, {1, 0}, {1, 1}, {0, 1}}; // CW | 1458 SkPoint re[] = {{0, 0}, {1, 0}, {1, 0}, {1, 1}, {0, 1}}; // CW |
| 1449 | 1459 |
| 1450 // failing tests | 1460 // failing tests |
| 1451 SkPoint f1[] = {{0, 0}, {1, 0}, {1, 1}}; // too few points | 1461 SkPoint f1[] = {{0, 0}, {1, 0}, {1, 1}}; // too few points |
| 1452 SkPoint f2[] = {{0, 0}, {1, 1}, {0, 1}, {1, 0}}; // diagonal | 1462 SkPoint f2[] = {{0, 0}, {1, 1}, {0, 1}, {1, 0}}; // diagonal |
| 1453 SkPoint f3[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}, {1, 0}}; // wraps | 1463 SkPoint f3[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}, {1, 0}}; // wraps |
| 1454 SkPoint f4[] = {{0, 0}, {1, 0}, {0, 0}, {1, 0}, {1, 1}, {0, 1}}; // backs up | 1464 SkPoint f4[] = {{0, 0}, {1, 0}, {0, 0}, {1, 0}, {1, 1}, {0, 1}}; // backs up |
| 1455 SkPoint f5[] = {{0, 0}, {1, 0}, {1, 1}, {2, 0}}; // end overshoots | 1465 SkPoint f5[] = {{0, 0}, {1, 0}, {1, 1}, {2, 0}}; // end overshoots |
| 1456 SkPoint f6[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 2}}; // end overshoots | 1466 SkPoint f6[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 2}}; // end overshoots |
| 1457 SkPoint f7[] = {{0, 0}, {1, 0}, {1, 1}, {0, 2}}; // end overshoots | 1467 SkPoint f7[] = {{0, 0}, {1, 0}, {1, 1}, {0, 2}}; // end overshoots |
| 1458 SkPoint f8[] = {{0, 0}, {1, 0}, {1, 1}, {1, 0}}; // 'L' | 1468 SkPoint f8[] = {{0, 0}, {1, 0}, {1, 1}, {1, 0}}; // 'L' |
| 1459 | 1469 |
| 1460 // failing, no close | 1470 // failing, no close |
| 1461 SkPoint c1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; // close doesn't match | 1471 SkPoint c1[] = {{0, 0}, {1, 0}, {1, 1}, {0, 1}}; // close doesn't match |
| 1462 SkPoint c2[] = {{0, 0}, {1, 0}, {1, 2}, {0, 2}, {0, 1}}; // ditto | 1472 SkPoint c2[] = {{0, 0}, {1, 0}, {1, 2}, {0, 2}, {0, 1}}; // ditto |
| 1463 | 1473 |
| 1464 size_t testLen[] = { | 1474 struct IsNestedRectTest { |
| 1465 sizeof(r1), sizeof(r2), sizeof(r3), sizeof(r4), sizeof(r5), sizeof(r6), | 1475 SkPoint *fPoints; |
| 1466 sizeof(r7), sizeof(r8), sizeof(r9), sizeof(ra), sizeof(rb), sizeof(rc), | 1476 size_t fPointCount; |
| 1467 sizeof(rd), sizeof(re), | 1477 SkPath::Direction fDirection; |
| 1468 sizeof(f1), sizeof(f2), sizeof(f3), sizeof(f4), sizeof(f5), sizeof(f6), | 1478 bool fClose; |
| 1469 sizeof(f7), sizeof(f8), | 1479 bool fIsNestedRect; // nests with path.addRect(-1, -1, 2, 2); |
| 1470 sizeof(c1), sizeof(c2) | 1480 } tests[] = { |
| 1481 { r1, SK_ARRAY_COUNT(r1), SkPath::kCW_Direction , true, true }, |
| 1482 { r2, SK_ARRAY_COUNT(r2), SkPath::kCW_Direction , true, true }, |
| 1483 { r3, SK_ARRAY_COUNT(r3), SkPath::kCW_Direction , true, true }, |
| 1484 { r4, SK_ARRAY_COUNT(r4), SkPath::kCW_Direction , true, true }, |
| 1485 { r5, SK_ARRAY_COUNT(r5), SkPath::kCCW_Direction, true, true }, |
| 1486 { r6, SK_ARRAY_COUNT(r6), SkPath::kCCW_Direction, true, true }, |
| 1487 { r7, SK_ARRAY_COUNT(r7), SkPath::kCCW_Direction, true, true }, |
| 1488 { r8, SK_ARRAY_COUNT(r8), SkPath::kCCW_Direction, true, true }, |
| 1489 { r9, SK_ARRAY_COUNT(r9), SkPath::kCCW_Direction, true, true }, |
| 1490 { ra, SK_ARRAY_COUNT(ra), SkPath::kCCW_Direction, true, true }, |
| 1491 { rb, SK_ARRAY_COUNT(rb), SkPath::kCW_Direction, true, true }, |
| 1492 { rc, SK_ARRAY_COUNT(rc), SkPath::kCW_Direction, true, true }, |
| 1493 { rd, SK_ARRAY_COUNT(rd), SkPath::kCCW_Direction, true, true }, |
| 1494 { re, SK_ARRAY_COUNT(re), SkPath::kCW_Direction, true, true }, |
| 1495 |
| 1496 { f1, SK_ARRAY_COUNT(f1), SkPath::kUnknown_Direction, true, false }, |
| 1497 { f2, SK_ARRAY_COUNT(f2), SkPath::kUnknown_Direction, true, false }, |
| 1498 { f3, SK_ARRAY_COUNT(f3), SkPath::kUnknown_Direction, true, false }, |
| 1499 { f4, SK_ARRAY_COUNT(f4), SkPath::kUnknown_Direction, true, false }, |
| 1500 { f5, SK_ARRAY_COUNT(f5), SkPath::kUnknown_Direction, true, false }, |
| 1501 { f6, SK_ARRAY_COUNT(f6), SkPath::kUnknown_Direction, true, false }, |
| 1502 { f7, SK_ARRAY_COUNT(f7), SkPath::kUnknown_Direction, true, false }, |
| 1503 { f8, SK_ARRAY_COUNT(f8), SkPath::kUnknown_Direction, true, false }, |
| 1504 |
| 1505 { c1, SK_ARRAY_COUNT(c1), SkPath::kUnknown_Direction, false, false }, |
| 1506 { c2, SK_ARRAY_COUNT(c2), SkPath::kUnknown_Direction, false, false }, |
| 1471 }; | 1507 }; |
| 1472 SkPoint* tests[] = { | |
| 1473 r1, r2, r3, r4, r5, r6, r7, r8, r9, ra, rb, rc, rd, re, | |
| 1474 f1, f2, f3, f4, f5, f6, f7, f8, | |
| 1475 c1, c2 | |
| 1476 }; | |
| 1477 SkPath::Direction dirs[] = { | |
| 1478 SkPath::kCW_Direction, SkPath::kCW_Direction, SkPath::kCW_Direction, | |
| 1479 SkPath::kCW_Direction, SkPath::kCCW_Direction, SkPath::kCCW_Direction, | |
| 1480 SkPath::kCCW_Direction, SkPath::kCCW_Direction, SkPath::kCCW_Direction, | |
| 1481 SkPath::kCCW_Direction, SkPath::kCW_Direction, SkPath::kCW_Direction, | |
| 1482 SkPath::kCCW_Direction, SkPath::kCW_Direction, SkPath::kUnknown_Directio
n, | |
| 1483 SkPath::kUnknown_Direction, SkPath::kUnknown_Direction, SkPath::kUnknown
_Direction, | |
| 1484 SkPath::kUnknown_Direction, SkPath::kUnknown_Direction, SkPath::kUnknown
_Direction, | |
| 1485 SkPath::kUnknown_Direction, SkPath::kUnknown_Direction, SkPath::kUnknown
_Direction, | |
| 1486 }; | |
| 1487 SkASSERT(SK_ARRAY_COUNT(tests) == SK_ARRAY_COUNT(dirs)); | |
| 1488 | 1508 |
| 1489 const SkPoint* lastPass = re; | 1509 const size_t testCount = SK_ARRAY_COUNT(tests); |
| 1490 const SkPoint* lastClose = f8; | |
| 1491 const size_t testCount = sizeof(tests) / sizeof(tests[0]); | |
| 1492 size_t index; | 1510 size_t index; |
| 1493 for (int rectFirst = 0; rectFirst <= 1; ++rectFirst) { | 1511 for (int rectFirst = 0; rectFirst <= 1; ++rectFirst) { |
| 1494 bool fail = false; | |
| 1495 bool close = true; | |
| 1496 for (size_t testIndex = 0; testIndex < testCount; ++testIndex) { | 1512 for (size_t testIndex = 0; testIndex < testCount; ++testIndex) { |
| 1497 SkPath path; | 1513 SkPath path; |
| 1498 if (rectFirst) { | 1514 if (rectFirst) { |
| 1499 path.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); | 1515 path.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); |
| 1500 } | 1516 } |
| 1501 path.moveTo(tests[testIndex][0].fX, tests[testIndex][0].fY); | 1517 path.moveTo(tests[testIndex].fPoints[0].fX, tests[testIndex].fPoints
[0].fY); |
| 1502 for (index = 1; index < testLen[testIndex] / sizeof(SkPoint); ++inde
x) { | 1518 for (index = 1; index < tests[testIndex].fPointCount; ++index) { |
| 1503 path.lineTo(tests[testIndex][index].fX, tests[testIndex][index].
fY); | 1519 path.lineTo(tests[testIndex].fPoints[index].fX, tests[testIndex]
.fPoints[index].fY); |
| 1504 } | 1520 } |
| 1505 if (close) { | 1521 if (tests[testIndex].fClose) { |
| 1506 path.close(); | 1522 path.close(); |
| 1507 } | 1523 } |
| 1508 if (!rectFirst) { | 1524 if (!rectFirst) { |
| 1509 path.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); | 1525 path.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); |
| 1510 } | 1526 } |
| 1511 REPORTER_ASSERT(reporter, fail ^ path.isNestedRects(0)); | 1527 REPORTER_ASSERT(reporter, tests[testIndex].fIsNestedRect == path.isN
estedRects(NULL)); |
| 1512 if (!fail) { | 1528 if (tests[testIndex].fIsNestedRect) { |
| 1513 SkRect expected[2], computed[2]; | 1529 SkRect expected[2], computed[2]; |
| 1514 SkPath::Direction expectedDirs[2], computedDirs[2]; | 1530 SkPath::Direction expectedDirs[2], computedDirs[2]; |
| 1515 SkRect testBounds; | 1531 SkRect testBounds; |
| 1516 testBounds.set(tests[testIndex], testLen[testIndex] / sizeof(SkP
oint)); | 1532 testBounds.set(tests[testIndex].fPoints, tests[testIndex].fPoint
Count); |
| 1517 expected[0] = SkRect::MakeLTRB(-1, -1, 2, 2); | 1533 expected[0] = SkRect::MakeLTRB(-1, -1, 2, 2); |
| 1518 expected[1] = testBounds; | 1534 expected[1] = testBounds; |
| 1519 if (rectFirst) { | 1535 if (rectFirst) { |
| 1520 expectedDirs[0] = SkPath::kCW_Direction; | 1536 expectedDirs[0] = SkPath::kCW_Direction; |
| 1521 } else { | 1537 } else { |
| 1522 expectedDirs[0] = SkPath::kCCW_Direction; | 1538 expectedDirs[0] = SkPath::kCCW_Direction; |
| 1523 } | 1539 } |
| 1524 expectedDirs[1] = dirs[testIndex]; | 1540 expectedDirs[1] = tests[testIndex].fDirection; |
| 1525 REPORTER_ASSERT(reporter, path.isNestedRects(computed, computedD
irs)); | 1541 REPORTER_ASSERT(reporter, path.isNestedRects(computed, computedD
irs)); |
| 1526 REPORTER_ASSERT(reporter, expected[0] == computed[0]); | 1542 REPORTER_ASSERT(reporter, expected[0] == computed[0]); |
| 1527 REPORTER_ASSERT(reporter, expected[1] == computed[1]); | 1543 REPORTER_ASSERT(reporter, expected[1] == computed[1]); |
| 1528 REPORTER_ASSERT(reporter, expectedDirs[0] == computedDirs[0]); | 1544 REPORTER_ASSERT(reporter, expectedDirs[0] == computedDirs[0]); |
| 1529 REPORTER_ASSERT(reporter, expectedDirs[1] == computedDirs[1]); | 1545 REPORTER_ASSERT(reporter, expectedDirs[1] == computedDirs[1]); |
| 1530 } | 1546 } |
| 1531 if (tests[testIndex] == lastPass) { | |
| 1532 fail = true; | |
| 1533 } | |
| 1534 if (tests[testIndex] == lastClose) { | |
| 1535 close = false; | |
| 1536 } | |
| 1537 } | 1547 } |
| 1538 | 1548 |
| 1539 // fail, close then line | 1549 // fail, close then line |
| 1540 SkPath path1; | 1550 SkPath path1; |
| 1541 if (rectFirst) { | 1551 if (rectFirst) { |
| 1542 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); | 1552 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); |
| 1543 } | 1553 } |
| 1544 path1.moveTo(r1[0].fX, r1[0].fY); | 1554 path1.moveTo(r1[0].fX, r1[0].fY); |
| 1545 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1555 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1546 path1.lineTo(r1[index].fX, r1[index].fY); | 1556 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1547 } | 1557 } |
| 1548 path1.close(); | 1558 path1.close(); |
| 1549 path1.lineTo(1, 0); | 1559 path1.lineTo(1, 0); |
| 1550 if (!rectFirst) { | 1560 if (!rectFirst) { |
| 1551 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); | 1561 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); |
| 1552 } | 1562 } |
| 1553 REPORTER_ASSERT(reporter, fail ^ path1.isNestedRects(0)); | 1563 REPORTER_ASSERT(reporter, !path1.isNestedRects(NULL)); |
| 1554 | 1564 |
| 1555 // fail, move in the middle | 1565 // fail, move in the middle |
| 1556 path1.reset(); | 1566 path1.reset(); |
| 1557 if (rectFirst) { | 1567 if (rectFirst) { |
| 1558 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); | 1568 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); |
| 1559 } | 1569 } |
| 1560 path1.moveTo(r1[0].fX, r1[0].fY); | 1570 path1.moveTo(r1[0].fX, r1[0].fY); |
| 1561 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1571 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1562 if (index == 2) { | 1572 if (index == 2) { |
| 1563 path1.moveTo(1, .5f); | 1573 path1.moveTo(1, .5f); |
| 1564 } | 1574 } |
| 1565 path1.lineTo(r1[index].fX, r1[index].fY); | 1575 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1566 } | 1576 } |
| 1567 path1.close(); | 1577 path1.close(); |
| 1568 if (!rectFirst) { | 1578 if (!rectFirst) { |
| 1569 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); | 1579 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); |
| 1570 } | 1580 } |
| 1571 REPORTER_ASSERT(reporter, fail ^ path1.isNestedRects(0)); | 1581 REPORTER_ASSERT(reporter, !path1.isNestedRects(NULL)); |
| 1572 | 1582 |
| 1573 // fail, move on the edge | 1583 // fail, move on the edge |
| 1574 path1.reset(); | 1584 path1.reset(); |
| 1575 if (rectFirst) { | 1585 if (rectFirst) { |
| 1576 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); | 1586 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); |
| 1577 } | 1587 } |
| 1578 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1588 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1579 path1.moveTo(r1[index - 1].fX, r1[index - 1].fY); | 1589 path1.moveTo(r1[index - 1].fX, r1[index - 1].fY); |
| 1580 path1.lineTo(r1[index].fX, r1[index].fY); | 1590 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1581 } | 1591 } |
| 1582 path1.close(); | 1592 path1.close(); |
| 1583 if (!rectFirst) { | 1593 if (!rectFirst) { |
| 1584 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); | 1594 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); |
| 1585 } | 1595 } |
| 1586 REPORTER_ASSERT(reporter, fail ^ path1.isNestedRects(0)); | 1596 REPORTER_ASSERT(reporter, !path1.isNestedRects(NULL)); |
| 1587 | 1597 |
| 1588 // fail, quad | 1598 // fail, quad |
| 1589 path1.reset(); | 1599 path1.reset(); |
| 1590 if (rectFirst) { | 1600 if (rectFirst) { |
| 1591 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); | 1601 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); |
| 1592 } | 1602 } |
| 1593 path1.moveTo(r1[0].fX, r1[0].fY); | 1603 path1.moveTo(r1[0].fX, r1[0].fY); |
| 1594 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1604 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1595 if (index == 2) { | 1605 if (index == 2) { |
| 1596 path1.quadTo(1, .5f, 1, .5f); | 1606 path1.quadTo(1, .5f, 1, .5f); |
| 1597 } | 1607 } |
| 1598 path1.lineTo(r1[index].fX, r1[index].fY); | 1608 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1599 } | 1609 } |
| 1600 path1.close(); | 1610 path1.close(); |
| 1601 if (!rectFirst) { | 1611 if (!rectFirst) { |
| 1602 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); | 1612 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); |
| 1603 } | 1613 } |
| 1604 REPORTER_ASSERT(reporter, fail ^ path1.isNestedRects(0)); | 1614 REPORTER_ASSERT(reporter, !path1.isNestedRects(NULL)); |
| 1605 | 1615 |
| 1606 // fail, cubic | 1616 // fail, cubic |
| 1607 path1.reset(); | 1617 path1.reset(); |
| 1608 if (rectFirst) { | 1618 if (rectFirst) { |
| 1609 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); | 1619 path1.addRect(-1, -1, 2, 2, SkPath::kCW_Direction); |
| 1610 } | 1620 } |
| 1611 path1.moveTo(r1[0].fX, r1[0].fY); | 1621 path1.moveTo(r1[0].fX, r1[0].fY); |
| 1612 for (index = 1; index < testLen[0] / sizeof(SkPoint); ++index) { | 1622 for (index = 1; index < SK_ARRAY_COUNT(r1); ++index) { |
| 1613 if (index == 2) { | 1623 if (index == 2) { |
| 1614 path1.cubicTo(1, .5f, 1, .5f, 1, .5f); | 1624 path1.cubicTo(1, .5f, 1, .5f, 1, .5f); |
| 1615 } | 1625 } |
| 1616 path1.lineTo(r1[index].fX, r1[index].fY); | 1626 path1.lineTo(r1[index].fX, r1[index].fY); |
| 1617 } | 1627 } |
| 1618 path1.close(); | 1628 path1.close(); |
| 1619 if (!rectFirst) { | 1629 if (!rectFirst) { |
| 1620 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); | 1630 path1.addRect(-1, -1, 2, 2, SkPath::kCCW_Direction); |
| 1621 } | 1631 } |
| 1622 REPORTER_ASSERT(reporter, fail ^ path1.isNestedRects(0)); | 1632 REPORTER_ASSERT(reporter, !path1.isNestedRects(NULL)); |
| 1623 | 1633 |
| 1624 // fail, not nested | 1634 // fail, not nested |
| 1625 path1.reset(); | 1635 path1.reset(); |
| 1626 path1.addRect(1, 1, 3, 3, SkPath::kCW_Direction); | 1636 path1.addRect(1, 1, 3, 3, SkPath::kCW_Direction); |
| 1627 path1.addRect(2, 2, 4, 4, SkPath::kCW_Direction); | 1637 path1.addRect(2, 2, 4, 4, SkPath::kCW_Direction); |
| 1628 REPORTER_ASSERT(reporter, fail ^ path1.isNestedRects(0)); | 1638 REPORTER_ASSERT(reporter, !path1.isNestedRects(NULL)); |
| 1629 } | 1639 } |
| 1630 | 1640 |
| 1631 // pass, stroke rect | 1641 // pass, stroke rect |
| 1632 SkPath src, dst; | 1642 SkPath src, dst; |
| 1633 src.addRect(1, 1, 7, 7, SkPath::kCW_Direction); | 1643 src.addRect(1, 1, 7, 7, SkPath::kCW_Direction); |
| 1634 SkPaint strokePaint; | 1644 SkPaint strokePaint; |
| 1635 strokePaint.setStyle(SkPaint::kStroke_Style); | 1645 strokePaint.setStyle(SkPaint::kStroke_Style); |
| 1636 strokePaint.setStrokeWidth(2); | 1646 strokePaint.setStrokeWidth(2); |
| 1637 strokePaint.getFillPath(src, &dst); | 1647 strokePaint.getFillPath(src, &dst); |
| 1638 REPORTER_ASSERT(reporter, dst.isNestedRects(0)); | 1648 REPORTER_ASSERT(reporter, dst.isNestedRects(NULL)); |
| 1639 } | 1649 } |
| 1640 | 1650 |
| 1641 static void write_and_read_back(skiatest::Reporter* reporter, | 1651 static void write_and_read_back(skiatest::Reporter* reporter, |
| 1642 const SkPath& p) { | 1652 const SkPath& p) { |
| 1643 SkWriter32 writer(100); | 1653 SkWriter32 writer(100); |
| 1644 writer.writePath(p); | 1654 writer.writePath(p); |
| 1645 size_t size = writer.size(); | 1655 size_t size = writer.size(); |
| 1646 SkAutoMalloc storage(size); | 1656 SkAutoMalloc storage(size); |
| 1647 writer.flatten(storage.get()); | 1657 writer.flatten(storage.get()); |
| 1648 SkReader32 reader(storage.get(), size); | 1658 SkReader32 reader(storage.get(), size); |
| (...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2542 test_clipped_cubic(); | 2552 test_clipped_cubic(); |
| 2543 test_crbug_170666(); | 2553 test_crbug_170666(); |
| 2544 test_bad_cubic_crbug229478(); | 2554 test_bad_cubic_crbug229478(); |
| 2545 test_bad_cubic_crbug234190(); | 2555 test_bad_cubic_crbug234190(); |
| 2546 test_android_specific_behavior(reporter); | 2556 test_android_specific_behavior(reporter); |
| 2547 test_path_close_issue1474(reporter); | 2557 test_path_close_issue1474(reporter); |
| 2548 } | 2558 } |
| 2549 | 2559 |
| 2550 #include "TestClassDef.h" | 2560 #include "TestClassDef.h" |
| 2551 DEFINE_TESTCLASS("Path", PathTestClass, TestPath) | 2561 DEFINE_TESTCLASS("Path", PathTestClass, TestPath) |
| OLD | NEW |