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*/
17class SkDiscreteMapper : public SkUnitMapper {
18public:
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
25protected:
26    SkDiscreteMapper(SkFlattenableReadBuffer& );
27    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
28
29private:
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*/
39class SkCosineMapper : public SkUnitMapper {
40public:
41    SkCosineMapper() {}
42    // override from SkUnitMapper
43    virtual uint16_t mapUnit16(uint16_t x);
44
45    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkCosineMapper)
46
47protected:
48    SkCosineMapper(SkFlattenableReadBuffer&);
49
50private:
51
52    typedef SkUnitMapper INHERITED;
53};
54
55#endif
56