1766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu/* 2766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * Copyright (C) 2016 The Android Open Source Project 3766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * 4766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * Licensed under the Apache License, Version 2.0 (the "License"); 5766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * you may not use this file except in compliance with the License. 6766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * You may obtain a copy of the License at 7766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * 8766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * http://www.apache.org/licenses/LICENSE-2.0 9766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * 10766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * Unless required by applicable law or agreed to in writing, software 11766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * distributed under the License is distributed on an "AS IS" BASIS, 12766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * See the License for the specific language governing permissions and 14766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * limitations under the License. 15766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu */ 16766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 17766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#pragma once 18766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 19766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "Animator.h" 20766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "PropertyValuesHolder.h" 21766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "Interpolator.h" 22766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 23766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liunamespace android { 24766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liunamespace uirenderer { 25766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 26766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuclass PropertyAnimator { 27766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liupublic: 28766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyAnimator(PropertyValuesHolder* holder, Interpolator* interpolator, nsecs_t startDelay, 29766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu nsecs_t duration, int repeatCount); 30766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void setCurrentPlayTime(nsecs_t playTime); 31766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu nsecs_t getTotalDuration() { 32766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return mTotalDuration; 33766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 34766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void setFraction(float fraction); 35766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 36766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuprivate: 37766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu std::unique_ptr<PropertyValuesHolder> mPropertyValuesHolder; 38766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu std::unique_ptr<Interpolator> mInterpolator; 39766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu nsecs_t mStartDelay; 40766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu nsecs_t mDuration; 41766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu uint32_t mRepeatCount; 42766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu nsecs_t mTotalDuration; 43766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu float mLatestFraction = 0.0f; 44766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu}; 45766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 46766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuclass ANDROID_API PropertyValuesAnimatorSet : public BaseRenderNodeAnimator { 47766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liupublic: 48766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu friend class PropertyAnimatorSetListener; 49766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet(); 50766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 51766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void start(AnimationListener* listener); 52766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void reverse(AnimationListener* listener); 53766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 54766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void addPropertyAnimator(PropertyValuesHolder* propertyValuesHolder, 55766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu Interpolator* interpolators, int64_t startDelays, 56766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu nsecs_t durations, int repeatCount); 57766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual uint32_t dirtyMask(); 58766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 59766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuprotected: 60766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual float getValue(RenderNode* target) const override; 61766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual void setValue(RenderNode* target, float value) override; 62766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual void onPlayTimeChanged(nsecs_t playTime) override; 63766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 64766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuprivate: 65766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void init(); 66766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void onFinished(BaseRenderNodeAnimator* animator); 67766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu // Listener set from outside 68766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu sp<AnimationListener> mOneShotListener; 69766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu std::vector< std::unique_ptr<PropertyAnimator> > mAnimators; 70766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu float mLastFraction = 0.0f; 71766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu bool mInitialized = false; 72766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu}; 73766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 74766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuclass PropertyAnimatorSetListener : public AnimationListener { 75766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liupublic: 76766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyAnimatorSetListener(PropertyValuesAnimatorSet* set) : mSet(set) {} 77766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual void onAnimationFinished(BaseRenderNodeAnimator* animator) override; 78766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 79766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuprivate: 80766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* mSet; 81766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu}; 82766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 83766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} // namespace uirenderer 84766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} // namespace android 85