OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
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 "SkMatrix.h" | 8 #include "SkMatrix.h" |
9 #include "Sk64.h" | 9 #include "Sk64.h" |
10 #include "SkFloatBits.h" | 10 #include "SkFloatBits.h" |
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1211 SkMatrix::Rot_pts, SkMatrix::RotTrans_pts, | 1211 SkMatrix::Rot_pts, SkMatrix::RotTrans_pts, |
1212 SkMatrix::Rot_pts, SkMatrix::RotTrans_pts, | 1212 SkMatrix::Rot_pts, SkMatrix::RotTrans_pts, |
1213 // repeat the persp proc 8 times | 1213 // repeat the persp proc 8 times |
1214 SkMatrix::Persp_pts, SkMatrix::Persp_pts, | 1214 SkMatrix::Persp_pts, SkMatrix::Persp_pts, |
1215 SkMatrix::Persp_pts, SkMatrix::Persp_pts, | 1215 SkMatrix::Persp_pts, SkMatrix::Persp_pts, |
1216 SkMatrix::Persp_pts, SkMatrix::Persp_pts, | 1216 SkMatrix::Persp_pts, SkMatrix::Persp_pts, |
1217 SkMatrix::Persp_pts, SkMatrix::Persp_pts | 1217 SkMatrix::Persp_pts, SkMatrix::Persp_pts |
1218 }; | 1218 }; |
1219 | 1219 |
1220 void SkMatrix::mapPoints(SkPoint dst[], const SkPoint src[], int count) const { | 1220 void SkMatrix::mapPoints(SkPoint dst[], const SkPoint src[], int count) const { |
1221 SkASSERT((dst && src && count > 0) || count == 0); | 1221 SkASSERT((dst && src && count > 0) || 0 == count); |
1222 // no partial overlap | 1222 // no partial overlap |
1223 SkASSERT(src == dst || SkAbs32((int32_t)(src - dst)) >= count); | 1223 SkASSERT(src == dst || SkAbs32((int32_t)(src - dst)) >= count); |
1224 | 1224 |
1225 this->getMapPtsProc()(*this, dst, src, count); | 1225 this->getMapPtsProc()(*this, dst, src, count); |
1226 } | 1226 } |
1227 | 1227 |
1228 /////////////////////////////////////////////////////////////////////////////// | 1228 /////////////////////////////////////////////////////////////////////////////// |
1229 | 1229 |
| 1230 void SkMatrix::mapHomogeneousPoints(SkScalar dst[], const SkScalar src[], int co
unt) const { |
| 1231 SkASSERT((dst && src && count > 0) || 0 == count); |
| 1232 // no partial overlap |
| 1233 SkASSERT(src == dst || SkAbs32((int32_t)(src - dst)) >= 3*count); |
| 1234 |
| 1235 if (count > 0) { |
| 1236 if (this->isIdentity()) { |
| 1237 memcpy(dst, src, 3*count*sizeof(SkScalar)); |
| 1238 return; |
| 1239 } |
| 1240 do { |
| 1241 SkScalar sx = src[0]; |
| 1242 SkScalar sy = src[1]; |
| 1243 SkScalar sw = src[2]; |
| 1244 src += 3; |
| 1245 |
| 1246 SkScalar x = SkScalarMul(sx, fMat[kMScaleX]) + |
| 1247 SkScalarMul(sy, fMat[kMSkewX]) + |
| 1248 SkScalarMul(sw, fMat[kMTransX]); |
| 1249 SkScalar y = SkScalarMul(sx, fMat[kMSkewY]) + |
| 1250 SkScalarMul(sy, fMat[kMScaleY]) + |
| 1251 SkScalarMul(sw, fMat[kMTransY]); |
| 1252 SkScalar w = SkScalarMul(sx, fMat[kMPersp0]) + |
| 1253 SkScalarMul(sy, fMat[kMPersp1]) + |
| 1254 SkScalarMul(sw, fMat[kMPersp2]); |
| 1255 |
| 1256 dst[0] = x; |
| 1257 dst[1] = y; |
| 1258 dst[2] = w; |
| 1259 dst += 3; |
| 1260 } while (--count); |
| 1261 } |
| 1262 } |
| 1263 |
| 1264 /////////////////////////////////////////////////////////////////////////////// |
| 1265 |
1230 void SkMatrix::mapVectors(SkPoint dst[], const SkPoint src[], int count) const { | 1266 void SkMatrix::mapVectors(SkPoint dst[], const SkPoint src[], int count) const { |
1231 if (this->hasPerspective()) { | 1267 if (this->hasPerspective()) { |
1232 SkPoint origin; | 1268 SkPoint origin; |
1233 | 1269 |
1234 MapXYProc proc = this->getMapXYProc(); | 1270 MapXYProc proc = this->getMapXYProc(); |
1235 proc(*this, 0, 0, &origin); | 1271 proc(*this, 0, 0, &origin); |
1236 | 1272 |
1237 for (int i = count - 1; i >= 0; --i) { | 1273 for (int i = count - 1; i >= 0; --i) { |
1238 SkPoint tmp; | 1274 SkPoint tmp; |
1239 | 1275 |
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2048 } | 2084 } |
2049 if (NULL != rotation0) { | 2085 if (NULL != rotation0) { |
2050 *rotation0 = r0; | 2086 *rotation0 = r0; |
2051 } | 2087 } |
2052 if (NULL != rotation1) { | 2088 if (NULL != rotation1) { |
2053 *rotation1 = r1; | 2089 *rotation1 = r1; |
2054 } | 2090 } |
2055 | 2091 |
2056 return true; | 2092 return true; |
2057 } | 2093 } |
OLD | NEW |