if(bline_point.get_split_tangent_flag())
encode_vector(root->add_child("t2")->add_child("vector"),bline_point.get_tangent2());
if(bline_point.get_split_tangent_flag())
encode_vector(root->add_child("t2")->add_child("vector"),bline_point.get_tangent2());
encode_real(root->add_child("width")->add_child("real"),bline_point.get_width());
encode_real(root->add_child("origin")->add_child("real"),bline_point.get_origin());
return root;
encode_real(root->add_child("width")->add_child("real"),bline_point.get_width());
encode_real(root->add_child("origin")->add_child("real"),bline_point.get_origin());
return root;
xmlpp::Element* encode_gradient(xmlpp::Element* root,Gradient x)
{
root->set_name("gradient");
xmlpp::Element* encode_gradient(xmlpp::Element* root,Gradient x)
{
root->set_name("gradient");
xmlpp::Element* encode_list(xmlpp::Element* root,std::list<ValueBase> list, Canvas::ConstHandle canvas=0)
{
root->set_name("list");
xmlpp::Element* encode_list(xmlpp::Element* root,std::list<ValueBase> list, Canvas::ConstHandle canvas=0)
{
root->set_name("list");
waypoint_node->set_attribute("use",iter->get_value_node()->get_relative_id(canvas));
else
encode_value_node(waypoint_node->add_child("value_node"),iter->get_value_node(),canvas);
waypoint_node->set_attribute("use",iter->get_value_node()->get_relative_id(canvas));
else
encode_value_node(waypoint_node->add_child("value_node"),iter->get_value_node(),canvas);
root->set_name(value_node->get_name());
root->set_attribute("type",ValueBase::type_name(value_node->get_contained_type()));
root->set_name(value_node->get_name());
root->set_attribute("type",ValueBase::type_name(value_node->get_contained_type()));
vector<ValueNode_DynamicList::ListEntry>::const_iterator iter;
ValueNode_BLine::ConstHandle bline_value_node(ValueNode_BLine::ConstHandle::cast_dynamic(value_node));
vector<ValueNode_DynamicList::ListEntry>::const_iterator iter;
ValueNode_BLine::ConstHandle bline_value_node(ValueNode_BLine::ConstHandle::cast_dynamic(value_node));
for(iter=value_node->list.begin();iter!=value_node->list.end();++iter)
{
xmlpp::Element *entry_node=root->add_child("entry");
for(iter=value_node->list.begin();iter!=value_node->list.end();++iter)
{
xmlpp::Element *entry_node=root->add_child("entry");
for(entry_iter=timing_info.begin();entry_iter!=timing_info.end();++entry_iter)
if(entry_iter->state==true)
{
if(entry_iter->priority)
for(entry_iter=timing_info.begin();entry_iter!=timing_info.end();++entry_iter)
if(entry_iter->state==true)
{
if(entry_iter->priority)
// If this is just a plane-jane vanilla entry,
// then don't bother with begins and ends
if(end_sequence.empty() && begin_sequence=="SOT, ")
begin_sequence.clear();
// If this is just a plane-jane vanilla entry,
// then don't bother with begins and ends
if(end_sequence.empty() && begin_sequence=="SOT, ")
begin_sequence.clear();
if(!begin_sequence.empty())
{
// Remove the last ", " stuff
begin_sequence=String(begin_sequence.begin(),begin_sequence.end()-2);
// Add the attribute
if(!begin_sequence.empty())
{
// Remove the last ", " stuff
begin_sequence=String(begin_sequence.begin(),begin_sequence.end()-2);
// Add the attribute
if(!end_sequence.empty())
{
// Remove the last ", " stuff
end_sequence=String(end_sequence.begin(),end_sequence.end()-2);
// Add the attribute
if(!end_sequence.empty())
{
// Remove the last ", " stuff
end_sequence=String(end_sequence.begin(),end_sequence.end()-2);
// Add the attribute
continue;
}
if(value.get_type()==ValueBase::TYPE_CANVAS && !value.get(Canvas::LooseHandle())->is_inline())
{
Canvas::Handle child(value.get(Canvas::LooseHandle()));
continue;
}
if(value.get_type()==ValueBase::TYPE_CANVAS && !value.get(Canvas::LooseHandle())->is_inline())
{
Canvas::Handle child(value.get(Canvas::LooseHandle()));
node->set_attribute("name",iter->get_name());
encode_value(node->add_child("value"),value,layer->get_canvas().constant());
node->set_attribute("name",iter->get_name());
encode_value(node->add_child("value"),value,layer->get_canvas().constant());
if(!canvas->parent() || canvas->parent()->rend_desc().get_time_end()!=canvas->rend_desc().get_time_end())
root->set_attribute("end-time",rend_desc.get_time_end().get_string(rend_desc.get_frame_rate()));
if(!canvas->parent() || canvas->parent()->rend_desc().get_time_end()!=canvas->rend_desc().get_time_end())
root->set_attribute("end-time",rend_desc.get_time_end().get_string(rend_desc.get_frame_rate()));
for(KeyframeList::const_iterator iter=canvas->keyframe_list().begin();iter!=canvas->keyframe_list().end();++iter)
encode_keyframe(root->add_child("keyframe"),*iter,canvas->rend_desc().get_frame_rate());
}
for(KeyframeList::const_iterator iter=canvas->keyframe_list().begin();iter!=canvas->keyframe_list().end();++iter)
encode_keyframe(root->add_child("keyframe"),*iter,canvas->rend_desc().get_frame_rate());
}
// Output the <defs> section
if(!canvas->is_inline() && !canvas->value_node_list().empty() || !canvas->children().empty())
{
// Output the <defs> section
if(!canvas->is_inline() && !canvas->value_node_list().empty() || !canvas->children().empty())
{
document.write_to_file_formatted(tmp_filename);
}
catch(...) { synfig::error("synfig::save_canvas(): Caught unknown exception"); return false; }
document.write_to_file_formatted(tmp_filename);
}
catch(...) { synfig::error("synfig::save_canvas(): Caught unknown exception"); return false; }
#ifdef _WIN32
// On Win32 platforms, rename() has bad behavior. work around it.
char old_file[80]="sif.XXXXXXXX";
mktemp(old_file);
#ifdef _WIN32
// On Win32 platforms, rename() has bad behavior. work around it.
char old_file[80]="sif.XXXXXXXX";
mktemp(old_file);
if(rename(tmp_filename.c_str(),filename.c_str())!=0)
{
rename(old_file,tmp_filename.c_str());
if(rename(tmp_filename.c_str(),filename.c_str())!=0)
{
rename(old_file,tmp_filename.c_str());