X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Fsrc%2Fsynfig%2Fvaluenode_duplicate.cpp;fp=synfig-core%2Fsrc%2Fsynfig%2Fvaluenode_duplicate.cpp;h=540c3a99d26b65a3e0b98bf444ba17f8ea4223f0;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=0000000000000000000000000000000000000000;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/synfig-core/src/synfig/valuenode_duplicate.cpp b/synfig-core/src/synfig/valuenode_duplicate.cpp new file mode 100644 index 0000000..540c3a9 --- /dev/null +++ b/synfig-core/src/synfig/valuenode_duplicate.cpp @@ -0,0 +1,217 @@ +/* === S Y N F I G ========================================================= */ +/*! \file valuenode_duplicate.cpp +** \brief Implementation of the "Duplicate" valuenode conversion. +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007, 2008 Chris Moore +** +** 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 ======================================================= */ + +#ifdef USING_PCH +# include "pch.h" +#else +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "valuenode_duplicate.h" +#include "valuenode_const.h" +#include "general.h" + +#endif + +/* === U S I N G =========================================================== */ + +using namespace std; +using namespace etl; +using namespace synfig; + +/* === M A C R O S ========================================================= */ + +/* === G L O B A L S ======================================================= */ + +/* === P R O C E D U R E S ================================================= */ + +/* === M E T H O D S ======================================================= */ + +ValueNode_Duplicate::ValueNode_Duplicate(const ValueBase::Type &x): + LinkableValueNode(x) +{ +} + +ValueNode_Duplicate::ValueNode_Duplicate(const ValueBase &x): + LinkableValueNode(x.get_type()) +{ + set_link("from", ValueNode_Const::create(Real(1.0))); + set_link("to", ValueNode_Const::create(x.get(Real()))); + set_link("step", ValueNode_Const::create(Real(1.0))); + index = 1.0; +} + +ValueNode_Duplicate* +ValueNode_Duplicate::create(const ValueBase &x) +{ + return new ValueNode_Duplicate(x); +} + +LinkableValueNode* +ValueNode_Duplicate::create_new()const +{ + return new ValueNode_Duplicate(get_type()); +} + +ValueNode_Duplicate::~ValueNode_Duplicate() +{ + unlink_all(); +} + +bool +ValueNode_Duplicate::set_link_vfunc(int i,ValueNode::Handle value) +{ + assert(i>=0 && i=0 && i=0 && i=0 && i= to) return true; + + // at the end of the loop, leave the index at the last value that was used + index = prev; + return false; +} + +int +ValueNode_Duplicate::count_steps(Time t)const +{ + Real from = (*from_)(t).get(Real()); + Real to = (*to_ )(t).get(Real()); + Real step = (*step_)(t).get(Real()); + + if (step == 0) return 1; + + return abs((from - to) / step) + 1; +} + +ValueBase +ValueNode_Duplicate::operator()(Time t __attribute__ ((unused)))const +{ + if (getenv("SYNFIG_DEBUG_VALUENODE_OPERATORS")) + printf("%s:%d operator()\n", __FILE__, __LINE__); + + return index; +} + +String +ValueNode_Duplicate::get_name()const +{ + return "duplicate"; +} + +String +ValueNode_Duplicate::get_local_name()const +{ + return _("Duplicate"); +} + +bool +ValueNode_Duplicate::check_type(ValueBase::Type type __attribute__ ((unused))) +{ + // never offer this as a choice. it's used automatically by the 'Duplicate' layer. + return false; +}