/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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 __com_sun_star_animations_AnimationCalcMode_idl__
#define __com_sun_star_animations_AnimationCalcMode_idl__

//=============================================================================

 module com {  module sun {  module star {  module animations {

//=============================================================================

/** Specifies the interpolation mode for the animation.

	@see <type>XAnimation</type>
	@see http://www.w3.org/TR/smil20/animation.html#adef-calcMode
	@see http://www.w3.org/TR/smil20/animation.html#adef-SplineAnimation-calcMode
*/
constants AnimationCalcMode
{
	/** This specifies that the animation function will jump from one value to the next without any interpolation.
	*/
	const short DISCRETE = 0;

	/** Simple linear interpolation between values is used to calculate the animation function.
		<br>
        This is the default.
	*/
	const short LINEAR = 1;

	/** Defines interpolation to produce an even pace of change across the animation.
		<br>
		This is only supported for values that define a linear numeric range, and
		for which some notion of "distance" between points can be calculated
		(e.g. position, width, height, etc.).
	*/
    const short PACED = 2;

	/** Interpolates from one value in the values list to the next according to a
		time function defined by a cubic Bezier spline. The points of the spline are
		defined in the <member>KeyTimes</member> attribute, and the control points
		for each interval are defined in the <member>KeySplines</member> attribute.
	*/
	const short SPLINE = 3;
};

//=============================================================================

}; }; }; };

#endif
