X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fvaluenode_repeat_gradient.cpp;h=79e4f663e161d87bf507e7426020959d4cc8bf75;hb=756c0d29ac1742f231e6615f9a577e574e35a4af;hp=30a4d010758a1abe44e90460cf90681a54be1bc4;hpb=83fc7407cf368b3f537dee4509b404f73b766dfe;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/valuenode_repeat_gradient.cpp b/synfig-core/trunk/src/synfig/valuenode_repeat_gradient.cpp index 30a4d01..79e4f66 100644 --- a/synfig-core/trunk/src/synfig/valuenode_repeat_gradient.cpp +++ b/synfig-core/trunk/src/synfig/valuenode_repeat_gradient.cpp @@ -1,11 +1,12 @@ /* === S Y N F I G ========================================================= */ /*! \file valuenode_repeat_gradient.cpp -** \brief Template File +** \brief Implementation of the "Repeat Gradient" valuenode conversion. ** ** $Id: valuenode_repeat_gradient.cpp 604 2007-09-05 14:29:02Z dooglus $ ** ** \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 @@ -33,6 +34,7 @@ #include "valuenode_repeat_gradient.h" #include "valuenode_const.h" #include +#include "color.h" #include "gradient.h" #endif @@ -51,17 +53,21 @@ using namespace synfig; /* === M E T H O D S ======================================================= */ -synfig::ValueNode_Repeat_Gradient::ValueNode_Repeat_Gradient():LinkableValueNode(synfig::ValueBase::TYPE_GRADIENT) +synfig::ValueNode_Repeat_Gradient::ValueNode_Repeat_Gradient(const Gradient& x):LinkableValueNode(synfig::ValueBase::TYPE_GRADIENT) { - set_link("gradient",ValueNode_Const::create(Gradient())); + set_link("gradient",ValueNode_Const::create(x)); set_link("count",count_=ValueNode_Const::create(int(3))); set_link("width",ValueNode_Const::create(0.5)); + set_link("specify_start",ValueNode_Const::create(true)); + set_link("specify_end",ValueNode_Const::create(true)); + set_link("start_color",ValueNode_Const::create(Color::alpha())); + set_link("end_color",ValueNode_Const::create(Color::alpha())); } LinkableValueNode* ValueNode_Repeat_Gradient::create_new()const { - return new ValueNode_Repeat_Gradient(); + return new ValueNode_Repeat_Gradient(Gradient()); } ValueNode_Repeat_Gradient* @@ -72,11 +78,10 @@ ValueNode_Repeat_Gradient::create(const ValueBase& x) if(id!=ValueBase::TYPE_GRADIENT) { assert(0); - throw runtime_error("synfig::ValueNode_Repeat_Gradient:Bad type "+ValueBase::type_name(id)); + throw runtime_error(String(_("Repeat Gradient"))+_(":Bad type ")+ValueBase::type_local_name(id)); } - ValueNode_Repeat_Gradient* value_node=new ValueNode_Repeat_Gradient(); - value_node->set_gradient(ValueNode_Const::create(x.get(Gradient()))); + ValueNode_Repeat_Gradient* value_node=new ValueNode_Repeat_Gradient(x.get(Gradient())); assert(value_node->get_type()==id); @@ -88,37 +93,6 @@ synfig::ValueNode_Repeat_Gradient::~ValueNode_Repeat_Gradient() unlink_all(); } -bool -synfig::ValueNode_Repeat_Gradient::set_gradient(ValueNode::Handle a) -{ - if(a->get_type()!=ValueBase::TYPE_GRADIENT) - return false; - - gradient_=a; - - return true; -} - -bool -synfig::ValueNode_Repeat_Gradient::set_width(ValueNode::Handle x) -{ - if(x->get_type()!=ValueBase::TYPE_REAL) - return false; - - width_=x; - - return true; -} - -bool -synfig::ValueNode_Repeat_Gradient::set_count(ValueNode::Handle b) -{ - if(b->get_type()!=ValueBase::TYPE_INTEGER) - return false; - count_=b; - return true; -} - synfig::ValueBase synfig::ValueNode_Repeat_Gradient::operator()(Time t)const { @@ -131,12 +105,16 @@ synfig::ValueNode_Repeat_Gradient::operator()(Time t)const const Gradient gradient((*gradient_)(t).get(Gradient())); const float width(max(0.0,min(1.0,(*width_)(t).get(Real())))); + const bool specify_start((*specify_start_)(t).get(bool())); + const bool specify_end((*specify_end_)(t).get(bool())); const float gradient_width_a(width/count); const float gradient_width_b((1.0-width)/count); Gradient::const_iterator iter; Gradient::const_reverse_iterator riter; + if (specify_start) + ret.push_back(Gradient::CPoint(0,(*start_color_)(t).get(Color()))); for(i=0;ipos)),riter->color)); } + if (specify_end) + ret.push_back(Gradient::CPoint(1,(*end_color_)(t).get(Color()))); return ret; } bool -ValueNode_Repeat_Gradient::set_link_vfunc(int i,ValueNode::Handle x) +ValueNode_Repeat_Gradient::set_link_vfunc(int i,ValueNode::Handle value) { assert(i>=0 && i=0 && i=0 && i=0 && i