X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fsynfigapp%2Fcanvasinterface.cpp;h=aa228ebbcf16556a16f23a453f9d29e12eff521e;hb=26ed1c813d50bee5c39b3cfc4401a0a41506edb8;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..aa228eb 100644 --- a/synfig-studio/trunk/src/synfigapp/canvasinterface.cpp +++ b/synfig-studio/trunk/src/synfigapp/canvasinterface.cpp @@ -377,7 +377,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 +570,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)))