1/*
2 * Copyright 2013 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
17#ifndef INTERPOLATOR_H_
18#define INTERPOLATOR_H_
19
20#include <jni.h>
21#include <errno.h>
22#include <time.h>
23#include "JNIHelper.h"
24#include "perfMonitor.h"
25#include <list>
26
27namespace ndk_helper
28{
29
30enum INTERPOLATOR_TYPE
31{
32    INTERPOLATOR_TYPE_LINEAR,
33    INTERPOLATOR_TYPE_EASEINQUAD,
34    INTERPOLATOR_TYPE_EASEOUTQUAD,
35    INTERPOLATOR_TYPE_EASEINOUTQUAD,
36    INTERPOLATOR_TYPE_EASEINCUBIC,
37    INTERPOLATOR_TYPE_EASEOUTCUBIC,
38    INTERPOLATOR_TYPE_EASEINOUTCUBIC,
39    INTERPOLATOR_TYPE_EASEINQUART,
40    INTERPOLATOR_TYPE_EASEINEXPO,
41    INTERPOLATOR_TYPE_EASEOUTEXPO,
42};
43
44struct InterpolatorParams
45{
46    float dest_value_;
47    INTERPOLATOR_TYPE type_;
48    double duration_;
49};
50
51/******************************************************************
52 * Interpolates values with several interpolation methods
53 */
54class Interpolator
55{
56private:
57    double start_time_;
58    double dest_time_;
59    INTERPOLATOR_TYPE type_;
60
61    float start_value_;
62    float dest_value_;
63    std::list<InterpolatorParams> list_params_;
64
65    float GetFormula( const INTERPOLATOR_TYPE type,
66            const float t,
67            const float b,
68            const float d,
69            const float c );
70public:
71    Interpolator();
72    ~Interpolator();
73
74    Interpolator& Set( const float start,
75            const float dest,
76            const INTERPOLATOR_TYPE type,
77            double duration );
78
79    Interpolator& Add( const float dest,
80            const INTERPOLATOR_TYPE type,
81            const double duration );
82
83    bool Update( const double currentTime, float& p );
84
85    void Clear();
86};
87
88}   //namespace ndkHelper
89#endif /* INTERPOLATOR_H_ */
90