/*
 * Copyright (C) 2016 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
 */

package com.android.server.wm.animation;

import android.animation.KeyframeSet;
import android.animation.PathKeyframes;
import android.graphics.Path;
import android.graphics.PointF;
import android.view.animation.Animation;
import android.view.animation.Transformation;

/**
 * Translate animation which follows a curved path.
 */
public class CurvedTranslateAnimation extends Animation {

    private final PathKeyframes mKeyframes;

    public CurvedTranslateAnimation(Path path) {
        mKeyframes = KeyframeSet.ofPath(path);
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        PointF location = (PointF) mKeyframes.getValue(interpolatedTime);
        t.getMatrix().setTranslate(location.x, location.y);
    }
}
