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> 239e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu#include <vector> 24315c329544d7c593d1072b071cbb92d9afe74021John Reck 25e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Recknamespace android { 26e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Recknamespace uirenderer { 27e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 28e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckclass Interpolator { 29e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckpublic: 30e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck virtual ~Interpolator() {} 31e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 32e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck virtual float interpolate(float input) = 0; 33e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 34e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck static Interpolator* createDefaultInterpolator(); 35e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 36e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckprotected: 37e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck Interpolator() {} 38e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck}; 39e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 40315c329544d7c593d1072b071cbb92d9afe74021John Reckclass ANDROID_API AccelerateDecelerateInterpolator : public Interpolator { 41e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reckpublic: 42d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 43c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck}; 44c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 45c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API AccelerateInterpolator : public Interpolator { 46c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic: 4749796451cb9d1dae580618eb320ef3c5e6d90cd4Chih-Hung Hsieh explicit AccelerateInterpolator(float factor) : mFactor(factor), mDoubleFactor(factor*2) {} 48d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 49c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate: 50c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck const float mFactor; 51c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck const float mDoubleFactor; 52c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck}; 53c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 54c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API AnticipateInterpolator : public Interpolator { 55c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic: 5649796451cb9d1dae580618eb320ef3c5e6d90cd4Chih-Hung Hsieh explicit AnticipateInterpolator(float tension) : mTension(tension) {} 57d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 58c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate: 59c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck const float mTension; 60c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck}; 61c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 62c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API AnticipateOvershootInterpolator : public Interpolator { 63c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic: 6449796451cb9d1dae580618eb320ef3c5e6d90cd4Chih-Hung Hsieh explicit AnticipateOvershootInterpolator(float tension) : mTension(tension) {} 65d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 66c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate: 67c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck const float mTension; 68c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck}; 69c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 70c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API BounceInterpolator : public Interpolator { 71c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic: 72d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 73c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck}; 74c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 75c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API CycleInterpolator : public Interpolator { 76c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic: 7749796451cb9d1dae580618eb320ef3c5e6d90cd4Chih-Hung Hsieh explicit CycleInterpolator(float cycles) : mCycles(cycles) {} 78d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 79c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate: 80c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck const float mCycles; 81c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck}; 82c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 83c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API DecelerateInterpolator : public Interpolator { 84c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic: 8549796451cb9d1dae580618eb320ef3c5e6d90cd4Chih-Hung Hsieh explicit DecelerateInterpolator(float factor) : mFactor(factor) {} 86d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 87c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate: 88c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck const float mFactor; 89c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck}; 90e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 91c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API LinearInterpolator : public Interpolator { 92c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic: 93d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override { return input; } 94c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck}; 95c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 96c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckclass ANDROID_API OvershootInterpolator : public Interpolator { 97c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckpublic: 9849796451cb9d1dae580618eb320ef3c5e6d90cd4Chih-Hung Hsieh explicit OvershootInterpolator(float tension) : mTension(tension) {} 99d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 100c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckprivate: 101c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck const float mTension; 102e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck}; 103e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 1049e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liuclass ANDROID_API PathInterpolator : public Interpolator { 1059e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liupublic: 1069e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu explicit PathInterpolator(std::vector<float>&& x, std::vector<float>&& y) 1079e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu : mX (x), mY(y) {} 1089e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu virtual float interpolate(float input) override; 1099e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liuprivate: 1109e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu std::vector<float> mX; 1119e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu std::vector<float> mY; 1129e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu}; 1139e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu 114315c329544d7c593d1072b071cbb92d9afe74021John Reckclass ANDROID_API LUTInterpolator : public Interpolator { 115315c329544d7c593d1072b071cbb92d9afe74021John Reckpublic: 116315c329544d7c593d1072b071cbb92d9afe74021John Reck LUTInterpolator(float* values, size_t size); 117315c329544d7c593d1072b071cbb92d9afe74021John Reck ~LUTInterpolator(); 118315c329544d7c593d1072b071cbb92d9afe74021John Reck 119d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik virtual float interpolate(float input) override; 120315c329544d7c593d1072b071cbb92d9afe74021John Reck 121315c329544d7c593d1072b071cbb92d9afe74021John Reckprivate: 12251d6a3db97bdd5315f1a17a4b447d10a92217b98Chris Craik std::unique_ptr<float[]> mValues; 123315c329544d7c593d1072b071cbb92d9afe74021John Reck size_t mSize; 124315c329544d7c593d1072b071cbb92d9afe74021John Reck}; 125315c329544d7c593d1072b071cbb92d9afe74021John Reck 126e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck} /* namespace uirenderer */ 127e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck} /* namespace android */ 128e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 129e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#endif /* INTERPOLATOR_H */ 130