blob: 224cee70acc77823e36f9012b9b16b5a4aa93b2c [file] [log] [blame]
John Recke45b1fd2014-04-15 09:50:16 -07001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#ifndef INTERPOLATOR_H
17#define INTERPOLATOR_H
18
John Reck315c3292014-05-09 19:21:04 -070019#include <stddef.h>
Chris Craik51d6a3d2014-12-22 17:16:56 -080020#include <memory>
John Reck315c3292014-05-09 19:21:04 -070021
22#include <cutils/compiler.h>
Doris Liu9e9eeee2016-11-29 14:48:25 -080023#include <vector>
John Reck315c3292014-05-09 19:21:04 -070024
John Recke45b1fd2014-04-15 09:50:16 -070025namespace android {
26namespace uirenderer {
27
28class Interpolator {
29public:
30 virtual ~Interpolator() {}
31
32 virtual float interpolate(float input) = 0;
33
34 static Interpolator* createDefaultInterpolator();
35
36protected:
37 Interpolator() {}
38};
39
John Reck315c3292014-05-09 19:21:04 -070040class ANDROID_API AccelerateDecelerateInterpolator : public Interpolator {
John Recke45b1fd2014-04-15 09:50:16 -070041public:
Chris Craikd41c4d82015-01-05 15:51:13 -080042 virtual float interpolate(float input) override;
John Recke45b1fd2014-04-15 09:50:16 -070043};
44
John Reckc8ac7752014-05-12 16:39:41 -070045class ANDROID_API AccelerateInterpolator : public Interpolator {
46public:
Chih-Hung Hsieh49796452016-08-10 14:08:35 -070047 explicit AccelerateInterpolator(float factor) : mFactor(factor), mDoubleFactor(factor*2) {}
Chris Craikd41c4d82015-01-05 15:51:13 -080048 virtual float interpolate(float input) override;
John Reckc8ac7752014-05-12 16:39:41 -070049private:
50 const float mFactor;
51 const float mDoubleFactor;
52};
53
54class ANDROID_API AnticipateInterpolator : public Interpolator {
55public:
Chih-Hung Hsieh49796452016-08-10 14:08:35 -070056 explicit AnticipateInterpolator(float tension) : mTension(tension) {}
Chris Craikd41c4d82015-01-05 15:51:13 -080057 virtual float interpolate(float input) override;
John Reckc8ac7752014-05-12 16:39:41 -070058private:
59 const float mTension;
60};
61
62class ANDROID_API AnticipateOvershootInterpolator : public Interpolator {
63public:
Chih-Hung Hsieh49796452016-08-10 14:08:35 -070064 explicit AnticipateOvershootInterpolator(float tension) : mTension(tension) {}
Chris Craikd41c4d82015-01-05 15:51:13 -080065 virtual float interpolate(float input) override;
John Reckc8ac7752014-05-12 16:39:41 -070066private:
67 const float mTension;
68};
69
70class ANDROID_API BounceInterpolator : public Interpolator {
71public:
Chris Craikd41c4d82015-01-05 15:51:13 -080072 virtual float interpolate(float input) override;
John Reckc8ac7752014-05-12 16:39:41 -070073};
74
75class ANDROID_API CycleInterpolator : public Interpolator {
76public:
Chih-Hung Hsieh49796452016-08-10 14:08:35 -070077 explicit CycleInterpolator(float cycles) : mCycles(cycles) {}
Chris Craikd41c4d82015-01-05 15:51:13 -080078 virtual float interpolate(float input) override;
John Reckc8ac7752014-05-12 16:39:41 -070079private:
80 const float mCycles;
81};
82
83class ANDROID_API DecelerateInterpolator : public Interpolator {
84public:
Chih-Hung Hsieh49796452016-08-10 14:08:35 -070085 explicit DecelerateInterpolator(float factor) : mFactor(factor) {}
Chris Craikd41c4d82015-01-05 15:51:13 -080086 virtual float interpolate(float input) override;
John Reckc8ac7752014-05-12 16:39:41 -070087private:
88 const float mFactor;
89};
90
91class ANDROID_API LinearInterpolator : public Interpolator {
92public:
Chris Craikd41c4d82015-01-05 15:51:13 -080093 virtual float interpolate(float input) override { return input; }
John Reckc8ac7752014-05-12 16:39:41 -070094};
95
96class ANDROID_API OvershootInterpolator : public Interpolator {
97public:
Chih-Hung Hsieh49796452016-08-10 14:08:35 -070098 explicit OvershootInterpolator(float tension) : mTension(tension) {}
Chris Craikd41c4d82015-01-05 15:51:13 -080099 virtual float interpolate(float input) override;
John Reckc8ac7752014-05-12 16:39:41 -0700100private:
101 const float mTension;
102};
103
Doris Liu9e9eeee2016-11-29 14:48:25 -0800104class ANDROID_API PathInterpolator : public Interpolator {
105public:
106 explicit PathInterpolator(std::vector<float>&& x, std::vector<float>&& y)
107 : mX (x), mY(y) {}
108 virtual float interpolate(float input) override;
109private:
110 std::vector<float> mX;
111 std::vector<float> mY;
112};
113
John Reck315c3292014-05-09 19:21:04 -0700114class ANDROID_API LUTInterpolator : public Interpolator {
115public:
116 LUTInterpolator(float* values, size_t size);
117 ~LUTInterpolator();
118
Chris Craikd41c4d82015-01-05 15:51:13 -0800119 virtual float interpolate(float input) override;
John Reck315c3292014-05-09 19:21:04 -0700120
121private:
Chris Craik51d6a3d2014-12-22 17:16:56 -0800122 std::unique_ptr<float[]> mValues;
John Reck315c3292014-05-09 19:21:04 -0700123 size_t mSize;
124};
125
John Recke45b1fd2014-04-15 09:50:16 -0700126} /* namespace uirenderer */
127} /* namespace android */
128
129#endif /* INTERPOLATOR_H */