Add my copyright to files I've modified.
[synfig.git] / synfig-core / trunk / src / synfig / valuenode_animated.cpp
index b211da0..d354f97 100644 (file)
@@ -2,10 +2,11 @@
 /*!    \file valuenode_animated.cpp
 **     \brief Template File
 **
-**     $Id: valuenode_animated.cpp,v 1.1.1.1 2005/01/04 01:23:15 darco Exp $
+**     $Id$
 **
 **     \legal
 **     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007 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
@@ -428,7 +429,8 @@ public:
                                                value_type Pn; Pn=after_next->get_value().get(T());     // P_{i+1}
 
                                                // TCB
-                                               value_type vect(static_cast<value_type>(subtract_func(Pc,Pp)*(((1.0-t)*(1.0-c)*(1.0+b))/2.0)+(Pn-Pc)*(((1.0-t)*(1.0+c)*(1.0-b))/2.0)));
+                                               value_type vect(static_cast<value_type>(subtract_func(Pc,Pp) * (((1.0-t)*(1.0-c)*(1.0+b))/2.0) +
+                                                                                                                                                        (Pn-Pc) * (((1.0-t)*(1.0+c)*(1.0-b))/2.0)));
 
                                                // Tension Only
                                                //value_type vect((value_type)((Pn-Pp)*(1.0-t)));
@@ -455,17 +457,30 @@ public:
                                        // Adjust for time
                                        const float timeadjust(0.5);
 
-                                       if(!curve_list.empty())
-                                               curve.second.t1()*=(curve.second.get_dt()*(timeadjust+1))/(curve.second.get_dt()*timeadjust+curve_list.back().second.get_dt());
-                                       if(after_next!=waypoint_list_.end())
-                                               curve.second.t2()*=(curve.second.get_dt()*(timeadjust+1))/(curve.second.get_dt()*timeadjust+(after_next->get_time()-next->get_time()));
-
                                        if(iter_get_after==INTERPOLATION_HALT)
                                                curve.second.t1()*=0;
+                                       // if this isn't the first curve
+                                       else if(iter_get_after != INTERPOLATION_LINEAR && !curve_list.empty())
+                                               // adjust it for the curve that came before it
+                                               curve.second.t1() *=
+                                                       //                  (time span of this curve) * 1.5
+                                                       // -----------------------------------------------------------------
+                                                       // ((time span of this curve) * 0.5) + (time span of previous curve)
+                                                       (curve.second.get_dt()*(timeadjust+1)) /
+                                                       (curve.second.get_dt()*timeadjust + curve_list.back().second.get_dt());
 
                                        if(next_get_before==INTERPOLATION_HALT)
                                                curve.second.t2()*=0;
-                               }
+                                       // if this isn't the last curve
+                                       else if(next_get_before != INTERPOLATION_LINEAR && after_next!=waypoint_list_.end())
+                                               // adjust it for the curve that came after it
+                                               curve.second.t2() *=
+                                                       //                (time span of this curve) * 1.5
+                                                       // -------------------------------------------------------------
+                                                       // ((time span of this curve) * 0.5) + (time span of next curve)
+                                                       (curve.second.get_dt()*(timeadjust+1)) /
+                                                       (curve.second.get_dt()*timeadjust+(after_next->get_time()-next->get_time()));
+                               } // not CONSTANT
                        }
 
                        // Set up the time to the default stuff
@@ -1027,7 +1042,7 @@ synfig::ValueNode_Animated::create(ValueBase::Type type)
                case ValueBase::TYPE_STRING:
                        return ValueNode_Animated::Handle(new _Constant<String>);
                case ValueBase::TYPE_GRADIENT:
-                       return ValueNode_Animated::Handle(new _Constant<Gradient>);
+                       return ValueNode_Animated::Handle(new _Hermite<Gradient>);
                case ValueBase::TYPE_BOOL:
                        return ValueNode_Animated::Handle(new _AnimBool);
                case ValueBase::TYPE_CANVAS: