Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-core / trunk / src / synfig / canvas.cpp
index c2cf775..2bbb743 100644 (file)
@@ -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<String, Handle>::iterator iter;
+       for (iter = externals_.begin(); iter != externals_.end(); iter++)
+       {
+               synfig::String first(iter->first);
+               etl::loose_handle<Canvas> second(iter->second);
+               printf("  |    %40s : %lx (%d)\n", first.c_str(), ulong(&*second), second->count());
+       }
+       printf("  `-----\n\n");
+}
+#endif // _DEBUG