X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fsynfigapp%2Fvalue_desc.h;h=ccc562a101a3d7fd46218c8745bdc12fe6e77844;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=5e7a73adf6494fdbd5b01f9975758846b1fe3ad3;hpb=14584123d5a0026ecc586d9aa4b34084651a626b;p=synfig.git diff --git a/synfig-studio/trunk/src/synfigapp/value_desc.h b/synfig-studio/trunk/src/synfigapp/value_desc.h index 5e7a73a..ccc562a 100644 --- a/synfig-studio/trunk/src/synfigapp/value_desc.h +++ b/synfig-studio/trunk/src/synfigapp/value_desc.h @@ -6,6 +6,7 @@ ** ** \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 @@ -31,6 +32,7 @@ #include #include #include +#include #include #include @@ -50,7 +52,8 @@ class ValueDesc // 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; @@ -68,7 +71,7 @@ public: 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; } @@ -94,6 +97,11 @@ public: // 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) { } @@ -111,6 +119,7 @@ public: 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)); } @@ -121,6 +130,7 @@ public: 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; } @@ -143,8 +153,12 @@ public: 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(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; } @@ -152,7 +166,7 @@ public: 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);