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 "SkMath.h" | 8 #include "SkMath.h" |
9 #include "SkMatrix.h" | 9 #include "SkMatrix.h" |
10 #include "SkMatrixUtils.h" | 10 #include "SkMatrixUtils.h" |
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 for (int j = 0; j < kTripleCount; ++j) { | 764 for (int j = 0; j < kTripleCount; ++j) { |
765 SkScalar dst[3]; | 765 SkScalar dst[3]; |
766 mats[i].mapHomogeneousPoints(dst, &randTriples[j*3], 1); | 766 mats[i].mapHomogeneousPoints(dst, &randTriples[j*3], 1); |
767 REPORTER_ASSERT(reporter, naive_homogeneous_mapping(mats[i], &randTr
iples[j*3], dst)); | 767 REPORTER_ASSERT(reporter, naive_homogeneous_mapping(mats[i], &randTr
iples[j*3], dst)); |
768 } | 768 } |
769 } | 769 } |
770 } | 770 } |
771 | 771 |
772 } | 772 } |
773 | 773 |
774 static bool check_decompScale(const SkMatrix& matrix) { | |
775 SkSize scale; | |
776 SkMatrix remaining; | |
777 | |
778 if (!matrix.decomposeScale(&scale, &remaining)) { | |
779 return false; | |
780 } | |
781 if (scale.width() <= 0 || scale.height() <= 0) { | |
782 return false; | |
783 } | |
784 remaining.preScale(scale.width(), scale.height()); | |
785 return nearly_equal(matrix, remaining); | |
786 } | |
787 | |
788 static void test_decompScale(skiatest::Reporter* reporter) { | |
789 SkMatrix m; | |
790 | |
791 m.reset(); | |
792 REPORTER_ASSERT(reporter, check_decompScale(m)); | |
793 m.setScale(2, 3); | |
794 REPORTER_ASSERT(reporter, check_decompScale(m)); | |
795 m.setRotate(35, 0, 0); | |
796 REPORTER_ASSERT(reporter, check_decompScale(m)); | |
797 | |
798 m.setScale(1, 0); | |
799 REPORTER_ASSERT(reporter, !check_decompScale(m)); | |
800 } | |
801 | |
802 DEF_TEST(Matrix, reporter) { | 774 DEF_TEST(Matrix, reporter) { |
803 SkMatrix mat, inverse, iden1, iden2; | 775 SkMatrix mat, inverse, iden1, iden2; |
804 | 776 |
805 mat.reset(); | 777 mat.reset(); |
806 mat.setTranslate(SK_Scalar1, SK_Scalar1); | 778 mat.setTranslate(SK_Scalar1, SK_Scalar1); |
807 REPORTER_ASSERT(reporter, mat.invert(&inverse)); | 779 REPORTER_ASSERT(reporter, mat.invert(&inverse)); |
808 iden1.setConcat(mat, inverse); | 780 iden1.setConcat(mat, inverse); |
809 REPORTER_ASSERT(reporter, is_identity(iden1)); | 781 REPORTER_ASSERT(reporter, is_identity(iden1)); |
810 | 782 |
811 mat.setScale(SkIntToScalar(2), SkIntToScalar(4)); | 783 mat.setScale(SkIntToScalar(2), SkIntToScalar(4)); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
910 mat.set(SkMatrix::kMSkewX, SK_ScalarNaN); | 882 mat.set(SkMatrix::kMSkewX, SK_ScalarNaN); |
911 mat2.set(SkMatrix::kMSkewX, SK_ScalarNaN); | 883 mat2.set(SkMatrix::kMSkewX, SK_ScalarNaN); |
912 REPORTER_ASSERT(reporter, !are_equal(reporter, mat, mat2)); | 884 REPORTER_ASSERT(reporter, !are_equal(reporter, mat, mat2)); |
913 | 885 |
914 test_matrix_min_max_scale(reporter); | 886 test_matrix_min_max_scale(reporter); |
915 test_matrix_preserve_shape(reporter); | 887 test_matrix_preserve_shape(reporter); |
916 test_matrix_recttorect(reporter); | 888 test_matrix_recttorect(reporter); |
917 test_matrix_decomposition(reporter); | 889 test_matrix_decomposition(reporter); |
918 test_matrix_homogeneous(reporter); | 890 test_matrix_homogeneous(reporter); |
919 test_set9(reporter); | 891 test_set9(reporter); |
920 | |
921 test_decompScale(reporter); | |
922 } | 892 } |
923 | 893 |
924 DEF_TEST(Matrix_Concat, r) { | 894 DEF_TEST(Matrix_Concat, r) { |
925 SkMatrix a; | 895 SkMatrix a; |
926 a.setTranslate(10, 20); | 896 a.setTranslate(10, 20); |
927 | 897 |
928 SkMatrix b; | 898 SkMatrix b; |
929 b.setScale(3, 5); | 899 b.setScale(3, 5); |
930 | 900 |
931 SkMatrix expected; | 901 SkMatrix expected; |
932 expected.setConcat(a,b); | 902 expected.setConcat(a,b); |
933 | 903 |
934 REPORTER_ASSERT(r, expected == SkMatrix::Concat(a, b)); | 904 REPORTER_ASSERT(r, expected == SkMatrix::Concat(a, b)); |
935 } | 905 } |
OLD | NEW |