Blame synfig-core/src/modules/lyr_std/clamp.h

Carlos Lopez a09598
/* === S Y N F I G ========================================================= */
Carlos Lopez a09598
/*!	\file clamp.h
Carlos Lopez a09598
**	\brief Header file for implementation of the "Clamp" layer
Carlos Lopez a09598
**
Carlos Lopez a09598
**	$Id$
Carlos Lopez a09598
**
Carlos Lopez a09598
**	\legal
Carlos Lopez a09598
**	Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
Carlos Lopez e83454
**	Copyright (c) 2012-2013 Carlos Lรณpez
Carlos Lopez a09598
**
Carlos Lopez a09598
**	This package is free software; you can redistribute it and/or
Carlos Lopez a09598
**	modify it under the terms of the GNU General Public License as
Carlos Lopez a09598
**	published by the Free Software Foundation; either version 2 of
Carlos Lopez a09598
**	the License, or (at your option) any later version.
Carlos Lopez a09598
**
Carlos Lopez a09598
**	This package is distributed in the hope that it will be useful,
Carlos Lopez a09598
**	but WITHOUT ANY WARRANTY; without even the implied warranty of
Carlos Lopez a09598
**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Carlos Lopez a09598
**	General Public License for more details.
Carlos Lopez a09598
**	\endlegal
Carlos Lopez a09598
*/
Carlos Lopez a09598
/* ========================================================================= */
Carlos Lopez a09598
Carlos Lopez a09598
/* === S T A R T =========================================================== */
Carlos Lopez a09598
9921cf
#ifndef __SYNFIG_LAYER_CLAMP_H
9921cf
#define __SYNFIG_LAYER_CLAMP_H
Carlos Lopez a09598
Carlos Lopez a09598
/* === H E A D E R S ======================================================= */
Carlos Lopez a09598
Carlos Lopez a09598
#include <synfig layer.h=""></synfig>
Carlos Lopez a09598
93caa9
#include <synfig optimizer.h="" rendering=""></synfig>
93caa9
#include <synfig common="" rendering="" task="" taskpixelprocessor.h=""></synfig>
93caa9
#include <synfig rendering="" software="" task="" tasksw.h=""></synfig>
93caa9
Carlos Lopez a09598
/* === M A C R O S ========================================================= */
Carlos Lopez a09598
Carlos Lopez a09598
/* === T Y P E D E F S ===================================================== */
Carlos Lopez a09598
Carlos Lopez a09598
/* === C L A S S E S & S T R U C T S ======================================= */
Carlos Lopez a09598
144d3f
namespace synfig
144d3f
{
144d3f
namespace modules
144d3f
{
9f3c68
namespace lyr_std
9f3c68
{
9f3c68
93caa9
93caa9
class TaskClamp: public rendering::TaskPixelProcessor
93caa9
{
93caa9
public:
93caa9
	typedef etl::handle<taskclamp> Handle;</taskclamp>
5e2754
	static Token token;
5e2754
	virtual Token::Handle get_token() const { return token.handle(); }
93caa9
93caa9
	bool invert_negative;
93caa9
	bool clamp_floor;
93caa9
	bool clamp_ceiling;
93caa9
	Real floor;
93caa9
	Real ceiling;
93caa9
78f7a3
	bool is_transparent() const
78f7a3
		{ return !invert_negative && !clamp_floor && !clamp_ceiling; }
78f7a3
	bool is_constant() const
78f7a3
		{ return clamp_floor && clamp_ceiling && !approximate_less(floor, ceiling); }
78f7a3
93caa9
	TaskClamp():
93caa9
		invert_negative(false),
93caa9
		clamp_floor(true),
93caa9
		clamp_ceiling(true),
93caa9
		floor(0.0),
93caa9
		ceiling(1.0) { }
93caa9
};
93caa9
93caa9
5e2754
class TaskClampSW: public TaskClamp, public rendering::TaskSW
93caa9
{
93caa9
public:
93caa9
	typedef etl::handle<taskclampsw> Handle;</taskclampsw>
5e2754
	static Token token;
5e2754
	virtual Token::Handle get_token() const { return token.handle(); }
93caa9
5e2754
	virtual bool run(RunParams ¶ms) const;
5e2754
private:
5e2754
	void clamp_pixel(Color &dst, const Color &src) const;
93caa9
};
93caa9
93caa9
Carlos Lopez a09598
class Layer_Clamp : public Layer
Carlos Lopez a09598
{
Carlos Lopez a09598
	SYNFIG_LAYER_MODULE_EXT
Carlos Lopez a09598
Carlos Lopez a09598
private:
Carlos Lopez 46a82d
	//!Parameter: (bool)
Carlos Lopez 46a82d
	ValueBase param_invert_negative;
Carlos Lopez 46a82d
	//!Parameter: (bool)
Carlos Lopez 46a82d
	ValueBase param_clamp_ceiling;
9f3c68
	//!Parameter: (Real)
Carlos Lopez 46a82d
	ValueBase param_ceiling;
9f3c68
	//!Parameter: (Real)
Carlos Lopez 46a82d
	ValueBase param_floor;
Carlos Lopez a09598
Carlos Lopez a09598
	Color clamp_color(const Color &in)const;
Carlos Lopez a09598
Carlos Lopez a09598
public:
Carlos Lopez a09598
Carlos Lopez a09598
	Layer_Clamp();
Carlos Lopez a09598
9f3c68
	virtual bool set_param(const String & param, const ValueBase &value);
Carlos Lopez a09598
Carlos Lopez a09598
	virtual ValueBase get_param(const String & param)const;
Carlos Lopez a09598
Carlos Lopez a09598
	virtual Color get_color(Context context, const Point &pos)const;
Carlos Lopez a09598
Carlos Lopez a09598
	virtual Rect get_full_bounding_rect(Context context)const;
Carlos Lopez a09598
Carlos Lopez a09598
	virtual Vocab get_param_vocab()const;
a94d49
a94d49
	virtual rendering::Task::Handle build_rendering_task_vfunc(Context context)const;
Carlos Lopez a09598
}; // END of class Layer_Clamp
Carlos Lopez a09598
144d3f
}; // END of namespace lyr_std
144d3f
}; // END of namespace modules
144d3f
}; // END of namespace synfig
Carlos Lopez a09598
Carlos Lopez a09598
/* === E N D =============================================================== */
Carlos Lopez a09598
Carlos Lopez a09598
#endif