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 #define __STDC_LIMIT_MACROS | 7 #define __STDC_LIMIT_MACROS |
8 | 8 |
9 #include "SkDraw.h" | 9 #include "SkDraw.h" |
10 #include "SkBlitter.h" | 10 #include "SkBlitter.h" |
(...skipping 1134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1145 } | 1145 } |
1146 | 1146 |
1147 void SkDraw::drawBitmapAsMask(const SkBitmap& bitmap, | 1147 void SkDraw::drawBitmapAsMask(const SkBitmap& bitmap, |
1148 const SkPaint& paint) const { | 1148 const SkPaint& paint) const { |
1149 SkASSERT(bitmap.colorType() == kAlpha_8_SkColorType); | 1149 SkASSERT(bitmap.colorType() == kAlpha_8_SkColorType); |
1150 | 1150 |
1151 if (just_translate(*fMatrix, bitmap)) { | 1151 if (just_translate(*fMatrix, bitmap)) { |
1152 int ix = SkScalarRoundToInt(fMatrix->getTranslateX()); | 1152 int ix = SkScalarRoundToInt(fMatrix->getTranslateX()); |
1153 int iy = SkScalarRoundToInt(fMatrix->getTranslateY()); | 1153 int iy = SkScalarRoundToInt(fMatrix->getTranslateY()); |
1154 | 1154 |
1155 SkAutoLockPixels alp(bitmap); | 1155 SkAutoBitmapLockResult result; |
1156 if (!bitmap.readyToDraw()) { | 1156 if (!bitmap.requestLock(&result)) { |
1157 return; | 1157 return; |
1158 } | 1158 } |
1159 | 1159 const SkPixmap& pmap = result.pixmap(); |
1160 SkMask mask; | 1160 SkMask mask; |
1161 mask.fBounds.set(ix, iy, ix + bitmap.width(), iy + bitmap.height()); | 1161 mask.fBounds.set(ix, iy, ix + pmap.width(), iy + pmap.height()); |
1162 mask.fFormat = SkMask::kA8_Format; | 1162 mask.fFormat = SkMask::kA8_Format; |
1163 mask.fRowBytes = SkToU32(bitmap.rowBytes()); | 1163 mask.fRowBytes = SkToU32(pmap.rowBytes()); |
1164 mask.fImage = bitmap.getAddr8(0, 0); | 1164 // fImage is typed as writable, but in this case it is used read-only |
| 1165 mask.fImage = (uint8_t*)pmap.addr8(0, 0); |
1165 | 1166 |
1166 this->drawDevMask(mask, paint); | 1167 this->drawDevMask(mask, paint); |
1167 } else { // need to xform the bitmap first | 1168 } else { // need to xform the bitmap first |
1168 SkRect r; | 1169 SkRect r; |
1169 SkMask mask; | 1170 SkMask mask; |
1170 | 1171 |
1171 r.set(0, 0, | 1172 r.set(0, 0, |
1172 SkIntToScalar(bitmap.width()), SkIntToScalar(bitmap.height())); | 1173 SkIntToScalar(bitmap.width()), SkIntToScalar(bitmap.height())); |
1173 fMatrix->mapRect(&r); | 1174 fMatrix->mapRect(&r); |
1174 r.round(&mask.fBounds); | 1175 r.round(&mask.fBounds); |
(...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2263 mask->fImage = SkMask::AllocImage(size); | 2264 mask->fImage = SkMask::AllocImage(size); |
2264 memset(mask->fImage, 0, mask->computeImageSize()); | 2265 memset(mask->fImage, 0, mask->computeImageSize()); |
2265 } | 2266 } |
2266 | 2267 |
2267 if (SkMask::kJustComputeBounds_CreateMode != mode) { | 2268 if (SkMask::kJustComputeBounds_CreateMode != mode) { |
2268 draw_into_mask(*mask, devPath, style); | 2269 draw_into_mask(*mask, devPath, style); |
2269 } | 2270 } |
2270 | 2271 |
2271 return true; | 2272 return true; |
2272 } | 2273 } |
OLD | NEW |