+
+ // the new line's end extends an existing line
+ if(extend_finish)
+ { // SPECIAL CASE -- EXTENSION
+ trans_bline.pop_back();
+ if(finish_duck_index==0)
+ {
+ result=extend_bline_from_begin(finish_duck_value_node_bline,trans_bline,false);
+ source=finish_duck_value_node_bline->list.front();
+ target_index=trans_bline.size()+start_duck_index;
+ }
+ else
+ { // We need to reverse the BLine first.
+ reverse_bline(trans_bline);
+ result=extend_bline_from_end(finish_duck_value_node_bline,trans_bline,false);
+ source=finish_duck_value_node_bline->list.back();
+ target_index=start_duck_index;
+ }
+
+ if(extend_finish_join_different)
+ LinkableValueNode::Handle::cast_dynamic(source.value_node)->
+ set_link(0,start_duck_value_desc.get_value_node());
+ else if(extend_finish_join_same)
+ LinkableValueNode::Handle::cast_dynamic(source.value_node)->
+ set_link(0,synfigapp::ValueDesc(LinkableValueNode::Handle::cast_dynamic(finish_duck_value_node_bline->
+ list[target_index].value_node),0).get_value_node());
+ return result;
+ }
+
+ if (join_start_no_extend)
+ LinkableValueNode::Handle::cast_dynamic(value_node->list.front().value_node)->
+ set_link(0,start_duck_value_desc.get_value_node());
+
+ if (join_finish_no_extend)
+ LinkableValueNode::Handle::cast_dynamic(value_node->list.back().value_node)->
+ set_link(0,finish_duck_value_desc.get_value_node());
+