Blob Blame Raw


#ifndef TDOUBLEKEYFRAME_INCLUDED
#define TDOUBLEKEYFRAME_INCLUDED

#include "tgeometry.h"
#include "tfilepath.h"

#undef DVAPI
#undef DVVAR
#ifdef TPARAM_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif

class TOStream;
class TIStream;
class TUnit;

class DVAPI TDoubleKeyframe
{
public:
	enum Type {
		None = 0,
		Constant,
		Linear,
		SpeedInOut,
		EaseInOut,
		EaseInOutPercentage,
		Exponential,
		Expression,
		File,
		SimilarShape
	};

	class DVAPI FileParams
	{
	public:
		TFilePath m_path;
		int m_fieldIndex;
		FileParams() : m_path(), m_fieldIndex(0) {}
	};

	static inline bool isKeyframeBased(int type)
	{
		return type < TDoubleKeyframe::Expression && type != TDoubleKeyframe::SimilarShape;
	}

	//private:
	Type m_type;
	Type m_prevType;
	double m_frame;
	double m_value;
	bool m_isKeyframe;
	int m_step;
	TPointD m_speedIn, m_speedOut;

	bool m_linkedHandles;
	std::string m_expressionText;
	FileParams m_fileParams;
	std::string m_unitName; // file/expression only
	double m_similarShapeOffset;

	void saveData(TOStream &os) const;
	void loadData(TIStream &is);

public:
	TDoubleKeyframe(double frame = 0, double value = 0);
	~TDoubleKeyframe();

	bool operator<(const TDoubleKeyframe &k) const { return m_frame < k.m_frame; }
};

#endif