X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fvaluenode_animated.cpp;h=e86f3b8e2416ca4fe89e213e01828c9fcba2c171;hb=c732f2078f9ed4393bff0e761beab709e49b6c4c;hp=aabf805db4f1fc681706004d93d85dc9a80d2676;hpb=cc54c38609ee9745ad678e5e9b9d7d2912be9c95;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/valuenode_animated.cpp b/synfig-core/trunk/src/synfig/valuenode_animated.cpp index aabf805..e86f3b8 100644 --- a/synfig-core/trunk/src/synfig/valuenode_animated.cpp +++ b/synfig-core/trunk/src/synfig/valuenode_animated.cpp @@ -6,6 +6,7 @@ ** ** \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 @@ -379,7 +380,7 @@ public: const Real& c(iter->get_continuity()); // Continuity const Real& b(iter->get_bias()); // Bias - // The folloing line works where the previous line fails. + // The following line works where the previous line fails. value_type Pp; Pp=curve_list.back().second.p1(); // P_{i-1} const value_type& Pc(curve.second.p1()); // P_i @@ -428,7 +429,8 @@ public: value_type Pn; Pn=after_next->get_value().get(T()); // P_{i+1} // TCB - value_type vect(static_cast(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(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); case ValueBase::TYPE_GRADIENT: - return ValueNode_Animated::Handle(new _Constant); + return ValueNode_Animated::Handle(new _Hermite); case ValueBase::TYPE_BOOL: return ValueNode_Animated::Handle(new _AnimBool); case ValueBase::TYPE_CANVAS: