Interpolator.h revision d41c4d8c732095ae99c955b6b82f7306633004b1
1e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck/*
2e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * Copyright (C) 2014 The Android Open Source Project
3e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck *
4e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * Licensed under the Apache License, Version 2.0 (the "License");
5e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * you may not use this file except in compliance with the License.
6e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * You may obtain a copy of the License at
7e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck *
8e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck *      http://www.apache.org/licenses/LICENSE-2.0
9e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck *
10e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * Unless required by applicable law or agreed to in writing, software
11e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * distributed under the License is distributed on an "AS IS" BASIS,
12e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * See the License for the specific language governing permissions and
14e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck * limitations under the License.
15e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck */
16e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#ifndef INTERPOLATOR_H
17e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#define INTERPOLATOR_H
18e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
19315c329544d7c593d1072b071cbb92d9afe74021John Reck#include <stddef.h>
2051d6a3db97bdd5315f1a17a4b447d10a92217b98Chris Craik#include <memory>
21315c329544d7c593d1072b071cbb92d9afe74021John Reck
22315c329544d7c593d1072b071cbb92d9afe74021John Reck#include <cutils/compiler.h>
23315c329544d7c593d1072b071cbb92d9afe74021John Reck
24e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Recknamespace android {
25e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Recknamespace uirenderer {
26e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
27e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckclass Interpolator {
28e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckpublic:
29e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck    virtual ~Interpolator() {}
30e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
31e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck    virtual float interpolate(float input) = 0;
32e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
33e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck    static Interpolator* createDefaultInterpolator();
34e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
35e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckprotected:
36e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck    Interpolator() {}
37e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck};
38e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
39315c329544d7c593d1072b071cbb92d9afe74021John Reckclass ANDROID_API AccelerateDecelerateInterpolator : public Interpolator {
40e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckpublic:
41d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
42c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck};
43c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck
44c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API AccelerateInterpolator : public Interpolator {
45c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic:
46c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    AccelerateInterpolator(float factor) : mFactor(factor), mDoubleFactor(factor*2) {}
47d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
48c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate:
49c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    const float mFactor;
50c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    const float mDoubleFactor;
51c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck};
52c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck
53c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API AnticipateInterpolator : public Interpolator {
54c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic:
55c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    AnticipateInterpolator(float tension) : mTension(tension) {}
56d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
57c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate:
58c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    const float mTension;
59c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck};
60c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck
61c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API AnticipateOvershootInterpolator : public Interpolator {
62c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic:
63c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    AnticipateOvershootInterpolator(float tension) : mTension(tension) {}
64d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
65c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate:
66c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    const float mTension;
67c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck};
68c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck
69c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API BounceInterpolator : public Interpolator {
70c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic:
71d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
72c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck};
73c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck
74c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API CycleInterpolator : public Interpolator {
75c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic:
76c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    CycleInterpolator(float cycles) : mCycles(cycles) {}
77d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
78c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate:
79c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    const float mCycles;
80c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck};
81c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck
82c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API DecelerateInterpolator : public Interpolator {
83c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic:
84c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    DecelerateInterpolator(float factor) : mFactor(factor) {}
85d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
86c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate:
87c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    const float mFactor;
88c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck};
89e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
90c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API LinearInterpolator : public Interpolator {
91c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic:
92d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override { return input; }
93c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck};
94c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck
95c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API OvershootInterpolator : public Interpolator {
96c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic:
97c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    OvershootInterpolator(float tension) : mTension(tension) {}
98d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
99c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate:
100c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck    const float mTension;
101e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck};
102e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
103315c329544d7c593d1072b071cbb92d9afe74021John Reckclass ANDROID_API LUTInterpolator : public Interpolator {
104315c329544d7c593d1072b071cbb92d9afe74021John Reckpublic:
105315c329544d7c593d1072b071cbb92d9afe74021John Reck    LUTInterpolator(float* values, size_t size);
106315c329544d7c593d1072b071cbb92d9afe74021John Reck    ~LUTInterpolator();
107315c329544d7c593d1072b071cbb92d9afe74021John Reck
108d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik    virtual float interpolate(float input) override;
109315c329544d7c593d1072b071cbb92d9afe74021John Reck
110315c329544d7c593d1072b071cbb92d9afe74021John Reckprivate:
11151d6a3db97bdd5315f1a17a4b447d10a92217b98Chris Craik    std::unique_ptr<float[]> mValues;
112315c329544d7c593d1072b071cbb92d9afe74021John Reck    size_t mSize;
113315c329544d7c593d1072b071cbb92d9afe74021John Reck};
114315c329544d7c593d1072b071cbb92d9afe74021John Reck
115e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck} /* namespace uirenderer */
116e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck} /* namespace android */
117e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck
118e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#endif /* INTERPOLATOR_H */
119