| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 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 "SkBitmapCache.h" | 8 #include "SkBitmapCache.h" |
| 9 #include "SkBitmapController.h" | 9 #include "SkBitmapController.h" |
| 10 #include "SkBitmapProcState.h" | 10 #include "SkBitmapProcState.h" |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 const SkBitmapProcState& s = *static_cast<const SkBitmapProcState*>(sIn); | 368 const SkBitmapProcState& s = *static_cast<const SkBitmapProcState*>(sIn); |
| 369 SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); | 369 SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); |
| 370 SkASSERT(s.fInvKy == 0); | 370 SkASSERT(s.fInvKy == 0); |
| 371 SkASSERT(count > 0 && colors != nullptr); | 371 SkASSERT(count > 0 && colors != nullptr); |
| 372 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); | 372 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); |
| 373 | 373 |
| 374 const int maxX = s.fPixmap.width() - 1; | 374 const int maxX = s.fPixmap.width() - 1; |
| 375 const int maxY = s.fPixmap.height() - 1; | 375 const int maxY = s.fPixmap.height() - 1; |
| 376 int ix = s.fFilterOneX + x; | 376 int ix = s.fFilterOneX + x; |
| 377 int iy = SkClampMax(s.fFilterOneY + y, maxY); | 377 int iy = SkClampMax(s.fFilterOneY + y, maxY); |
| 378 #ifdef SK_DEBUG | |
| 379 { | |
| 380 SkPoint pt; | |
| 381 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, | |
| 382 SkIntToScalar(y) + SK_ScalarHalf, &pt); | |
| 383 int iy2 = SkClampMax(SkScalarFloorToInt(pt.fY), maxY); | |
| 384 int ix2 = SkScalarFloorToInt(pt.fX); | |
| 385 | |
| 386 SkASSERT(iy == iy2); | |
| 387 SkASSERT(ix == ix2); | |
| 388 } | |
| 389 #endif | |
| 390 const SkPMColor* row = s.fPixmap.addr32(0, iy); | 378 const SkPMColor* row = s.fPixmap.addr32(0, iy); |
| 391 | 379 |
| 392 // clamp to the left | 380 // clamp to the left |
| 393 if (ix < 0) { | 381 if (ix < 0) { |
| 394 int n = SkMin32(-ix, count); | 382 int n = SkMin32(-ix, count); |
| 395 sk_memset32(colors, row[0], n); | 383 sk_memset32(colors, row[0], n); |
| 396 count -= n; | 384 count -= n; |
| 397 if (0 == count) { | 385 if (0 == count) { |
| 398 return; | 386 return; |
| 399 } | 387 } |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 const SkBitmapProcState& s = *static_cast<const SkBitmapProcState*>(sIn); | 431 const SkBitmapProcState& s = *static_cast<const SkBitmapProcState*>(sIn); |
| 444 SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); | 432 SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); |
| 445 SkASSERT(s.fInvKy == 0); | 433 SkASSERT(s.fInvKy == 0); |
| 446 SkASSERT(count > 0 && colors != nullptr); | 434 SkASSERT(count > 0 && colors != nullptr); |
| 447 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); | 435 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel); |
| 448 | 436 |
| 449 const int stopX = s.fPixmap.width(); | 437 const int stopX = s.fPixmap.width(); |
| 450 const int stopY = s.fPixmap.height(); | 438 const int stopY = s.fPixmap.height(); |
| 451 int ix = s.fFilterOneX + x; | 439 int ix = s.fFilterOneX + x; |
| 452 int iy = sk_int_mod(s.fFilterOneY + y, stopY); | 440 int iy = sk_int_mod(s.fFilterOneY + y, stopY); |
| 453 #ifdef SK_DEBUG | |
| 454 { | |
| 455 SkPoint pt; | |
| 456 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, | |
| 457 SkIntToScalar(y) + SK_ScalarHalf, &pt); | |
| 458 int iy2 = sk_int_mod(SkScalarFloorToInt(pt.fY), stopY); | |
| 459 int ix2 = SkScalarFloorToInt(pt.fX); | |
| 460 | |
| 461 SkASSERT(iy == iy2); | |
| 462 SkASSERT(ix == ix2); | |
| 463 } | |
| 464 #endif | |
| 465 const SkPMColor* row = s.fPixmap.addr32(0, iy); | 441 const SkPMColor* row = s.fPixmap.addr32(0, iy); |
| 466 | 442 |
| 467 ix = sk_int_mod(ix, stopX); | 443 ix = sk_int_mod(ix, stopX); |
| 468 for (;;) { | 444 for (;;) { |
| 469 int n = SkMin32(stopX - ix, count); | 445 int n = SkMin32(stopX - ix, count); |
| 470 memcpy(colors, row + ix, n * sizeof(SkPMColor)); | 446 memcpy(colors, row + ix, n * sizeof(SkPMColor)); |
| 471 count -= n; | 447 count -= n; |
| 472 if (0 == count) { | 448 if (0 == count) { |
| 473 return; | 449 return; |
| 474 } | 450 } |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 827 fx += dx; | 803 fx += dx; |
| 828 } | 804 } |
| 829 } else { | 805 } else { |
| 830 for (int i = 0; i < count; ++i) { | 806 for (int i = 0; i < count; ++i) { |
| 831 dst[i] = src[SkClampMax(SkFractionalIntToInt(fx), maxX)]; | 807 dst[i] = src[SkClampMax(SkFractionalIntToInt(fx), maxX)]; |
| 832 fx += dx; | 808 fx += dx; |
| 833 } | 809 } |
| 834 } | 810 } |
| 835 } | 811 } |
| 836 | 812 |
| OLD | NEW |