11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2008 The Android Open Source Project
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkUnitMappers_DEFINED
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkUnitMappers_DEFINED
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkUnitMapper.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** This discretizes the range [0...1) into N discret values.
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDiscreteMapper : public SkUnitMapper {
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDiscreteMapper(int segments);
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // override from SkUnitMapper
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual uint16_t mapUnit16(uint16_t x);
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected:
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDiscreteMapper(SkFlattenableReadBuffer& );
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // overrides from SkFlattenable
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual void flatten(SkFlattenableWriteBuffer& );
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual Factory getFactory();
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate:
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int     fSegments;
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkFract fScale;    // computed from fSegments
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static SkFlattenable* Create(SkFlattenableReadBuffer& buffer);
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    typedef SkUnitMapper INHERITED;
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** This returns cos(x), to simulate lighting a sphere, where 0 maps to the
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    center of the sphere, and 1 maps to the edge.
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkCosineMapper : public SkUnitMapper {
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkCosineMapper() {}
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // override from SkUnitMapper
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual uint16_t mapUnit16(uint16_t x);
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected:
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkCosineMapper(SkFlattenableReadBuffer&);
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // overrides from SkFlattenable
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual Factory getFactory();
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate:
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static SkFlattenable* Create(SkFlattenableReadBuffer&);
530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    typedef SkUnitMapper INHERITED;
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
59