136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
/*
 | 
						|
 * Copyright (C) 2014 The Android Open Source Project
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
#ifndef INTERPOLATOR_H
 | 
						|
#define INTERPOLATOR_H
 | 
						|
 | 
						|
#include <stddef.h>
 | 
						|
#include <memory>
 | 
						|
 | 
						|
#include <cutils/compiler.h>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
namespace android {
 | 
						|
namespace uirenderer {
 | 
						|
 | 
						|
class Interpolator {
 | 
						|
public:
 | 
						|
    virtual ~Interpolator() {}
 | 
						|
 | 
						|
    virtual float interpolate(float input) = 0;
 | 
						|
 | 
						|
    static Interpolator* createDefaultInterpolator();
 | 
						|
 | 
						|
protected:
 | 
						|
    Interpolator() {}
 | 
						|
};
 | 
						|
 | 
						|
class AccelerateDecelerateInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
};
 | 
						|
 | 
						|
class AccelerateInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    explicit AccelerateInterpolator(float factor) : mFactor(factor), mDoubleFactor(factor * 2) {}
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
 | 
						|
private:
 | 
						|
    const float mFactor;
 | 
						|
    const float mDoubleFactor;
 | 
						|
};
 | 
						|
 | 
						|
class AnticipateInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    explicit AnticipateInterpolator(float tension) : mTension(tension) {}
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
 | 
						|
private:
 | 
						|
    const float mTension;
 | 
						|
};
 | 
						|
 | 
						|
class AnticipateOvershootInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    explicit AnticipateOvershootInterpolator(float tension) : mTension(tension) {}
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
 | 
						|
private:
 | 
						|
    const float mTension;
 | 
						|
};
 | 
						|
 | 
						|
class BounceInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
};
 | 
						|
 | 
						|
class CycleInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    explicit CycleInterpolator(float cycles) : mCycles(cycles) {}
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
 | 
						|
private:
 | 
						|
    const float mCycles;
 | 
						|
};
 | 
						|
 | 
						|
class DecelerateInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    explicit DecelerateInterpolator(float factor) : mFactor(factor) {}
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
 | 
						|
private:
 | 
						|
    const float mFactor;
 | 
						|
};
 | 
						|
 | 
						|
class LinearInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    virtual float interpolate(float input) override { return input; }
 | 
						|
};
 | 
						|
 | 
						|
class OvershootInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    explicit OvershootInterpolator(float tension) : mTension(tension) {}
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
 | 
						|
private:
 | 
						|
    const float mTension;
 | 
						|
};
 | 
						|
 | 
						|
class PathInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    explicit PathInterpolator(std::vector<float>&& x, std::vector<float>&& y) : mX(x), mY(y) {}
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
 | 
						|
private:
 | 
						|
    std::vector<float> mX;
 | 
						|
    std::vector<float> mY;
 | 
						|
};
 | 
						|
 | 
						|
class LUTInterpolator : public Interpolator {
 | 
						|
public:
 | 
						|
    LUTInterpolator(float* values, size_t size);
 | 
						|
    ~LUTInterpolator();
 | 
						|
 | 
						|
    virtual float interpolate(float input) override;
 | 
						|
 | 
						|
private:
 | 
						|
    std::unique_ptr<float[]> mValues;
 | 
						|
    size_t mSize;
 | 
						|
};
 | 
						|
 | 
						|
} /* namespace uirenderer */
 | 
						|
} /* namespace android */
 | 
						|
 | 
						|
#endif /* INTERPOLATOR_H */
 |