--- /dev/null
+/* === S Y N F I G ========================================================= */
+/*! \file circle.h
+** \brief Template Header
+**
+** $Id: circle.h,v 1.2 2005/01/24 03:08:17 darco Exp $
+**
+** \legal
+** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**
+** This package is free software; you can redistribute it and/or
+** modify it under the terms of the GNU General Public License as
+** published by the Free Software Foundation; either version 2 of
+** the License, or (at your option) any later version.
+**
+** This package is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** General Public License for more details.
+** \endlegal
+*/
+/* ========================================================================= */
+
+/* === H E A D E R S ======================================================= */
+
+#ifndef __SYNFIG_LAYER_CIRCLE_H__
+#define __SYNFIG_LAYER_CIRCLE_H__
+
+/* -- H E A D E R S --------------------------------------------------------- */
+
+#include <synfig/layer_composite.h>
+#include <synfig/color.h>
+#include <synfig/vector.h>
+
+using namespace synfig;
+using namespace std;
+using namespace etl;
+
+/* -- M A C R O S ----------------------------------------------------------- */
+
+/* -- T Y P E D E F S ------------------------------------------------------- */
+
+/* -- S T R U C T S & C L A S S E S ----------------------------------------- */
+
+class Circle : public synfig::Layer_Composite, public synfig::Layer_NoDeform
+{
+ SYNFIG_LAYER_MODULE_EXT
+private:
+ synfig::Color color;
+ synfig::Point pos;
+ synfig::Real radius;
+ synfig::Real feather;
+ bool invert;
+ int falloff;
+
+ //Caching system for circle
+ struct CircleDataCache
+ {
+ Real inner_radius;
+ Real outer_radius;
+
+ Real inner_radius_sqd;
+ Real outer_radius_sqd;
+
+ Real diff_sqd;
+ Real double_feather;
+ };
+
+ typedef Real FALLOFF_FUNC(const CircleDataCache &c, const Real &mag_sqd);
+
+ FALLOFF_FUNC *falloff_func;
+ CircleDataCache cache;
+
+ void constructcache();
+
+ static Real SqdFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real InvSqdFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real SqrtFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real InvSqrtFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real LinearFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real InvLinearFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real SigmondFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real InvSigmondFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real CosineFalloff(const CircleDataCache &c, const Real &mag_sqd);
+ static Real InvCosineFalloff(const CircleDataCache &c, const Real &mag_sqd);
+
+ FALLOFF_FUNC *GetFalloffFunc()const;
+ bool ImportParameters(const String ¶m, const ValueBase &value);
+
+public:
+ enum Falloff
+ {
+ FALLOFF_SQUARED =0,
+ FALLOFF_INTERPOLATION_LINEAR =1,
+ FALLOFF_SMOOTH =2,
+ FALLOFF_COSINE =2,
+ FALLOFF_SIGMOND =3,
+ FALLOFF_SQRT =4
+ };
+
+ Circle();
+
+ virtual bool set_param(const String ¶m, const ValueBase &value);
+
+ virtual ValueBase get_param(const String ¶m)const;
+
+ virtual Color get_color(Context context, const Point &pos)const;
+
+ virtual bool accelerated_render(Context context,Surface *surface,int quality, const RendDesc &renddesc, ProgressCallback *cb)const;
+
+ virtual synfig::Rect get_full_bounding_rect(synfig::Context context)const;
+ virtual synfig::Rect get_bounding_rect()const;
+
+ synfig::Layer::Handle hit_check(synfig::Context context, const synfig::Point &point)const;
+
+ virtual Vocab get_param_vocab()const;
+};
+
+/* -- E X T E R N S --------------------------------------------------------- */
+
+
+/* -- E N D ----------------------------------------------------------------- */
+
+#endif