Home | History | Annotate | Download | only in android
      1 /*
      2  * Copyright (C) 2009 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 AndroidAnimation_h
     18 #define AndroidAnimation_h
     19 
     20 #if USE(ACCELERATED_COMPOSITING)
     21 
     22 #include "FloatPoint.h"
     23 #include "FloatPoint3D.h"
     24 #include "GraphicsLayer.h"
     25 #include "HashMap.h"
     26 #include "LayerAndroid.h"
     27 #include "RefPtr.h"
     28 #include "Timer.h"
     29 #include "Vector.h"
     30 
     31 namespace WebCore {
     32 
     33 class TimingFunction;
     34 
     35 class AndroidAnimation : public RefCounted<AndroidAnimation> {
     36   public:
     37     AndroidAnimation(const Animation* animation,
     38                      double beginTime);
     39     AndroidAnimation(AndroidAnimation* anim);
     40 
     41     virtual ~AndroidAnimation();
     42     virtual PassRefPtr<AndroidAnimation> copy() = 0;
     43     float currentProgress(double time);
     44     bool checkIterationsAndProgress(double time, float* finalProgress);
     45     virtual void swapDirection() = 0;
     46     virtual bool evaluate(LayerAndroid* layer, double time) = 0;
     47     static long instancesCount();
     48     void setName(const String& name) { m_name = name; }
     49     String name() { return m_name; }
     50 
     51   protected:
     52     double m_beginTime;
     53     double m_elapsedTime;
     54     double m_duration;
     55     int m_iterationCount;
     56     int m_currentIteration;
     57     int m_direction;
     58     TimingFunction m_timingFunction;
     59     String m_name;
     60 };
     61 
     62 class AndroidOpacityAnimation : public AndroidAnimation {
     63   public:
     64     static PassRefPtr<AndroidOpacityAnimation> create(float fromValue,
     65                                                      float toValue,
     66                                                      const Animation* animation,
     67                                                      double beginTime);
     68     AndroidOpacityAnimation(float fromValue, float toValue,
     69                             const Animation* animation,
     70                             double beginTime);
     71     AndroidOpacityAnimation(AndroidOpacityAnimation* anim);
     72     virtual PassRefPtr<AndroidAnimation> copy();
     73 
     74     virtual void swapDirection();
     75     virtual bool evaluate(LayerAndroid* layer, double time);
     76 
     77   private:
     78     float m_fromValue;
     79     float m_toValue;
     80 };
     81 
     82 class AndroidTransformAnimation : public AndroidAnimation {
     83   public:
     84     static PassRefPtr<AndroidTransformAnimation> create(
     85                                                      const Animation* animation,
     86                                                      double beginTime);
     87     AndroidTransformAnimation(const Animation* animation, double beginTime);
     88 
     89     AndroidTransformAnimation(AndroidTransformAnimation* anim);
     90     virtual PassRefPtr<AndroidAnimation> copy();
     91 
     92     void setOriginalPosition(FloatPoint position) { m_position = position; }
     93     void setRotation(float fA, float tA);
     94     void setTranslation(float fX, float fY, float fZ,
     95                         float tX, float tY, float tZ);
     96     void setScale(float fX, float fY, float fZ,
     97                   float tX, float tY, float tZ);
     98     virtual void swapDirection();
     99     virtual bool evaluate(LayerAndroid* layer, double time);
    100 
    101   private:
    102     bool m_doTranslation;
    103     bool m_doScaling;
    104     bool m_doRotation;
    105     FloatPoint m_position;
    106     float m_fromX, m_fromY, m_fromZ;
    107     float m_toX, m_toY, m_toZ;
    108     float m_fromAngle, m_toAngle;
    109     float m_fromScaleX, m_fromScaleY, m_fromScaleZ;
    110     float m_toScaleX, m_toScaleY, m_toScaleZ;
    111 };
    112 
    113 } // namespace WebCore
    114 
    115 
    116 #endif // USE(ACCELERATED_COMPOSITING)
    117 
    118 #endif // AndroidAnimation_h
    119