| 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 |