Interpolator.h revision 51d6a3db97bdd5315f1a17a4b447d10a92217b98
1e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti/* 2e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * Copyright (C) 2014 The Android Open Source Project 3e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * 4e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * Licensed under the Apache License, Version 2.0 (the "License"); 5e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * you may not use this file except in compliance with the License. 6e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * You may obtain a copy of the License at 7e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * 8e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * http://www.apache.org/licenses/LICENSE-2.0 9e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * 10e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * Unless required by applicable law or agreed to in writing, software 11e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * distributed under the License is distributed on an "AS IS" BASIS, 12e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * See the License for the specific language governing permissions and 14e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti * limitations under the License. 15e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti */ 16e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti#ifndef INTERPOLATOR_H 17e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti#define INTERPOLATOR_H 18e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 19e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti#include <stddef.h> 20e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti#include <memory> 21e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 22e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti#include <cutils/compiler.h> 23e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 24e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittinamespace android { 2564483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colittinamespace uirenderer { 26e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 27e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitticlass Interpolator { 28e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittipublic: 29e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual ~Interpolator() {} 30e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 31e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual float interpolate(float input) = 0; 32e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 3362388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitti static Interpolator* createDefaultInterpolator(); 34e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 35e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittiprotected: 36befe778c73e48417942fc31c06509bac8e5ca0d2Erik Kline Interpolator() {} 3734385d352da19805ae948215e2edbeedd16b7941Elliott Hughes}; 38befe778c73e48417942fc31c06509bac8e5ca0d2Erik Kline 3934385d352da19805ae948215e2edbeedd16b7941Elliott Hughesclass ANDROID_API AccelerateDecelerateInterpolator : public Interpolator { 40befe778c73e48417942fc31c06509bac8e5ca0d2Erik Klinepublic: 4134385d352da19805ae948215e2edbeedd16b7941Elliott Hughes virtual float interpolate(float input); 4234385d352da19805ae948215e2edbeedd16b7941Elliott Hughes}; 4334385d352da19805ae948215e2edbeedd16b7941Elliott Hughes 4434385d352da19805ae948215e2edbeedd16b7941Elliott Hughesclass ANDROID_API AccelerateInterpolator : public Interpolator { 4534385d352da19805ae948215e2edbeedd16b7941Elliott Hughespublic: 4664483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitti AccelerateInterpolator(float factor) : mFactor(factor), mDoubleFactor(factor*2) {} 47e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual float interpolate(float input); 48e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittiprivate: 49e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti const float mFactor; 50e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti const float mDoubleFactor; 51e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti}; 52e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 53e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitticlass ANDROID_API AnticipateInterpolator : public Interpolator { 54e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittipublic: 55e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti AnticipateInterpolator(float tension) : mTension(tension) {} 56e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual float interpolate(float input); 5762388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colittiprivate: 5862388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitti const float mTension; 5962388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitti}; 6062388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitti 6162388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitticlass ANDROID_API AnticipateOvershootInterpolator : public Interpolator { 6262388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colittipublic: 6362388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitti AnticipateOvershootInterpolator(float tension) : mTension(tension) {} 6462388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitti virtual float interpolate(float input); 6562388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colittiprivate: 6662388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitti const float mTension; 6762388936c88840a5f1ab7a7f6dd547467e99dfadLorenzo Colitti}; 68e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 69e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitticlass ANDROID_API BounceInterpolator : public Interpolator { 70e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittipublic: 71e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual float interpolate(float input); 72e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti}; 73e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 747dc78cf3af9fd11a4f1e2e981ce584a23755ea9eLorenzo Colitticlass ANDROID_API CycleInterpolator : public Interpolator { 7564483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colittipublic: 7664483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitti CycleInterpolator(float cycles) : mCycles(cycles) {} 77e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual float interpolate(float input); 78e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittiprivate: 79e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti const float mCycles; 807dc78cf3af9fd11a4f1e2e981ce584a23755ea9eLorenzo Colitti}; 8164483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitti 8264483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitticlass ANDROID_API DecelerateInterpolator : public Interpolator { 83e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittipublic: 8464483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitti DecelerateInterpolator(float factor) : mFactor(factor) {} 8564483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitti virtual float interpolate(float input); 86e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittiprivate: 877dc78cf3af9fd11a4f1e2e981ce584a23755ea9eLorenzo Colitti const float mFactor; 8864483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitti}; 8964483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitti 90e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitticlass ANDROID_API LinearInterpolator : public Interpolator { 9164483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colittipublic: 92e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual float interpolate(float input) { return input; } 937dc78cf3af9fd11a4f1e2e981ce584a23755ea9eLorenzo Colitti}; 9464483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitti 9564483947fdb03bf838e317ac0a4af5e0f53a5bbfLorenzo Colitticlass ANDROID_API OvershootInterpolator : public Interpolator { 96e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittipublic: 97e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti OvershootInterpolator(float tension) : mTension(tension) {} 98e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual float interpolate(float input); 99e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittiprivate: 100e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti const float mTension; 101e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti}; 102e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 103e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitticlass ANDROID_API LUTInterpolator : public Interpolator { 104e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittipublic: 105e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti LUTInterpolator(float* values, size_t size); 106e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti ~LUTInterpolator(); 107e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 108e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti virtual float interpolate(float input); 109e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 110e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colittiprivate: 111e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti std::unique_ptr<float[]> mValues; 1127dc78cf3af9fd11a4f1e2e981ce584a23755ea9eLorenzo Colitti size_t mSize; 113e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti}; 114e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 1157dc78cf3af9fd11a4f1e2e981ce584a23755ea9eLorenzo Colitti} /* namespace uirenderer */ 116e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti} /* namespace android */ 117e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti 118e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti#endif /* INTERPOLATOR_H */ 119e1ad1849f3a65c1ff06919351ef1d73e9bc8854eLorenzo Colitti