-
- Smach::event_result result;
- synfig::ValueNode_DynamicList::ListEntry source;
- int target_index;
-
- // the new line's start extends an existing line
- if(extend_start)
- {
- if(complete_loop)bline.pop_back();
- bline.pop_front();
- if(start_duck_index==0)
- { // We need to reverse the BLine first.
- reverse_bline(bline);
- result=extend_bline_from_begin(start_duck_value_node_bline,bline,complete_loop,shift_offset_vector);
- source=start_duck_value_node_bline->list.front();
- target_index=bline.size()+finish_duck_index;
- }
- else
- {
- result=extend_bline_from_end(start_duck_value_node_bline,bline,complete_loop,shift_offset_vector);
- source=start_duck_value_node_bline->list.back();
- target_index=finish_duck_index;
- }
-
- if(extend_start_join_different)
- LinkableValueNode::Handle::cast_dynamic(source.value_node)->
- set_link(0,finish_duck_value_desc.get_value_node());
- else if(extend_start_join_same)
- LinkableValueNode::Handle::cast_dynamic(source.value_node)->
- set_link(0,synfigapp::ValueDesc(LinkableValueNode::Handle::cast_dynamic(start_duck_value_node_bline->
- list[target_index].value_node),0).get_value_node());
- return result;
- }
-
- // the new line's end extends an existing line
- if(extend_finish)
- { // SPECIAL CASE -- EXTENSION
- bline.pop_back();
- if(finish_duck_index==0)
- {
- result=extend_bline_from_begin(finish_duck_value_node_bline,bline,false,shift_offset_vector);
- source=finish_duck_value_node_bline->list.front();
- target_index=bline.size()+start_duck_index;
- }
- else
- { // We need to reverse the BLine first.
- reverse_bline(bline);
- result=extend_bline_from_end(finish_duck_value_node_bline,bline,false,shift_offset_vector);
- 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;
- }