1 :
2 : /*
3 : * Copyright 2006 The Android Open Source Project
4 : *
5 : * Use of this source code is governed by a BSD-style license that can be
6 : * found in the LICENSE file.
7 : */
8 :
9 :
10 :
11 0 : class SkSPRITE_CLASSNAME : public SkSpriteBlitter {
12 : public:
13 0 : SkSPRITE_CLASSNAME(const SkBitmap& source SkSPRITE_ARGS)
14 0 : : SkSpriteBlitter(source) {
15 0 : SkSPRITE_INIT
16 0 : }
17 :
18 0 : virtual void blitRect(int x, int y, int width, int height) {
19 0 : SkASSERT(width > 0 && height > 0);
20 0 : int srcX = x - fLeft;
21 0 : int srcY = y - fTop;
22 0 : SkSPRITE_DST_TYPE* SK_RESTRICT dst =fDevice->SkSPRITE_DST_GETADDR(x, y);
23 : const SkSPRITE_SRC_TYPE* SK_RESTRICT src =
24 0 : fSource->SkSPRITE_SRC_GETADDR(srcX, srcY);
25 0 : unsigned dstRB = fDevice->rowBytes();
26 0 : unsigned srcRB = fSource->rowBytes();
27 :
28 0 : SkDEBUGCODE((void)fDevice->SkSPRITE_DST_GETADDR(x + width - 1, y + height - 1);)
29 0 : SkDEBUGCODE((void)fSource->SkSPRITE_SRC_GETADDR(srcX + width - 1, srcY + height - 1);)
30 :
31 0 : SkSPRITE_PREAMBLE((*fSource), srcX, srcY);
32 :
33 0 : do {
34 0 : SkSPRITE_DST_TYPE* d = dst;
35 0 : const SkSPRITE_SRC_TYPE* s = src;
36 : #ifdef SkSPRITE_BEGIN_ROW
37 : SkSPRITE_BEGIN_ROW
38 : #endif
39 :
40 : #ifdef SkSPRITE_ROW_PROC
41 0 : SkSPRITE_ROW_PROC(d, s, width, x, y);
42 : #else
43 0 : int w = width;
44 0 : do {
45 0 : SkSPRITE_SRC_TYPE sc = *s++;
46 0 : SkSPRITE_BLIT_PIXEL(d, sc);
47 0 : d += 1;
48 : } while (--w != 0);
49 : #endif
50 0 : dst = (SkSPRITE_DST_TYPE* SK_RESTRICT)((char*)dst + dstRB);
51 : src = (const SkSPRITE_SRC_TYPE* SK_RESTRICT)
52 0 : ((const char*)src + srcRB);
53 : SkSPRITE_NEXT_ROW
54 : #ifdef SkSPRITE_ROW_PROC
55 0 : y += 1;
56 : #endif
57 : } while (--height != 0);
58 :
59 0 : SkSPRITE_POSTAMBLE((*fSource));
60 0 : }
61 :
62 : private:
63 : SkSPRITE_FIELDS
64 : };
65 :
66 : #undef SkSPRITE_BLIT_PIXEL
67 : #undef SkSPRITE_CLASSNAME
68 : #undef SkSPRITE_DST_TYPE
69 : #undef SkSPRITE_SRC_TYPE
70 : #undef SkSPRITE_DST_GETADDR
71 : #undef SkSPRITE_SRC_GETADDR
72 : #undef SkSPRITE_PREAMBLE
73 : #undef SkSPRITE_POSTAMBLE
74 : #undef SkSPRITE_ARGS
75 : #undef SkSPRITE_FIELDS
76 : #undef SkSPRITE_INIT
77 : #undef SkSPRITE_NEXT_ROW
78 : #undef SkSPRITE_BEGIN_ROW
79 :
80 : #ifdef SkSPRITE_ROW_PROC
81 : #undef SkSPRITE_ROW_PROC
82 : #endif
|