1 2 /* 3 * Copyright 2008 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 #ifndef SkUnitMappers_DEFINED 11 #define SkUnitMappers_DEFINED 12 13 #include "SkUnitMapper.h" 14 15 /** This discretizes the range [0...1) into N discret values. 16 */ 17 class SkDiscreteMapper : public SkUnitMapper { 18 public: 19 SkDiscreteMapper(int segments); 20 // override from SkUnitMapper 21 virtual uint16_t mapUnit16(uint16_t x); 22 23 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDiscreteMapper) 24 25 protected: 26 SkDiscreteMapper(SkFlattenableReadBuffer& ); 27 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 28 29 private: 30 int fSegments; 31 SkFract fScale; // computed from fSegments 32 33 typedef SkUnitMapper INHERITED; 34 }; 35 36 /** This returns cos(x), to simulate lighting a sphere, where 0 maps to the 37 center of the sphere, and 1 maps to the edge. 38 */ 39 class SkCosineMapper : public SkUnitMapper { 40 public: 41 SkCosineMapper() {} 42 // override from SkUnitMapper 43 virtual uint16_t mapUnit16(uint16_t x); 44 45 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkCosineMapper) 46 47 protected: 48 SkCosineMapper(SkFlattenableReadBuffer&); 49 50 private: 51 52 typedef SkUnitMapper INHERITED; 53 }; 54 55 #endif 56