Chromium Code Reviews| 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 1209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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) || count == 0); | 
| 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) || count == 0); | |
| 
 
bsalomon
2013/08/09 13:53:25
0 == count. (I know the mapPoints() assert is like
 
egdaniel
2013/08/09 13:58:24
Should I go back and change mapPoints as well then
 
bsalomon
2013/08/09 14:04:59
sure
 
 | |
| 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 |