| 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 "SkBitmapProcState.h" | 8 #include "SkBitmapProcState.h" |
| 9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
| 10 #include "SkFilterProc.h" | 10 #include "SkFilterProc.h" |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 const SkMipMap* mip = NULL; | 256 const SkMipMap* mip = NULL; |
| 257 | 257 |
| 258 SkASSERT(NULL == fScaledCacheID); | 258 SkASSERT(NULL == fScaledCacheID); |
| 259 fScaledCacheID = SkScaledImageCache::FindAndLockMip(fOrigBitmap, &mip); | 259 fScaledCacheID = SkScaledImageCache::FindAndLockMip(fOrigBitmap, &mip); |
| 260 if (!fScaledCacheID) { | 260 if (!fScaledCacheID) { |
| 261 SkASSERT(NULL == mip); | 261 SkASSERT(NULL == mip); |
| 262 mip = SkMipMap::Build(fOrigBitmap); | 262 mip = SkMipMap::Build(fOrigBitmap); |
| 263 if (mip) { | 263 if (mip) { |
| 264 fScaledCacheID = SkScaledImageCache::AddAndLockMip(fOrigBitmap, | 264 fScaledCacheID = SkScaledImageCache::AddAndLockMip(fOrigBitmap, |
| 265 mip); | 265 mip); |
| 266 SkASSERT(mip->getRefCnt() > 1); |
| 266 mip->unref(); // the cache took a ref | 267 mip->unref(); // the cache took a ref |
| 267 SkASSERT(fScaledCacheID); | 268 SkASSERT(fScaledCacheID); |
| 268 } | 269 } |
| 269 } else { | 270 } else { |
| 270 SkASSERT(mip); | 271 SkASSERT(mip); |
| 271 } | 272 } |
| 272 | 273 |
| 273 if (mip) { | 274 if (mip) { |
| 274 SkScalar levelScale = SkScalarInvert(SkScalarSqrt(scaleSqd)); | 275 SkScalar levelScale = SkScalarInvert(SkScalarSqrt(scaleSqd)); |
| 275 SkMipMap::Level level; | 276 SkMipMap::Level level; |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 return false; | 397 return false; |
| 397 } | 398 } |
| 398 } | 399 } |
| 399 // The above logic should have always assigned fBitmap, but in case it | 400 // The above logic should have always assigned fBitmap, but in case it |
| 400 // didn't, we check for that now... | 401 // didn't, we check for that now... |
| 401 // TODO(dominikg): Ask humper@ if we can just use an SkASSERT(fBitmap)? | 402 // TODO(dominikg): Ask humper@ if we can just use an SkASSERT(fBitmap)? |
| 402 if (NULL == fBitmap) { | 403 if (NULL == fBitmap) { |
| 403 return false; | 404 return false; |
| 404 } | 405 } |
| 405 | 406 |
| 407 // If we are "still" kMedium_FilterLevel, then the request was not fulfilled
by possiblyScale, |
| 408 // so we downgrade to kLow (so the rest of the sniffing code can assume that
) |
| 409 if (SkPaint::kMedium_FilterLevel == fFilterLevel) { |
| 410 fFilterLevel = SkPaint::kLow_FilterLevel; |
| 411 } |
| 412 |
| 406 bool trivialMatrix = (fInvMatrix.getType() & ~SkMatrix::kTranslate_Mask) ==
0; | 413 bool trivialMatrix = (fInvMatrix.getType() & ~SkMatrix::kTranslate_Mask) ==
0; |
| 407 bool clampClamp = SkShader::kClamp_TileMode == fTileModeX && | 414 bool clampClamp = SkShader::kClamp_TileMode == fTileModeX && |
| 408 SkShader::kClamp_TileMode == fTileModeY; | 415 SkShader::kClamp_TileMode == fTileModeY; |
| 409 | 416 |
| 410 if (!(clampClamp || trivialMatrix)) { | 417 if (!(clampClamp || trivialMatrix)) { |
| 411 fInvMatrix.postIDiv(fOrigBitmap.width(), fOrigBitmap.height()); | 418 fInvMatrix.postIDiv(fOrigBitmap.width(), fOrigBitmap.height()); |
| 412 } | 419 } |
| 413 | 420 |
| 414 // Now that all possible changes to the matrix have taken place, check | 421 // Now that all possible changes to the matrix have taken place, check |
| 415 // to see if we're really close to a no-scale matrix. If so, explicitly | 422 // to see if we're really close to a no-scale matrix. If so, explicitly |
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1036 } else { | 1043 } else { |
| 1037 size >>= 2; | 1044 size >>= 2; |
| 1038 } | 1045 } |
| 1039 | 1046 |
| 1040 if (fFilterLevel != SkPaint::kNone_FilterLevel) { | 1047 if (fFilterLevel != SkPaint::kNone_FilterLevel) { |
| 1041 size >>= 1; | 1048 size >>= 1; |
| 1042 } | 1049 } |
| 1043 | 1050 |
| 1044 return size; | 1051 return size; |
| 1045 } | 1052 } |
| OLD | NEW |