X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Floadcanvas.cpp;h=8cf5cba0b13797fb8ffc8286e522fbcf6c191aa5;hb=a33baad6f6c41d8c829d0b02509b99afc2fc7242;hp=00cbfc239e184a9a6bf54ff21db8fe7ecac1ad0c;hpb=42f7fccb005cc4a4ab985e01398ab6479bb62199;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/loadcanvas.cpp b/synfig-core/trunk/src/synfig/loadcanvas.cpp index 00cbfc2..8cf5cba 100644 --- a/synfig-core/trunk/src/synfig/loadcanvas.cpp +++ b/synfig-core/trunk/src/synfig/loadcanvas.cpp @@ -6,7 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley -** Copyright (c) 2007 Chris Moore +** Copyright (c) 2007, 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -1275,12 +1275,23 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c } } + String version(canvas->get_version()); for (int i = 0; i < value_node->link_count(); i++) { - if (!c[i] && - // the 'width' parameter of wasn't always present, so it won't be in old .sif files - !(element->get_name() == "stripes" && value_node->link_name(i) == "width")) + if (!c[i]) { + // the 'width' parameter of wasn't always present in version 0.1 canvases + if (version == "0.1" && element->get_name() == "stripes" && value_node->link_name(i) == "width") + continue; + + // these 3 blinecalctangent parameters didn't appear until canvas version 0.5 + if ((version == "0.1" || version == "0.2" || version == "0.3" || version == "0.4") && + element->get_name() == "blinecalctangent" && + (value_node->link_name(i) == "offset" || + value_node->link_name(i) == "scale" || + value_node->link_name(i) == "fixed_length")) + continue; + error(element, strprintf(_("<%s> is missing link %d (%s)"), element->get_name().c_str(), i, @@ -1289,6 +1300,18 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c } } + // pre 0.4 canvases had *calctangent outputs scaled down by 0.5 for some reason + if (element->get_name() == "blinecalctangent" || element->get_name() == "segcalctangent") + { + 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))); + value_node = scale_value_node; + } + } + return value_node; }