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 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 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 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 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 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 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