OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "Test.h" | 8 #include "Test.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkPaint.h" | 10 #include "SkPaint.h" |
(...skipping 815 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
826 | 826 |
827 path.reset(); | 827 path.reset(); |
828 path.addCircle(0, 0, SkIntToScalar(1), SkPath::kCW_Direction); | 828 path.addCircle(0, 0, SkIntToScalar(1), SkPath::kCW_Direction); |
829 path.addCircle(0, 0, SkIntToScalar(2), SkPath::kCCW_Direction); | 829 path.addCircle(0, 0, SkIntToScalar(2), SkPath::kCCW_Direction); |
830 check_direction(reporter, path, SkPath::kCCW_Direction); | 830 check_direction(reporter, path, SkPath::kCCW_Direction); |
831 | 831 |
832 #ifdef SK_SCALAR_IS_FLOAT | 832 #ifdef SK_SCALAR_IS_FLOAT |
833 // triangle with one point really far from the origin. | 833 // triangle with one point really far from the origin. |
834 path.reset(); | 834 path.reset(); |
835 // the first point is roughly 1.05e10, 1.05e10 | 835 // the first point is roughly 1.05e10, 1.05e10 |
836 path.moveTo(SkFloatToScalar(SkBits2Float(0x501c7652)), SkFloatToScalar(SkBit
s2Float(0x501c7652))); | 836 path.moveTo(SkBits2Float(0x501c7652), SkBits2Float(0x501c7652)); |
837 path.lineTo(110 * SK_Scalar1, -10 * SK_Scalar1); | 837 path.lineTo(110 * SK_Scalar1, -10 * SK_Scalar1); |
838 path.lineTo(-10 * SK_Scalar1, 60 * SK_Scalar1); | 838 path.lineTo(-10 * SK_Scalar1, 60 * SK_Scalar1); |
839 check_direction(reporter, path, SkPath::kCCW_Direction); | 839 check_direction(reporter, path, SkPath::kCCW_Direction); |
840 #endif | 840 #endif |
841 | 841 |
842 path.reset(); | 842 path.reset(); |
843 path.conicTo(20, 0, 20, 20, 0.5f); | 843 path.conicTo(20, 0, 20, 20, 0.5f); |
844 path.close(); | 844 path.close(); |
845 check_direction(reporter, path, SkPath::kCW_Direction); | 845 check_direction(reporter, path, SkPath::kCW_Direction); |
846 | 846 |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1267 static const struct SUPPRESS_VISIBILITY_WARNING { | 1267 static const struct SUPPRESS_VISIBILITY_WARNING { |
1268 SkRect fQueryRect; | 1268 SkRect fQueryRect; |
1269 bool fInRect; | 1269 bool fInRect; |
1270 bool fInCircle; | 1270 bool fInCircle; |
1271 bool fInRR; | 1271 bool fInRR; |
1272 bool fInCubicRR; | 1272 bool fInCubicRR; |
1273 } kQueries[] = { | 1273 } kQueries[] = { |
1274 {kBaseRect, true, true, false, false}, | 1274 {kBaseRect, true, true, false, false}, |
1275 | 1275 |
1276 // rect well inside of kBaseRect | 1276 // rect well inside of kBaseRect |
1277 {SkRect::MakeLTRB(kBaseRect.fLeft + SkFloatToScalar(0.25f)*kBaseRect.wid
th(), | 1277 {SkRect::MakeLTRB(kBaseRect.fLeft + 0.25f*kBaseRect.width(), |
1278 kBaseRect.fTop + SkFloatToScalar(0.25f)*kBaseRect.heig
ht(), | 1278 kBaseRect.fTop + 0.25f*kBaseRect.height(), |
1279 kBaseRect.fRight - SkFloatToScalar(0.25f)*kBaseRect.wi
dth(), | 1279 kBaseRect.fRight - 0.25f*kBaseRect.width(), |
1280 kBaseRect.fBottom - SkFloatToScalar(0.25f)*kBaseRect.h
eight()), | 1280 kBaseRect.fBottom - 0.25f*kBaseRect.height()), |
1281 true, true, true, true}, | 1281 true, true, true, true}, |
1282 | 1282 |
1283 // rects with edges off by one from kBaseRect's edges | 1283 // rects with edges off by one from kBaseRect's edges |
1284 {SkRect::MakeXYWH(kBaseRect.fLeft, kBaseRect.fTop, | 1284 {SkRect::MakeXYWH(kBaseRect.fLeft, kBaseRect.fTop, |
1285 kBaseRect.width(), kBaseRect.height() + 1), | 1285 kBaseRect.width(), kBaseRect.height() + 1), |
1286 false, true, false, false}, | 1286 false, true, false, false}, |
1287 {SkRect::MakeXYWH(kBaseRect.fLeft, kBaseRect.fTop, | 1287 {SkRect::MakeXYWH(kBaseRect.fLeft, kBaseRect.fTop, |
1288 kBaseRect.width() + 1, kBaseRect.height()), | 1288 kBaseRect.width() + 1, kBaseRect.height()), |
1289 false, true, false, false}, | 1289 false, true, false, false}, |
1290 {SkRect::MakeXYWH(kBaseRect.fLeft, kBaseRect.fTop, | 1290 {SkRect::MakeXYWH(kBaseRect.fLeft, kBaseRect.fTop, |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1375 path.lineTo(kBaseRect.fRight, kBaseRect.fBottom); | 1375 path.lineTo(kBaseRect.fRight, kBaseRect.fBottom); |
1376 path.lineTo(kBaseRect.fRight, kBaseRect.fTop); | 1376 path.lineTo(kBaseRect.fRight, kBaseRect.fTop); |
1377 path.close(); | 1377 path.close(); |
1378 REPORTER_ASSERT(reporter, kQueries[q].fInCubicRR == | 1378 REPORTER_ASSERT(reporter, kQueries[q].fInCubicRR == |
1379 path.conservativelyContainsRect(qRect)
); | 1379 path.conservativelyContainsRect(qRect)
); |
1380 | 1380 |
1381 } | 1381 } |
1382 // Slightly non-convex shape, shouldn't contain any rects. | 1382 // Slightly non-convex shape, shouldn't contain any rects. |
1383 path.reset(); | 1383 path.reset(); |
1384 path.moveTo(0, 0); | 1384 path.moveTo(0, 0); |
1385 path.lineTo(SkIntToScalar(50), SkFloatToScalar(0.05f)); | 1385 path.lineTo(SkIntToScalar(50), 0.05f); |
1386 path.lineTo(SkIntToScalar(100), 0); | 1386 path.lineTo(SkIntToScalar(100), 0); |
1387 path.lineTo(SkIntToScalar(100), SkIntToScalar(100)); | 1387 path.lineTo(SkIntToScalar(100), SkIntToScalar(100)); |
1388 path.lineTo(0, SkIntToScalar(100)); | 1388 path.lineTo(0, SkIntToScalar(100)); |
1389 path.close(); | 1389 path.close(); |
1390 REPORTER_ASSERT(reporter, !path.conservativelyContainsRect(qRect)); | 1390 REPORTER_ASSERT(reporter, !path.conservativelyContainsRect(qRect)); |
1391 } | 1391 } |
1392 } | 1392 } |
1393 | 1393 |
1394 // make sure a minimal convex shape works, a right tri with edges along pos
x and y axes. | 1394 // make sure a minimal convex shape works, a right tri with edges along pos
x and y axes. |
1395 path.reset(); | 1395 path.reset(); |
(...skipping 1559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2955 SkRect oval = {1, 2, 3, 4}; | 2955 SkRect oval = {1, 2, 3, 4}; |
2956 p.arcTo(oval, 0, 0, true); | 2956 p.arcTo(oval, 0, 0, true); |
2957 check_path_is_move_and_reset(reporter, &p, oval.fRight, oval.centerY()); | 2957 check_path_is_move_and_reset(reporter, &p, oval.fRight, oval.centerY()); |
2958 p.arcTo(oval, 0, 0, false); | 2958 p.arcTo(oval, 0, 0, false); |
2959 check_path_is_move_and_reset(reporter, &p, oval.fRight, oval.centerY()); | 2959 check_path_is_move_and_reset(reporter, &p, oval.fRight, oval.centerY()); |
2960 p.arcTo(oval, 360, 0, true); | 2960 p.arcTo(oval, 360, 0, true); |
2961 check_path_is_move_and_reset(reporter, &p, oval.fRight, oval.centerY()); | 2961 check_path_is_move_and_reset(reporter, &p, oval.fRight, oval.centerY()); |
2962 p.arcTo(oval, 360, 0, false); | 2962 p.arcTo(oval, 360, 0, false); |
2963 check_path_is_move_and_reset(reporter, &p, oval.fRight, oval.centerY()); | 2963 check_path_is_move_and_reset(reporter, &p, oval.fRight, oval.centerY()); |
2964 for (float sweep = 359, delta = 0.5f; sweep != (float) (sweep + delta); ) { | 2964 for (float sweep = 359, delta = 0.5f; sweep != (float) (sweep + delta); ) { |
2965 p.arcTo(oval, 0, SkFloatToScalar(sweep), false); | 2965 p.arcTo(oval, 0, sweep, false); |
2966 REPORTER_ASSERT(reporter, p.getBounds() == oval); | 2966 REPORTER_ASSERT(reporter, p.getBounds() == oval); |
2967 sweep += delta; | 2967 sweep += delta; |
2968 delta /= 2; | 2968 delta /= 2; |
2969 } | 2969 } |
2970 for (float sweep = 361, delta = 0.5f; sweep != (float) (sweep - delta);) { | 2970 for (float sweep = 361, delta = 0.5f; sweep != (float) (sweep - delta);) { |
2971 p.arcTo(oval, 0, SkFloatToScalar(sweep), false); | 2971 p.arcTo(oval, 0, sweep, false); |
2972 REPORTER_ASSERT(reporter, p.getBounds() == oval); | 2972 REPORTER_ASSERT(reporter, p.getBounds() == oval); |
2973 sweep -= delta; | 2973 sweep -= delta; |
2974 delta /= 2; | 2974 delta /= 2; |
2975 } | 2975 } |
2976 SkRect noOvalWidth = {1, 2, 0, 3}; | 2976 SkRect noOvalWidth = {1, 2, 0, 3}; |
2977 p.reset(); | 2977 p.reset(); |
2978 p.arcTo(noOvalWidth, 0, 360, false); | 2978 p.arcTo(noOvalWidth, 0, 360, false); |
2979 REPORTER_ASSERT(reporter, p.isEmpty()); | 2979 REPORTER_ASSERT(reporter, p.isEmpty()); |
2980 | 2980 |
2981 SkRect noOvalHeight = {1, 2, 3, 1}; | 2981 SkRect noOvalHeight = {1, 2, 3, 1}; |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3251 test_arcTo(reporter); | 3251 test_arcTo(reporter); |
3252 test_addPath(reporter); | 3252 test_addPath(reporter); |
3253 test_conicTo_special_case(reporter); | 3253 test_conicTo_special_case(reporter); |
3254 test_get_point(reporter); | 3254 test_get_point(reporter); |
3255 test_contains(reporter); | 3255 test_contains(reporter); |
3256 PathTest_Private::TestPathTo(reporter); | 3256 PathTest_Private::TestPathTo(reporter); |
3257 } | 3257 } |
3258 | 3258 |
3259 #include "TestClassDef.h" | 3259 #include "TestClassDef.h" |
3260 DEFINE_TESTCLASS("Path", PathTestClass, TestPath) | 3260 DEFINE_TESTCLASS("Path", PathTestClass, TestPath) |
OLD | NEW |