1 /* libs/graphics/sgl/SkBitmapSamplerTemplate.h
2 **
3 ** Copyright 2006, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 ** http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17
18 /* this guy is pulled in multiple times, with the following symbols defined each time:
19
20 #define BITMAP_CLASSNAME_PREFIX(name) ARGB32##name
21 #defube BITMAP_PIXEL_TO_PMCOLOR(bitmap, x, y) *bitmap.getAddr32(x, y)
22 */
23
BITMAP_CLASSNAME_PREFIX(_Point_Sampler)24 class BITMAP_CLASSNAME_PREFIX(_Point_Sampler) : public SkBitmapSampler {
25 public:
26 BITMAP_CLASSNAME_PREFIX(_Point_Sampler)(const SkBitmap& bm, SkShader::TileMode tmx, SkShader::TileMode tmy)
27 : SkBitmapSampler(bm, false, tmx, tmy)
28 {
29 }
30
31 virtual SkPMColor sample(SkFixed x, SkFixed y) const
32 {
33 x = fTileProcX(SkFixedFloor(x), fMaxX);
34 y = fTileProcY(SkFixedFloor(y), fMaxY);
35 return BITMAP_PIXEL_TO_PMCOLOR(fBitmap, x, y);
36 }
37 };
38
39
BITMAP_CLASSNAME_PREFIX(_Point_Clamp_Sampler)40 class BITMAP_CLASSNAME_PREFIX(_Point_Clamp_Sampler) : public SkBitmapSampler {
41 public:
42 BITMAP_CLASSNAME_PREFIX(_Point_Clamp_Sampler)(const SkBitmap& bm)
43 : SkBitmapSampler(bm, false, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode)
44 {
45 }
46
47 virtual SkPMColor sample(SkFixed x, SkFixed y) const
48 {
49 x = do_clamp(SkFixedFloor(x), fMaxX);
50 y = do_clamp(SkFixedFloor(y), fMaxY);
51 return BITMAP_PIXEL_TO_PMCOLOR(fBitmap, x, y);
52 }
53 };
54
BITMAP_CLASSNAME_PREFIX(_Point_Repeat_Pow2_Sampler)55 class BITMAP_CLASSNAME_PREFIX(_Point_Repeat_Pow2_Sampler) : public SkBitmapSampler {
56 public:
57 BITMAP_CLASSNAME_PREFIX(_Point_Repeat_Pow2_Sampler)(const SkBitmap& bm)
58 : SkBitmapSampler(bm, false, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode)
59 {
60 }
61
62 virtual SkPMColor sample(SkFixed x, SkFixed y) const
63 {
64 x = do_repeat_pow2(SkFixedFloor(x), fMaxX);
65 y = do_repeat_pow2(SkFixedFloor(y), fMaxY);
66 return BITMAP_PIXEL_TO_PMCOLOR(fBitmap, x, y);
67 }
68 };
69
BITMAP_CLASSNAME_PREFIX(_Point_Repeat_Mod_Sampler)70 class BITMAP_CLASSNAME_PREFIX(_Point_Repeat_Mod_Sampler) : public SkBitmapSampler {
71 public:
72 BITMAP_CLASSNAME_PREFIX(_Point_Repeat_Mod_Sampler)(const SkBitmap& bm)
73 : SkBitmapSampler(bm, false, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode)
74 {
75 }
76
77 virtual SkPMColor sample(SkFixed x, SkFixed y) const
78 {
79 x = do_repeat_mod(SkFixedFloor(x), fMaxX);
80 y = do_repeat_mod(SkFixedFloor(y), fMaxY);
81 return BITMAP_PIXEL_TO_PMCOLOR(fBitmap, x, y);
82 }
83 };
84
BITMAP_CLASSNAME_PREFIX(_Point_Mirror_Pow2_Sampler)85 class BITMAP_CLASSNAME_PREFIX(_Point_Mirror_Pow2_Sampler) : public SkBitmapSampler {
86 public:
87 BITMAP_CLASSNAME_PREFIX(_Point_Mirror_Pow2_Sampler)(const SkBitmap& bm)
88 : SkBitmapSampler(bm, false, SkShader::kMirror_TileMode, SkShader::kMirror_TileMode)
89 {
90 }
91
92 virtual SkPMColor sample(SkFixed x, SkFixed y) const
93 {
94 x = do_mirror_pow2(SkFixedFloor(x), fMaxX);
95 y = do_mirror_pow2(SkFixedFloor(y), fMaxY);
96 return BITMAP_PIXEL_TO_PMCOLOR(fBitmap, x, y);
97 }
98 };
99
BITMAP_CLASSNAME_PREFIX(_Point_Mirror_Mod_Sampler)100 class BITMAP_CLASSNAME_PREFIX(_Point_Mirror_Mod_Sampler) : public SkBitmapSampler {
101 public:
102 BITMAP_CLASSNAME_PREFIX(_Point_Mirror_Mod_Sampler)(const SkBitmap& bm)
103 : SkBitmapSampler(bm, false, SkShader::kMirror_TileMode, SkShader::kMirror_TileMode)
104 {
105 }
106
107 virtual SkPMColor sample(SkFixed x, SkFixed y) const
108 {
109 x = do_mirror_mod(SkFixedFloor(x), fMaxX);
110 y = do_mirror_mod(SkFixedFloor(y), fMaxY);
111 return BITMAP_PIXEL_TO_PMCOLOR(fBitmap, x, y);
112 }
113 };
114
115 #undef BITMAP_CLASSNAME_PREFIX
116 #undef BITMAP_PIXEL_TO_PMCOLOR
117