**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-** Copyright (c) 2007 Chris Moore
+** Copyright (c) 2007, 2008 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
CanvasInterface::~CanvasInterface()
{
- synfig::info("synfigapp::CanvasInterface::~CanvasInterface(): Deleted");
+ if (getenv("SYNFIG_DEBUG_DESTRUCTORS"))
+ synfig::info("CanvasInterface::~CanvasInterface(): Deleted");
}
void
return 0;
}
+ // automatically export the Index parameter of new Duplicate layers
+ if (name == "duplicate")
+ for (int i = 1; ; i++)
+ {
+ String name = strprintf(_("Index %d"), i);
+ try
+ {
+ canvas->find_value_node(name);
+ }
+ catch (Exception::IDNotFound x)
+ {
+ add_value_node(layer->dynamic_param_list().find("index")->second, name);
+ break;
+ }
+ }
+
layer->set_canvas(canvas);
// Apply some defaults
return 0;
}
- synfig::info("DEPTH=%d",depth);
+ // synfig::info("DEPTH=%d",depth);
+
// Action to move the layer (if necessary)
if(depth>0)
{
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())
{
{
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)))
void
CanvasInterface::waypoint_duplicate(synfigapp::ValueDesc value_desc,synfig::Waypoint waypoint)
{
+ ValueNode::Handle value_node();
+ waypoint_duplicate(value_desc.get_value_node(), waypoint);
+}
+
+void
+CanvasInterface::waypoint_duplicate(ValueNode::Handle value_node,synfig::Waypoint waypoint)
+{
Action::Handle action(Action::create("waypoint_set_smart"));
assert(action);
waypoint.make_unique();
waypoint.set_time(get_time());
- ValueNode::Handle value_node(value_desc.get_value_node());
-
action->set_param("canvas",get_canvas());
action->set_param("canvas_interface",etl::loose_handle<CanvasInterface>(this));
action->set_param("waypoint",waypoint);
void
CanvasInterface::waypoint_remove(synfigapp::ValueDesc value_desc,synfig::Waypoint waypoint)
{
+ ValueNode::Handle value_node();
+ waypoint_remove(value_desc.get_value_node(), waypoint);
+}
+
+void
+CanvasInterface::waypoint_remove(ValueNode::Handle value_node,synfig::Waypoint waypoint)
+{
Action::Handle action(Action::create("waypoint_remove"));
assert(action);
if(!action)
return;
- ValueNode::Handle value_node(value_desc.get_value_node());
-
action->set_param("canvas",get_canvas());
action->set_param("canvas_interface",etl::loose_handle<CanvasInterface>(this));
action->set_param("waypoint",waypoint);