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 "SkMatrix.h" | 8 #include "SkMatrix.h" |
9 | 9 |
10 // FIXME: needs to be in a header | 10 // FIXME: needs to be in a header |
11 bool SkSetPoly3To3_A(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3
]); | 11 bool SkSetPoly3To3_A(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3
]); |
12 | 12 |
13 #ifdef SK_SCALAR_IS_FIXED | 13 typedef double SkDScalar; |
14 typedef int64_t SkDScalar; | |
15 | 14 |
16 static SkScalar SkDScalar_toScalar(SkDScalar value) { | 15 static SkScalar SkDScalar_toScalar(SkDScalar value) { |
17 SkDScalar result = (value + (1 << 15)) >> 16; | 16 return static_cast<float>(value); |
18 int top = result >> 31; | 17 } |
19 SkASSERT(top == 0 || top == -1); | 18 static SkScalar divide(SkDScalar numer, SkDScalar denom) { |
20 return (SkScalar)result; | 19 return static_cast<float>(numer / denom); |
21 } | 20 } |
22 static SkScalar divide(SkDScalar numer, SkDScalar denom) { | |
23 denom >>= 16; | |
24 return numer / denom; | |
25 } | |
26 #else | |
27 typedef double SkDScalar; | |
28 | |
29 static SkScalar SkDScalar_toScalar(SkDScalar value) { | |
30 return static_cast<float>(value); | |
31 } | |
32 static SkScalar divide(SkDScalar numer, SkDScalar denom) { | |
33 return static_cast<float>(numer / denom); | |
34 } | |
35 #endif | |
36 | 21 |
37 static SkDScalar SkDScalar_setMul(SkScalar a, SkScalar b) { | 22 static SkDScalar SkDScalar_setMul(SkScalar a, SkScalar b) { |
38 return (SkDScalar) ((SkDScalar) a * b); | 23 return (SkDScalar) ((SkDScalar) a * b); |
39 } | 24 } |
40 | 25 |
41 static void computeOuterProduct(SkScalar op[4], | 26 static void computeOuterProduct(SkScalar op[4], |
42 const SkPoint pts0[3], const SkPoint& ave0, | 27 const SkPoint pts0[3], const SkPoint& ave0, |
43 const SkPoint pts1[3], const SkPoint& ave1) { | 28 const SkPoint pts1[3], const SkPoint& ave1) { |
44 sk_bzero(op, 4 * sizeof(op[0])); | 29 sk_bzero(op, 4 * sizeof(op[0])); |
45 for (int i = 0; i < 3; i++) { | 30 for (int i = 0; i < 3; i++) { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 matrix->setScaleX(divide(M[0], det)); | 75 matrix->setScaleX(divide(M[0], det)); |
91 matrix->setSkewX( divide(M[1], det)); | 76 matrix->setSkewX( divide(M[1], det)); |
92 matrix->setSkewY (divide(M[2], det)); | 77 matrix->setSkewY (divide(M[2], det)); |
93 matrix->setScaleY(divide(M[3], det)); | 78 matrix->setScaleY(divide(M[3], det)); |
94 matrix->setTranslateX(dstAve.fX - dot(srcAve.fX, srcAve.fY, | 79 matrix->setTranslateX(dstAve.fX - dot(srcAve.fX, srcAve.fY, |
95 matrix->getScaleX(), matrix->getSkewX())); | 80 matrix->getScaleX(), matrix->getSkewX())); |
96 matrix->setTranslateY(dstAve.fY - dot(srcAve.fX, srcAve.fY, | 81 matrix->setTranslateY(dstAve.fY - dot(srcAve.fX, srcAve.fY, |
97 matrix->getSkewY(), matrix->getScaleY())); | 82 matrix->getSkewY(), matrix->getScaleY())); |
98 return true; | 83 return true; |
99 } | 84 } |
OLD | NEW |