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