X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftags%2Fsynfig_0_61_04%2Fsynfig-core%2Fsrc%2Fmodules%2Flyr_std%2Finsideout.cpp;fp=synfig-core%2Ftags%2Fsynfig_0_61_04%2Fsynfig-core%2Fsrc%2Fmodules%2Flyr_std%2Finsideout.cpp;h=dace8908498e99f14e58c6207be676f026b1096f;hb=f64373f72487d6aa502d9bde985b8a2d5519f099;hp=0000000000000000000000000000000000000000;hpb=ad81c2528eb79c7500e65fd15a9f66375f75d121;p=synfig.git diff --git a/synfig-core/tags/synfig_0_61_04/synfig-core/src/modules/lyr_std/insideout.cpp b/synfig-core/tags/synfig_0_61_04/synfig-core/src/modules/lyr_std/insideout.cpp new file mode 100644 index 0000000..dace890 --- /dev/null +++ b/synfig-core/tags/synfig_0_61_04/synfig-core/src/modules/lyr_std/insideout.cpp @@ -0,0 +1,142 @@ +/*! ======================================================================== +** Synfig +** Template File +** $Id: insideout.cpp,v 1.1.1.1 2005/01/04 01:23:10 darco Exp $ +** +** 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. +** +** === N O T E S =========================================================== +** +** ========================================================================= */ + +/* === H E A D E R S ======================================================= */ + +#ifdef USING_PCH +# include "pch.h" +#else +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "insideout.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif + +/* === M A C R O S ========================================================= */ + +/* === G L O B A L S ======================================================= */ + +SYNFIG_LAYER_INIT(InsideOut); +SYNFIG_LAYER_SET_NAME(InsideOut,"inside_out"); +SYNFIG_LAYER_SET_LOCAL_NAME(InsideOut,_("InsideOut")); +SYNFIG_LAYER_SET_CATEGORY(InsideOut,_("Distortions")); +SYNFIG_LAYER_SET_VERSION(InsideOut,"0.1"); +SYNFIG_LAYER_SET_CVS_ID(InsideOut,"$Id: insideout.cpp,v 1.1.1.1 2005/01/04 01:23:10 darco Exp $"); + +/* === P R O C E D U R E S ================================================= */ + +/* === M E T H O D S ======================================================= */ + +InsideOut::InsideOut(): + origin(0,0) +{ +} + +bool +InsideOut::set_param(const String & param, const ValueBase &value) +{ + IMPORT(origin); + return false; +} + +ValueBase +InsideOut::get_param(const String & param)const +{ + EXPORT(origin); + + EXPORT_NAME(); + EXPORT_VERSION(); + + return ValueBase(); +} + +synfig::Layer::Handle +InsideOut::hit_check(synfig::Context context, const synfig::Point &p)const +{ + Point pos(p-origin); + Real inv_mag=pos.inv_mag(); + Point invpos(pos*inv_mag*inv_mag); + return context.hit_check(invpos+origin); +} + +Color +InsideOut::get_color(Context context, const Point &p)const +{ + Point pos(p-origin); + Real inv_mag=pos.inv_mag(); + Point invpos(pos*inv_mag*inv_mag); + return context.get_color(invpos+origin); +} + +class InsideOut_Trans : public Transform +{ + etl::handle layer; +public: + InsideOut_Trans(const InsideOut* x):layer(x) { } + + synfig::Vector perform(const synfig::Vector& x)const + { + Point pos(x-layer->origin); + Real inv_mag=pos.inv_mag(); + if(!isnan(inv_mag)) + return (pos*(inv_mag*inv_mag)+layer->origin); + return x; + } + + synfig::Vector unperform(const synfig::Vector& x)const + { + Point pos(x-layer->origin); + Real inv_mag=pos.inv_mag(); + if(!isnan(inv_mag)) + return (pos*(inv_mag*inv_mag)+layer->origin); + return x; + } +}; +etl::handle +InsideOut::get_transform()const +{ + return new InsideOut_Trans(this); +} + +Layer::Vocab +InsideOut::get_param_vocab()const +{ + Layer::Vocab ret; + + ret.push_back(ParamDesc("origin") + .set_local_name(_("Origin")) + .set_description(_("Defines the where the center will be")) + ); + + return ret; +}