X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=synfig-core%2Fsrc%2Fsynfig%2Floadcanvas.cpp;h=1e715c3e7fd5b62d4dcb37d23bcdad665b50ebb2;hb=6612ced05a48e176c5bc9e291152b5d8ae4fbf38;hp=3da37e9a9c24c95cc9636a528644061786d87b1f;hpb=a095981e18cc37a8ecc7cd237cc22b9c10329264;p=synfig.git diff --git a/synfig-core/src/synfig/loadcanvas.cpp b/synfig-core/src/synfig/loadcanvas.cpp index 3da37e9..1e715c3 100644 --- a/synfig-core/src/synfig/loadcanvas.cpp +++ b/synfig-core/src/synfig/loadcanvas.cpp @@ -8,6 +8,7 @@ ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley ** Copyright (c) 2007, 2008 Chris Moore ** Copyright (c) 2009 Carlos A. Sosa Navarro +** Copyright (c) 2009 Nikita Kitaev ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -43,7 +44,6 @@ #include "layer_pastecanvas.h" #include "loadcanvas.h" #include "valuenode.h" -#include "valuenode_subtract.h" #include "valuenode_animated.h" #include "valuenode_composite.h" #include "valuenode_const.h" @@ -824,11 +824,35 @@ CanvasParser::parse_angle(xmlpp::Element *element) return Angle::deg(atof(val.c_str())); } +bool +CanvasParser::parse_static(xmlpp::Element *element) +{ + if(!element->get_attribute("static")) + return false; + + string val=element->get_attribute("static")->get_value(); + + if(val=="true" || val=="1") + return true; + if(val=="false" || val=="0") + return false; + + error(element,strprintf(_("Bad value \"%s\" in <%s>"),val.c_str(),"bool")); + + return false; +} + + ValueBase CanvasParser::parse_value(xmlpp::Element *element,Canvas::Handle canvas) { if(element->get_name()=="real") - return parse_real(element); + { + ValueBase ret; + ret.set(parse_real(element)); + ret.set_static(parse_static(element)); + return ret; + } else if(element->get_name()=="time") return parse_time(element,canvas); @@ -867,7 +891,12 @@ CanvasParser::parse_value(xmlpp::Element *element,Canvas::Handle canvas) return parse_bline_point(element); else if(element->get_name()=="canvas") - return ValueBase(parse_canvas(element,canvas,true)); + { + ValueBase ret; + ret.set(parse_canvas(element,canvas,true)); + ret.set_static(parse_static(element)); + return ret; + } else { error_unexpected_element(element,element->get_name()); @@ -1340,8 +1369,8 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c if (version == "0.1" || version == "0.2" || version == "0.3") { handle scale_value_node=LinkableValueNode::create("scale",type); - scale_value_node->set_link(scale_value_node->get_link_index_from_name("link"), value_node); - scale_value_node->set_link(scale_value_node->get_link_index_from_name("scalar"), ValueNode_Const::create(Real(0.5))); + scale_value_node->set_link("link", value_node); + scale_value_node->set_link("scalar", ValueNode_Const::create(Real(0.5))); value_node = scale_value_node; } } @@ -1766,6 +1795,8 @@ CanvasParser::parse_layer(xmlpp::Element *element,Canvas::Handle canvas) if(!c) error((*iter),strprintf(_("Failed to load subcanvas '%s'"), str.c_str())); if(!layer->set_param(param_name,c)) error((*iter),_("Layer rejected canvas link")); + //Parse the static option and sets it to the canvas ValueBase + layer->set_param_static(param_name, parse_static(child)); } else try