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 "SkDraw.h" | 8 #include "SkDraw.h" |
9 #include "SkBlitter.h" | 9 #include "SkBlitter.h" |
10 #include "SkBounder.h" | 10 #include "SkBounder.h" |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 int y = SkScalarFloorToInt(devPts[i].fY); | 392 int y = SkScalarFloorToInt(devPts[i].fY); |
393 if (r.contains(x, y)) { | 393 if (r.contains(x, y)) { |
394 ((SkPMColor*)((char*)addr + y * rb))[x] = value; | 394 ((SkPMColor*)((char*)addr + y * rb))[x] = value; |
395 } | 395 } |
396 } | 396 } |
397 } | 397 } |
398 | 398 |
399 static void bw_pt_hair_proc(const PtProcRec& rec, const SkPoint devPts[], | 399 static void bw_pt_hair_proc(const PtProcRec& rec, const SkPoint devPts[], |
400 int count, SkBlitter* blitter) { | 400 int count, SkBlitter* blitter) { |
401 for (int i = 0; i < count; i++) { | 401 for (int i = 0; i < count; i++) { |
402 int x = SkScalarFloor(devPts[i].fX); | 402 int x = SkScalarFloorToInt(devPts[i].fX); |
403 int y = SkScalarFloor(devPts[i].fY); | 403 int y = SkScalarFloorToInt(devPts[i].fY); |
404 if (rec.fClip->contains(x, y)) { | 404 if (rec.fClip->contains(x, y)) { |
405 blitter->blitH(x, y, 1); | 405 blitter->blitH(x, y, 1); |
406 } | 406 } |
407 } | 407 } |
408 } | 408 } |
409 | 409 |
410 static void bw_line_hair_proc(const PtProcRec& rec, const SkPoint devPts[], | 410 static void bw_line_hair_proc(const PtProcRec& rec, const SkPoint devPts[], |
411 int count, SkBlitter* blitter) { | 411 int count, SkBlitter* blitter) { |
412 for (int i = 0; i < count; i += 2) { | 412 for (int i = 0; i < count; i += 2) { |
413 SkScan::HairLine(devPts[i], devPts[i+1], *rec.fRC, blitter); | 413 SkScan::HairLine(devPts[i], devPts[i+1], *rec.fRC, blitter); |
(...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 unsigned bits = 0; // TODO: find a way to allow the caller to tell us to | 1188 unsigned bits = 0; // TODO: find a way to allow the caller to tell us to |
1189 // respect filtering. | 1189 // respect filtering. |
1190 return SkTreatAsSprite(matrix, bitmap.width(), bitmap.height(), bits); | 1190 return SkTreatAsSprite(matrix, bitmap.width(), bitmap.height(), bits); |
1191 } | 1191 } |
1192 | 1192 |
1193 void SkDraw::drawBitmapAsMask(const SkBitmap& bitmap, | 1193 void SkDraw::drawBitmapAsMask(const SkBitmap& bitmap, |
1194 const SkPaint& paint) const { | 1194 const SkPaint& paint) const { |
1195 SkASSERT(bitmap.config() == SkBitmap::kA8_Config); | 1195 SkASSERT(bitmap.config() == SkBitmap::kA8_Config); |
1196 | 1196 |
1197 if (just_translate(*fMatrix, bitmap)) { | 1197 if (just_translate(*fMatrix, bitmap)) { |
1198 int ix = SkScalarRound(fMatrix->getTranslateX()); | 1198 int ix = SkScalarRoundToInt(fMatrix->getTranslateX()); |
1199 int iy = SkScalarRound(fMatrix->getTranslateY()); | 1199 int iy = SkScalarRoundToInt(fMatrix->getTranslateY()); |
1200 | 1200 |
1201 SkAutoLockPixels alp(bitmap); | 1201 SkAutoLockPixels alp(bitmap); |
1202 if (!bitmap.readyToDraw()) { | 1202 if (!bitmap.readyToDraw()) { |
1203 return; | 1203 return; |
1204 } | 1204 } |
1205 | 1205 |
1206 SkMask mask; | 1206 SkMask mask; |
1207 mask.fBounds.set(ix, iy, ix + bitmap.width(), iy + bitmap.height()); | 1207 mask.fBounds.set(ix, iy, ix + bitmap.width(), iy + bitmap.height()); |
1208 mask.fFormat = SkMask::kA8_Format; | 1208 mask.fFormat = SkMask::kA8_Format; |
1209 mask.fRowBytes = SkToU32(bitmap.rowBytes()); | 1209 mask.fRowBytes = SkToU32(bitmap.rowBytes()); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1311 if (!matrix.setConcat(*fMatrix, prematrix)) { | 1311 if (!matrix.setConcat(*fMatrix, prematrix)) { |
1312 return; | 1312 return; |
1313 } | 1313 } |
1314 | 1314 |
1315 if (clipped_out(matrix, *fRC, bitmap.width(), bitmap.height())) { | 1315 if (clipped_out(matrix, *fRC, bitmap.width(), bitmap.height())) { |
1316 return; | 1316 return; |
1317 } | 1317 } |
1318 | 1318 |
1319 if (fBounder && just_translate(matrix, bitmap)) { | 1319 if (fBounder && just_translate(matrix, bitmap)) { |
1320 SkIRect ir; | 1320 SkIRect ir; |
1321 int32_t ix = SkScalarRound(matrix.getTranslateX()); | 1321 int32_t ix = SkScalarRoundToInt(matrix.getTranslateX()); |
1322 int32_t iy = SkScalarRound(matrix.getTranslateY()); | 1322 int32_t iy = SkScalarRoundToInt(matrix.getTranslateY()); |
1323 ir.set(ix, iy, ix + bitmap.width(), iy + bitmap.height()); | 1323 ir.set(ix, iy, ix + bitmap.width(), iy + bitmap.height()); |
1324 if (!fBounder->doIRect(ir)) { | 1324 if (!fBounder->doIRect(ir)) { |
1325 return; | 1325 return; |
1326 } | 1326 } |
1327 } | 1327 } |
1328 | 1328 |
1329 if (bitmap.config() != SkBitmap::kA8_Config && | 1329 if (bitmap.config() != SkBitmap::kA8_Config && |
1330 just_translate(matrix, bitmap)) { | 1330 just_translate(matrix, bitmap)) { |
1331 // | 1331 // |
1332 // It is safe to call lock pixels now, since we know the matrix is | 1332 // It is safe to call lock pixels now, since we know the matrix is |
1333 // (more or less) identity. | 1333 // (more or less) identity. |
1334 // | 1334 // |
1335 SkAutoLockPixels alp(bitmap); | 1335 SkAutoLockPixels alp(bitmap); |
1336 if (!bitmap.readyToDraw()) { | 1336 if (!bitmap.readyToDraw()) { |
1337 return; | 1337 return; |
1338 } | 1338 } |
1339 int ix = SkScalarRound(matrix.getTranslateX()); | 1339 int ix = SkScalarRoundToInt(matrix.getTranslateX()); |
1340 int iy = SkScalarRound(matrix.getTranslateY()); | 1340 int iy = SkScalarRoundToInt(matrix.getTranslateY()); |
1341 if (clipHandlesSprite(*fRC, ix, iy, bitmap)) { | 1341 if (clipHandlesSprite(*fRC, ix, iy, bitmap)) { |
1342 uint32_t storage[kBlitterStorageLongCount]; | 1342 uint32_t storage[kBlitterStorageLongCount]; |
1343 SkBlitter* blitter = SkBlitter::ChooseSprite(*fBitmap, paint, bitma
p, | 1343 SkBlitter* blitter = SkBlitter::ChooseSprite(*fBitmap, paint, bitma
p, |
1344 ix, iy, storage, sizeof(storage)
); | 1344 ix, iy, storage, sizeof(storage)
); |
1345 if (blitter) { | 1345 if (blitter) { |
1346 SkAutoTPlacementDelete<SkBlitter> ad(blitter, storage); | 1346 SkAutoTPlacementDelete<SkBlitter> ad(blitter, storage); |
1347 | 1347 |
1348 SkIRect ir; | 1348 SkIRect ir; |
1349 ir.set(ix, iy, ix + bitmap.width(), iy + bitmap.height()); | 1349 ir.set(ix, iy, ix + bitmap.width(), iy + bitmap.height()); |
1350 | 1350 |
(...skipping 1383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2734 bool SkBounder::doHairline(const SkPoint& pt0, const SkPoint& pt1, | 2734 bool SkBounder::doHairline(const SkPoint& pt0, const SkPoint& pt1, |
2735 const SkPaint& paint) { | 2735 const SkPaint& paint) { |
2736 SkIRect r; | 2736 SkIRect r; |
2737 SkScalar v0, v1; | 2737 SkScalar v0, v1; |
2738 | 2738 |
2739 v0 = pt0.fX; | 2739 v0 = pt0.fX; |
2740 v1 = pt1.fX; | 2740 v1 = pt1.fX; |
2741 if (v0 > v1) { | 2741 if (v0 > v1) { |
2742 SkTSwap<SkScalar>(v0, v1); | 2742 SkTSwap<SkScalar>(v0, v1); |
2743 } | 2743 } |
2744 r.fLeft = SkScalarFloor(v0); | 2744 r.fLeft = SkScalarFloorToInt(v0); |
2745 r.fRight = SkScalarCeil(v1); | 2745 r.fRight = SkScalarCeilToInt(v1); |
2746 | 2746 |
2747 v0 = pt0.fY; | 2747 v0 = pt0.fY; |
2748 v1 = pt1.fY; | 2748 v1 = pt1.fY; |
2749 if (v0 > v1) { | 2749 if (v0 > v1) { |
2750 SkTSwap<SkScalar>(v0, v1); | 2750 SkTSwap<SkScalar>(v0, v1); |
2751 } | 2751 } |
2752 r.fTop = SkScalarFloor(v0); | 2752 r.fTop = SkScalarFloorToInt(v0); |
2753 r.fBottom = SkScalarCeil(v1); | 2753 r.fBottom = SkScalarCeilToInt(v1); |
2754 | 2754 |
2755 if (paint.isAntiAlias()) { | 2755 if (paint.isAntiAlias()) { |
2756 r.inset(-1, -1); | 2756 r.inset(-1, -1); |
2757 } | 2757 } |
2758 return this->doIRect(r); | 2758 return this->doIRect(r); |
2759 } | 2759 } |
2760 | 2760 |
2761 bool SkBounder::doRect(const SkRect& rect, const SkPaint& paint) { | 2761 bool SkBounder::doRect(const SkRect& rect, const SkPaint& paint) { |
2762 SkIRect r; | 2762 SkIRect r; |
2763 | 2763 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2895 mask->fImage = SkMask::AllocImage(size); | 2895 mask->fImage = SkMask::AllocImage(size); |
2896 memset(mask->fImage, 0, mask->computeImageSize()); | 2896 memset(mask->fImage, 0, mask->computeImageSize()); |
2897 } | 2897 } |
2898 | 2898 |
2899 if (SkMask::kJustComputeBounds_CreateMode != mode) { | 2899 if (SkMask::kJustComputeBounds_CreateMode != mode) { |
2900 draw_into_mask(*mask, devPath, style); | 2900 draw_into_mask(*mask, devPath, style); |
2901 } | 2901 } |
2902 | 2902 |
2903 return true; | 2903 return true; |
2904 } | 2904 } |
OLD | NEW |