#include <synfig/valuenode_bline.h>
#include <synfig/valuenode_blinecalctangent.h>
#include <synfig/valuenode_blinecalcvertex.h>
+#include <synfig/valuenode_blinecalcwidth.h>
#include <synfig/curve_helper.h>
{
int t1_index(value_node_composite->get_link_index_from_name("t1"));
int t2_index(value_node_composite->get_link_index_from_name("t2"));
+ int width_index(value_node_composite->get_link_index_from_name("width"));
+ int vertex_amount_index(bline_vertex->get_link_index_from_name("amount"));
+
ValueNode::Handle t1_value_node(value_node_composite->get_link(t1_index));
ValueNode::Handle t2_value_node(value_node_composite->get_link(t2_index));
+ ValueNode::Handle width_value_node(value_node_composite->get_link(width_index));
+ ValueNode::Handle amount_value_node(bline_vertex->get_link(vertex_amount_index));
+
ValueNode_BLineCalcTangent::Handle bline_tangent_1(ValueNode_BLineCalcTangent::Handle::cast_dynamic(t1_value_node));
ValueNode_BLineCalcTangent::Handle bline_tangent_2(ValueNode_BLineCalcTangent::Handle::cast_dynamic(t2_value_node));
+ ValueNode_BLineCalcWidth::Handle bline_width(ValueNode_BLineCalcWidth::Handle::cast_dynamic(width_value_node));
- if (bline_tangent_1 || bline_tangent_2)
+ if (bline_tangent_1 || bline_tangent_2 || bline_width)
{
synfig::Real radius = 0.0;
ValueNode_BLine::Handle bline(ValueNode_BLine::Handle::cast_dynamic(bline_vertex->get_link(bline_vertex->get_link_index_from_name("bline"))));
// we need to update the position of the tangent ducks - but how do we find these ducks?
// this is a brute force search - but is there a better way to do it?
- if (bline_tangent_1)
+ if (bline_tangent_1 &&
+ bline_tangent_1->get_link(bline_tangent_1->get_link_index_from_name("amount")) == amount_value_node)
{
Vector tangent = (*bline_tangent_1)(time, amount).get(Vector());
DuckList::iterator iter;
(*iter)->set_point(tangent);
}
- if (bline_tangent_2)
+ if (bline_tangent_2 &&
+ bline_tangent_2->get_link(bline_tangent_2->get_link_index_from_name("amount")) == amount_value_node)
{
Vector tangent = (*bline_tangent_2)(time, amount).get(Vector());
DuckList::iterator iter;
if ((*iter)->get_value_desc().get_value_node() == t2_value_node)
(*iter)->set_point(tangent);
}
+
+ if (bline_width &&
+ bline_width->get_link(bline_width->get_link_index_from_name("amount")) == amount_value_node)
+ {
+ Real width = (*bline_width)(time, amount).get(Real());
+ DuckList::iterator iter;
+ for (iter=duck_list.begin(); iter!=duck_list.end(); iter++)
+ if ((*iter)->get_value_desc().get_value_node() == width_value_node)
+ (*iter)->set_point(Point(width, 0));
+ }
}
}
}