X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fsynfigapp%2Fcanvasinterface.cpp;h=f066b18ef7c740172ad892bfe7dc8a8999e8395c;hb=c11163f51e342cc35511ed559fd3c0ae5405f840;hp=33b62734c59611dc555def88f8b8e96e64e954b2;hpb=d3753994e14338bd5282dfb2a363a61fc865ab16;p=synfig.git diff --git a/synfig-studio/trunk/src/synfigapp/canvasinterface.cpp b/synfig-studio/trunk/src/synfigapp/canvasinterface.cpp index 33b6273..f066b18 100644 --- a/synfig-studio/trunk/src/synfigapp/canvasinterface.cpp +++ b/synfig-studio/trunk/src/synfigapp/canvasinterface.cpp @@ -91,7 +91,8 @@ CanvasInterface::CanvasInterface(etl::loose_handle instance,etl::handl CanvasInterface::~CanvasInterface() { - synfig::info("synfigapp::CanvasInterface::~CanvasInterface(): Deleted"); + if (getenv("SYNFIG_DEBUG_DESTRUCTORS")) + synfig::info("CanvasInterface::~CanvasInterface(): Deleted"); } void @@ -377,7 +378,18 @@ CanvasInterface::generate_param_list(const ValueDesc &value_desc) param_list.add("value_node",value_desc.get_value_node()); if(value_desc.is_const()) - param_list.add("value",value_desc.get_value()); + { + // Fix 1868911: if we put a ValueBase holding a Canvas handle + // into the param_list and then export the canvas, the handle + // will miss out of having its reference count reduced, + // because by the time the handle is destructed the canvas + // will no longer be inline. So let's not propogate that + // ValueBase any further than here. + if (value_desc.get_value_type() == ValueBase::TYPE_CANVAS) + param_list.add("value",Canvas::LooseHandle(value_desc.get_value().get(Canvas::LooseHandle()))); + else + param_list.add("value",value_desc.get_value()); + } if(value_desc.parent_is_layer_param()) { @@ -559,14 +571,14 @@ CanvasInterface::import(const synfig::String &filename, bool /*copy*/) { x[0]=size[0]; x[1]=size[0]/w*h; - if(size[0]<0 ^ size[1]<0) + if((size[0]<0) ^ (size[1]<0)) x[1]=-x[1]; } else { x[1]=size[1]; x[0]=size[1]/h*w; - if(size[0]<0 ^ size[1]<0) + if((size[0]<0) ^ (size[1]<0)) x[0]=-x[0]; } if(!layer->set_param("tl",ValueBase(-x/2)))