| /* |
| * Copyright 2006 The Android Open Source Project |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| class SkSPRITE_CLASSNAME : public SkSpriteBlitter { |
| public: |
| SkSPRITE_CLASSNAME(const SkPixmap& source SkSPRITE_ARGS) : SkSpriteBlitter(source) { |
| SkSPRITE_INIT |
| } |
| |
| virtual void blitRect(int x, int y, int width, int height) { |
| SkASSERT(width > 0 && height > 0); |
| int srcX = x - fLeft; |
| int srcY = y - fTop; |
| SkSPRITE_DST_TYPE* SK_RESTRICT dst =fDst.SkSPRITE_DST_GETADDR(x, y); |
| const SkSPRITE_SRC_TYPE* SK_RESTRICT src = fSource.SkSPRITE_SRC_GETADDR(srcX, srcY); |
| size_t dstRB = fDst.rowBytes(); |
| size_t srcRB = fSource.rowBytes(); |
| |
| SkDEBUGCODE((void)fDst.SkSPRITE_DST_GETADDR(x + width - 1, y + height - 1);) |
| SkDEBUGCODE((void)fSource.SkSPRITE_SRC_GETADDR(srcX + width - 1, srcY + height - 1);) |
| |
| SkSPRITE_PREAMBLE(fSource, srcX, srcY); |
| |
| do { |
| SkSPRITE_DST_TYPE* d = dst; |
| const SkSPRITE_SRC_TYPE* s = src; |
| #ifdef SkSPRITE_BEGIN_ROW |
| SkSPRITE_BEGIN_ROW |
| #endif |
| |
| #ifdef SkSPRITE_ROW_PROC |
| SkSPRITE_ROW_PROC(d, s, width, x, y); |
| #else |
| int w = width; |
| do { |
| SkSPRITE_SRC_TYPE sc = *s++; |
| SkSPRITE_BLIT_PIXEL(d, sc); |
| d += 1; |
| } while (--w != 0); |
| #endif |
| dst = (SkSPRITE_DST_TYPE* SK_RESTRICT)((char*)dst + dstRB); |
| src = (const SkSPRITE_SRC_TYPE* SK_RESTRICT)((const char*)src + srcRB); |
| SkSPRITE_NEXT_ROW |
| #ifdef SkSPRITE_ROW_PROC |
| y += 1; |
| #endif |
| } while (--height != 0); |
| |
| SkSPRITE_POSTAMBLE((*fSource)); |
| } |
| |
| private: |
| SkSPRITE_FIELDS |
| }; |
| |
| #undef SkSPRITE_BLIT_PIXEL |
| #undef SkSPRITE_CLASSNAME |
| #undef SkSPRITE_DST_TYPE |
| #undef SkSPRITE_SRC_TYPE |
| #undef SkSPRITE_DST_GETADDR |
| #undef SkSPRITE_SRC_GETADDR |
| #undef SkSPRITE_PREAMBLE |
| #undef SkSPRITE_POSTAMBLE |
| #undef SkSPRITE_ARGS |
| #undef SkSPRITE_FIELDS |
| #undef SkSPRITE_INIT |
| #undef SkSPRITE_NEXT_ROW |
| #undef SkSPRITE_BEGIN_ROW |
| |
| #ifdef SkSPRITE_ROW_PROC |
| #undef SkSPRITE_ROW_PROC |
| #endif |