1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/core/SkSpriteBlitterTemplate.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,82 @@ 1.4 + 1.5 +/* 1.6 + * Copyright 2006 The Android Open Source Project 1.7 + * 1.8 + * Use of this source code is governed by a BSD-style license that can be 1.9 + * found in the LICENSE file. 1.10 + */ 1.11 + 1.12 + 1.13 + 1.14 +class SkSPRITE_CLASSNAME : public SkSpriteBlitter { 1.15 +public: 1.16 + SkSPRITE_CLASSNAME(const SkBitmap& source SkSPRITE_ARGS) 1.17 + : SkSpriteBlitter(source) { 1.18 + SkSPRITE_INIT 1.19 + } 1.20 + 1.21 + virtual void blitRect(int x, int y, int width, int height) { 1.22 + SkASSERT(width > 0 && height > 0); 1.23 + int srcX = x - fLeft; 1.24 + int srcY = y - fTop; 1.25 + SkSPRITE_DST_TYPE* SK_RESTRICT dst =fDevice->SkSPRITE_DST_GETADDR(x, y); 1.26 + const SkSPRITE_SRC_TYPE* SK_RESTRICT src = 1.27 + fSource->SkSPRITE_SRC_GETADDR(srcX, srcY); 1.28 + size_t dstRB = fDevice->rowBytes(); 1.29 + size_t srcRB = fSource->rowBytes(); 1.30 + 1.31 + SkDEBUGCODE((void)fDevice->SkSPRITE_DST_GETADDR(x + width - 1, y + height - 1);) 1.32 + SkDEBUGCODE((void)fSource->SkSPRITE_SRC_GETADDR(srcX + width - 1, srcY + height - 1);) 1.33 + 1.34 + SkSPRITE_PREAMBLE((*fSource), srcX, srcY); 1.35 + 1.36 + do { 1.37 + SkSPRITE_DST_TYPE* d = dst; 1.38 + const SkSPRITE_SRC_TYPE* s = src; 1.39 +#ifdef SkSPRITE_BEGIN_ROW 1.40 + SkSPRITE_BEGIN_ROW 1.41 +#endif 1.42 + 1.43 +#ifdef SkSPRITE_ROW_PROC 1.44 + SkSPRITE_ROW_PROC(d, s, width, x, y); 1.45 +#else 1.46 + int w = width; 1.47 + do { 1.48 + SkSPRITE_SRC_TYPE sc = *s++; 1.49 + SkSPRITE_BLIT_PIXEL(d, sc); 1.50 + d += 1; 1.51 + } while (--w != 0); 1.52 +#endif 1.53 + dst = (SkSPRITE_DST_TYPE* SK_RESTRICT)((char*)dst + dstRB); 1.54 + src = (const SkSPRITE_SRC_TYPE* SK_RESTRICT) 1.55 + ((const char*)src + srcRB); 1.56 + SkSPRITE_NEXT_ROW 1.57 +#ifdef SkSPRITE_ROW_PROC 1.58 + y += 1; 1.59 +#endif 1.60 + } while (--height != 0); 1.61 + 1.62 + SkSPRITE_POSTAMBLE((*fSource)); 1.63 + } 1.64 + 1.65 +private: 1.66 + SkSPRITE_FIELDS 1.67 +}; 1.68 + 1.69 +#undef SkSPRITE_BLIT_PIXEL 1.70 +#undef SkSPRITE_CLASSNAME 1.71 +#undef SkSPRITE_DST_TYPE 1.72 +#undef SkSPRITE_SRC_TYPE 1.73 +#undef SkSPRITE_DST_GETADDR 1.74 +#undef SkSPRITE_SRC_GETADDR 1.75 +#undef SkSPRITE_PREAMBLE 1.76 +#undef SkSPRITE_POSTAMBLE 1.77 +#undef SkSPRITE_ARGS 1.78 +#undef SkSPRITE_FIELDS 1.79 +#undef SkSPRITE_INIT 1.80 +#undef SkSPRITE_NEXT_ROW 1.81 +#undef SkSPRITE_BEGIN_ROW 1.82 + 1.83 +#ifdef SkSPRITE_ROW_PROC 1.84 + #undef SkSPRITE_ROW_PROC 1.85 +#endif