**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 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
#include <synfig/string.h>
#include <synfig/layer.h>
#include <synfig/value.h>
+#include <synfig/valuenode_animated.h>
#include <synfig/valuenode_const.h>
#include <synfig/canvas.h>
// Info for ValueNode parent
synfig::ValueNode::Handle parent_value_node;
- int index;
+ int index; // -2 if it's a waypoint, -1 if it's const, >=0 if it's LinkableValueNode
+ synfig::Time waypoint_time;
// Info for exported ValueNode
synfig::Canvas::Handle canvas;
return false;
if((parent_value_node||rhs.parent_value_node) && parent_value_node!=rhs.parent_value_node)
return false;
- if((index>-1||rhs.index>-1) && index!=rhs.index)
+ if(index!=rhs.index)
return false;
return true;
}
// parent_value_node(parent_value_node),
// index(parent_value_node->get_link_index_from_name(param_name)) { }
+ ValueDesc(synfig::ValueNode_Animated::Handle parent_value_node,synfig::Time waypoint_time):
+ parent_value_node(parent_value_node),
+ index(-2),
+ waypoint_time(waypoint_time) { }
+
ValueDesc(synfig::Canvas::Handle canvas,const synfig::String& name):
name(name),
canvas(canvas) { }
bool parent_is_value_node()const { return (bool)parent_value_node; }
bool parent_is_linkable_value_node()const { return parent_is_value_node() && index>=0; }
bool parent_is_value_node_const()const { return parent_is_value_node() && index==-1; }
+ bool parent_is_waypoint()const { return parent_is_value_node() && index==-2; }
bool parent_is_canvas()const { return (bool)canvas; }
bool is_value_node()const { return parent_is_value_node() || parent_is_canvas() || (parent_is_layer_param() && (bool)layer->dynamic_param_list().count(name)); }
synfig::ValueNode::Handle get_parent_value_node()const { assert(parent_is_value_node()); return parent_value_node; }
int get_index()const { assert(parent_is_linkable_value_node()); return index; }
+ synfig::Time get_waypoint_time()const { assert(parent_is_waypoint()); return waypoint_time; }
const synfig::String& get_value_node_id()const { assert(parent_is_canvas()); return name; }
if(parent_is_layer_param() && layer->dynamic_param_list().count(name))
return layer->dynamic_param_list().find(name)->second;
if(parent_is_linkable_value_node())
- return synfig::LinkableValueNode::Handle::cast_reinterpret(parent_value_node)->get_link(index);
+ return (synfig::LinkableValueNode::Handle::cast_reinterpret(parent_value_node))->get_link(index);
// return reinterpret_cast<synfig::LinkableValueNode*>(parent_value_node.get())->get_link(index);
+ if(parent_is_value_node_const())
+ return parent_value_node;
+ if(parent_is_waypoint())
+ return (synfig::ValueNode_Animated::Handle::cast_reinterpret(parent_value_node))->find(waypoint_time)->get_value_node();
return 0;
}
get_value(synfig::Time time=0)const
{
// if the value is constant, return that constant value (at *any* time, it doesn't matter which)
- if(parent_is_value_node_const() && parent_value_node)
+ if(parent_is_value_node_const())
return (*parent_value_node)(0);
if(is_value_node() && get_value_node())
return (*get_value_node())(time);