X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcanvas.cpp;h=2bbb743366aed661dfc3dde7956999c420edee08;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=c2cf7750fdc31f0a91d7ebf1fcfe644c4b84d1b9;hpb=f45dcb953197ef7a76a314eac0a24516119ccb76;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/canvas.cpp b/synfig-core/trunk/src/synfig/canvas.cpp index c2cf775..2bbb743 100644 --- a/synfig-core/trunk/src/synfig/canvas.cpp +++ b/synfig-core/trunk/src/synfig/canvas.cpp @@ -537,17 +537,16 @@ Canvas::surefind_canvas(const String &id, String &warnings) Canvas::Handle external_canvas; + if(!is_absolute_path(file_name)) + file_name = get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name; + // If the composition is already open, then use it. if(externals_.count(file_name)) external_canvas=externals_[file_name]; else { String errors; - if(is_absolute_path(file_name)) - external_canvas=open_canvas(file_name, errors, warnings); - else - external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name, errors, warnings); - + external_canvas=open_canvas(file_name, errors, warnings); if(!external_canvas) throw runtime_error(errors); externals_[file_name]=external_canvas; @@ -624,17 +623,16 @@ Canvas::find_canvas(const String &id, String &warnings)const Canvas::Handle external_canvas; + if(!is_absolute_path(file_name)) + file_name = get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name; + // If the composition is already open, then use it. if(externals_.count(file_name)) external_canvas=externals_[file_name]; else { String errors, warnings; - if(is_absolute_path(file_name)) - external_canvas=open_canvas(file_name, errors, warnings); - else - external_canvas=open_canvas(get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name, errors, warnings); - + external_canvas=open_canvas(file_name, errors, warnings); if(!external_canvas) throw runtime_error(errors); externals_[file_name]=external_canvas; @@ -1236,7 +1234,8 @@ synfig::optimize_layers(Time time, Context context, Canvas::Handle op_canvas, bo !composite->reads_context()) { Canvas::Handle sub_canvas(Canvas::create_inline(op_canvas)); - sub_canvas->push_back(composite = composite->clone()); + // don't use clone() because it re-randomizes the seeds of any random valuenodes + sub_canvas->push_back(composite = composite->simple_clone()); layer = Layer::create("PasteCanvas"); composite->set_description(strprintf("Wrapped clone of '%s'", composite->get_non_empty_description().c_str())); layer->set_description(strprintf("PasteCanvas wrapper for '%s'", composite->get_non_empty_description().c_str())); @@ -1384,3 +1383,26 @@ Canvas::rename_group(const String&old_name,const String&new_name) (*iter)->add_to_group(new_name); } } + +void +Canvas::register_external_canvas(String file_name, Handle canvas) +{ + if(!is_absolute_path(file_name)) file_name = get_file_path()+ETL_DIRECTORY_SEPARATOR+file_name; + externals_[file_name] = canvas; +} + +#ifdef _DEBUG +void +Canvas::show_externals(String file, int line, String text) const +{ + printf(" .----- (externals for %lx '%s')\n | %s:%d %s\n", ulong(this), get_name().c_str(), file.c_str(), line, text.c_str()); + std::map::iterator iter; + for (iter = externals_.begin(); iter != externals_.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