X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fvaluenode_range.cpp;h=40104d034196636f1b9b3cb1d4a839110f511b3e;hb=2996b84ecd9cd8776441ac0388dc30257cd21929;hp=712c974e01daf9e6032ad6c862c3116202a131a6;hpb=241290ec883794d1579593182b337277f6ef5182;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/valuenode_range.cpp b/synfig-core/trunk/src/synfig/valuenode_range.cpp index 712c974..40104d0 100644 --- a/synfig-core/trunk/src/synfig/valuenode_range.cpp +++ b/synfig-core/trunk/src/synfig/valuenode_range.cpp @@ -123,7 +123,20 @@ synfig::ValueNode_Range::operator()(Time t)const switch(get_type()) { case ValueBase::TYPE_ANGLE: - return range((*min_)(t).get(Angle()), (*max_)(t).get(Angle()), (*link_)(t).get(Angle())); + { + Angle minimum = (* min_)(t).get(Angle()); + Angle maximum = (* max_)(t).get(Angle()); + Angle link = (*link_)(t).get(Angle()); + + // if link is between min and max, use it + if (Angle::deg((link-minimum).mod()).get() < Angle::deg((maximum-minimum).mod()).get()) + return link; + // otherwise use whichever of min and max is closest to link + else if (link.dist(minimum).abs() < link.dist(maximum).abs()) + return minimum; + else + return maximum; + } case ValueBase::TYPE_INTEGER: return range((*min_)(t).get(int()), (*max_)(t).get(int()), (*link_)(t).get(int())); case ValueBase::TYPE_REAL: