X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Floadcanvas.cpp;h=433eeb006d520bffcea5fe581f6bd07c7e364e98;hb=4ba22fb51d97f1ecce04dcc5e40569a4354c1bae;hp=5482fd90fd29c6dba2dad437d5e84deb211d08b5;hpb=cba72b25145dee544dcc8b8bee96f1aaa4f53abf;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/loadcanvas.cpp b/synfig-core/trunk/src/synfig/loadcanvas.cpp index 5482fd9..433eeb0 100644 --- a/synfig-core/trunk/src/synfig/loadcanvas.cpp +++ b/synfig-core/trunk/src/synfig/loadcanvas.cpp @@ -1075,7 +1075,7 @@ CanvasParser::parse_animated(xmlpp::Element *element,Canvas::Handle canvas) // when loading a version 0.1 canvas, modify constant angle // waypoints to that they are within 180 degrees of the previous // waypoint's value - if (type == ValueBase::TYPE_ANGLE) + if (type == ValueBase::TYPE_ANGLE) { if (canvas->get_version() == "0.1") { @@ -1319,6 +1319,12 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c value_node->link_name(i) == "loop") continue; + // 'loop' was added while canvas version 0.6 was in use; the 'random' node was added back when 0.1 was in use + if ((version == "0.1" || version == "0.2" || version == "0.3" || version == "0.4" || version == "0.5" || version == "0.6") && + element->get_name() == "random" && + value_node->link_name(i) == "loop") + continue; + error(element, strprintf(_("<%s> is missing link %d (%s)"), element->get_name().c_str(), i, @@ -2120,6 +2126,32 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in return canvas; } +void +CanvasParser::register_canvas_in_map(Canvas::Handle canvas, String as) +{ + get_open_canvas_map()[etl::absolute_path(as)]=canvas; + canvas->signal_deleted().connect(sigc::bind(sigc::ptr_fun(_remove_from_open_canvas_map),canvas.get())); + canvas->signal_file_name_changed().connect(sigc::bind(sigc::ptr_fun(_canvas_file_name_changed),canvas.get())); +} + +#ifdef _DEBUG +void +CanvasParser::show_canvas_map(String file, int line, String text) +{ + return; + printf(" .-----\n | %s:%d %s\n", file.c_str(), line, text.c_str()); + std::map > canvas_map(synfig::get_open_canvas_map()); + std::map >::iterator iter; + for (iter = canvas_map.begin(); iter != canvas_map.end(); iter++) + { + synfig::String first(iter->first); + etl::loose_handle second(iter->second); + printf(" | %40s : %lx (%d)\n", first.c_str(), ulong(&*second), second->count()); + } + printf(" `-----\n\n"); +} +#endif // _DEBUG + Canvas::Handle CanvasParser::parse_from_file_as(const String &file_,const String &as_,String &errors) { @@ -2139,9 +2171,7 @@ CanvasParser::parse_from_file_as(const String &file_,const String &as_,String &e { Canvas::Handle canvas(parse_canvas(parser.get_document()->get_root_node(),0,false,as)); if (!canvas) return canvas; - get_open_canvas_map()[etl::absolute_path(as)]=canvas; - canvas->signal_deleted().connect(sigc::bind(sigc::ptr_fun(_remove_from_open_canvas_map),canvas.get())); - canvas->signal_file_name_changed().connect(sigc::bind(sigc::ptr_fun(_canvas_file_name_changed),canvas.get())); + register_canvas_in_map(canvas, as); const ValueNodeList& value_node_list(canvas->value_node_list());