Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef T_COLOR_FUNCTIONS_INCLUDED
Toshihiro Shimizu 890ddd
#define T_COLOR_FUNCTIONS_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tpixel.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TCOLOR_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TColorFunction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	virtual TPixel32 operator()(const TPixel32 &color) const = 0; // {return color;};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	struct Parameters { // outX = tcrop(inX * m_mX + m_cX, 0, 1); 0<=inX<=1
Toshihiro Shimizu 890ddd
		double m_mR, m_mG, m_mB, m_mM;
Toshihiro Shimizu 890ddd
		double m_cR, m_cG, m_cB, m_cM;
Toshihiro Shimizu 890ddd
		Parameters() : m_mR(1), m_mG(1), m_mB(1), m_mM(1), m_cR(0), m_cG(0), m_cB(0), m_cM(0) {}
Toshihiro Shimizu 890ddd
	};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual TColorFunction *clone() const = 0;
Toshihiro Shimizu 890ddd
	virtual bool getParameters(Parameters &p) const = 0; //{ p = Parameters(); return true; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual ~TColorFunction() {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TGenericColorFunction : public TColorFunction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	double m_m[4], m_c[4];
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TGenericColorFunction(const double m[4], const double c[4]);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TColorFunction *clone() const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return new TGenericColorFunction(m_m, m_c);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TPixel32 operator()(const TPixel32 &color) const;
Toshihiro Shimizu 890ddd
	bool getParameters(Parameters &p) const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TColorFader : public TColorFunction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TPixel32 m_color;
Toshihiro Shimizu 890ddd
	double m_fade;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TColorFader() : m_color(), m_fade(0.5) {}
Toshihiro Shimizu 890ddd
	TColorFader(const TPixel32 &color, double fade)
Toshihiro Shimizu 890ddd
		: m_color(color), m_fade(fade)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TColorFunction *clone() const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return new TColorFader(m_color, m_fade);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TPixel32 operator()(const TPixel32 &color) const;
Toshihiro Shimizu 890ddd
	bool getParameters(Parameters &p) const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TOnionFader : public TColorFunction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TPixel32 m_color;
Toshihiro Shimizu 890ddd
	double m_fade;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TOnionFader() : m_color(), m_fade(0.5) {}
Toshihiro Shimizu 890ddd
	TOnionFader(const TPixel32 &color, double fade)
Toshihiro Shimizu 890ddd
		: m_color(color), m_fade(fade)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TColorFunction *clone() const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return new TOnionFader(m_color, m_fade);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TPixel32 operator()(const TPixel32 &color) const;
Toshihiro Shimizu 890ddd
	bool getParameters(Parameters &p) const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI TTranspFader : public TColorFunction
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	double m_transp;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TTranspFader() : m_transp(0.5) {}
Toshihiro Shimizu 890ddd
	TTranspFader(double transp)
Toshihiro Shimizu 890ddd
		: m_transp(transp)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TColorFunction *clone() const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return new TTranspFader(m_transp);
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	TPixel32 operator()(const TPixel32 &color) const;
Toshihiro Shimizu 890ddd
	bool getParameters(Parameters &p) const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif