| 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 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 SkASSERT(NULL == fScaledCacheID); | 150 SkASSERT(NULL == fScaledCacheID); |
| 151 fScaledCacheID = SkScaledImageCache::FindAndLock(fOrigBitmap, | 151 fScaledCacheID = SkScaledImageCache::FindAndLock(fOrigBitmap, |
| 152 invScaleX, invScaleY, | 152 invScaleX, invScaleY, |
| 153 &fScaledBitmap); | 153 &fScaledBitmap); |
| 154 if (NULL == fScaledCacheID) { | 154 if (NULL == fScaledCacheID) { |
| 155 int dest_width = SkScalarCeilToInt(fOrigBitmap.width() / invScaleX)
; | 155 int dest_width = SkScalarCeilToInt(fOrigBitmap.width() / invScaleX)
; |
| 156 int dest_height = SkScalarCeilToInt(fOrigBitmap.height() / invScaleY
); | 156 int dest_height = SkScalarCeilToInt(fOrigBitmap.height() / invScaleY
); |
| 157 | 157 |
| 158 // All the criteria are met; let's make a new bitmap. | 158 // All the criteria are met; let's make a new bitmap. |
| 159 | 159 |
| 160 fScaledBitmap = SkBitmapScaler::Resize(fOrigBitmap, | 160 if (!SkBitmapScaler::Resize(&fScaledBitmap, |
| 161 SkBitmapScaler::RESIZE_BEST, | 161 fOrigBitmap, |
| 162 dest_width, | 162 SkBitmapScaler::RESIZE_BEST, |
| 163 dest_height, | 163 dest_width, |
| 164 fConvolutionProcs); | 164 dest_height, |
| 165 fConvolutionProcs)) { |
| 166 // we failed to create fScaledBitmap, so just return and let |
| 167 // the scanline proc handle it. |
| 168 return; |
| 169 |
| 170 } |
| 165 fScaledCacheID = SkScaledImageCache::AddAndLock(fOrigBitmap, | 171 fScaledCacheID = SkScaledImageCache::AddAndLock(fOrigBitmap, |
| 166 invScaleX, | 172 invScaleX, |
| 167 invScaleY, | 173 invScaleY, |
| 168 fScaledBitmap); | 174 fScaledBitmap); |
| 169 } | 175 } |
| 170 fScaledBitmap.lockPixels(); | 176 fScaledBitmap.lockPixels(); |
| 171 | 177 |
| 172 fBitmap = &fScaledBitmap; | 178 fBitmap = &fScaledBitmap; |
| 173 | 179 |
| 174 // set the inv matrix type to translate-only; | 180 // set the inv matrix type to translate-only; |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 SkDELETE(fBitmapFilter); | 276 SkDELETE(fBitmapFilter); |
| 271 fBitmapFilter = NULL; | 277 fBitmapFilter = NULL; |
| 272 fScaledBitmap.reset(); | 278 fScaledBitmap.reset(); |
| 273 | 279 |
| 274 if (fScaledCacheID) { | 280 if (fScaledCacheID) { |
| 275 SkScaledImageCache::Unlock(fScaledCacheID); | 281 SkScaledImageCache::Unlock(fScaledCacheID); |
| 276 fScaledCacheID = NULL; | 282 fScaledCacheID = NULL; |
| 277 } | 283 } |
| 278 } | 284 } |
| 279 | 285 |
| 286 SkBitmapProcState::~SkBitmapProcState() { |
| 287 if (fScaledCacheID) { |
| 288 SkScaledImageCache::Unlock(fScaledCacheID); |
| 289 } |
| 290 SkDELETE(fBitmapFilter); |
| 291 } |
| 292 |
| 280 bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) { | 293 bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) { |
| 281 if (fOrigBitmap.width() == 0 || fOrigBitmap.height() == 0) { | 294 if (fOrigBitmap.width() == 0 || fOrigBitmap.height() == 0) { |
| 282 return false; | 295 return false; |
| 283 } | 296 } |
| 284 | 297 |
| 285 bool trivialMatrix = (inv.getType() & ~SkMatrix::kTranslate_Mask) == 0; | 298 bool trivialMatrix = (inv.getType() & ~SkMatrix::kTranslate_Mask) == 0; |
| 286 bool clampClamp = SkShader::kClamp_TileMode == fTileModeX && | 299 bool clampClamp = SkShader::kClamp_TileMode == fTileModeX && |
| 287 SkShader::kClamp_TileMode == fTileModeY; | 300 SkShader::kClamp_TileMode == fTileModeY; |
| 288 | 301 |
| 289 fInvMatrix = inv; | 302 fInvMatrix = inv; |
| (...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 } else { | 949 } else { |
| 937 size >>= 2; | 950 size >>= 2; |
| 938 } | 951 } |
| 939 | 952 |
| 940 if (fFilterLevel != SkPaint::kNone_FilterLevel) { | 953 if (fFilterLevel != SkPaint::kNone_FilterLevel) { |
| 941 size >>= 1; | 954 size >>= 1; |
| 942 } | 955 } |
| 943 | 956 |
| 944 return size; | 957 return size; |
| 945 } | 958 } |
| OLD | NEW |