X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Fsrc%2Fsynfig%2Fvaluenode_range.cpp;h=4c9b7288fb3ead5987b291969053246e6fb0a1e3;hb=2b2950e88fb6c4bfa36ec91eb86de33c6c27fafe;hp=c4107f8552067664b96f9c339546795807867ddd;hpb=eb7452cee3567a8124c7a0fc2b9e2b6ee854a001;p=synfig.git diff --git a/synfig-core/src/synfig/valuenode_range.cpp b/synfig-core/src/synfig/valuenode_range.cpp index c4107f8..4c9b728 100644 --- a/synfig-core/src/synfig/valuenode_range.cpp +++ b/synfig-core/src/synfig/valuenode_range.cpp @@ -57,6 +57,8 @@ using namespace synfig; synfig::ValueNode_Range::ValueNode_Range(const ValueBase &value): LinkableValueNode(value.get_type()) { + Vocab ret(get_children_vocab()); + set_children_vocab(ret); ValueBase::Type id(value.get_type()); switch(id) @@ -90,8 +92,6 @@ synfig::ValueNode_Range::ValueNode_Range(const ValueBase &value): assert(max_->get_type()==id); assert(link_->get_type()==id); assert(get_type()==id); - - DCAST_HACK_ENABLE(); } LinkableValueNode* @@ -159,6 +159,63 @@ synfig::ValueNode_Range::operator()(Time t)const return ValueBase(); } +synfig::ValueBase +synfig::ValueNode_Range::get_inverse(Time t, const synfig::Vector &target_value) const +{ + switch (get_type()) + { + case ValueBase::TYPE_INTEGER: + { + int max_value((*max_)(t).get(int())); + int min_value((*min_)(t).get(int())); + return std::max(min_value, std::min(max_value, int(target_value.mag()))); + } + case ValueBase::TYPE_REAL: + { + Real max_value((*max_)(t).get(Real())); + Real min_value((*min_)(t).get(Real())); + return std::max(min_value, std::min(max_value, target_value.mag())); + } + case ValueBase::TYPE_ANGLE: + { + Angle max_value((*max_)(t).get(Angle())); + Angle min_value((*min_)(t).get(Angle())); + Angle target_angle(Angle::tan(target_value[1],target_value[0])); + return target_angle>max_value?max_value:target_angle=Angle::rad(target_value).get() && Angle::rad(target_value).get()>=Angle::rad(minimum).get()) + return target_value; + else if (Angle::rad(minimum).get()>Angle::rad(target_value).get()) + return minimum; + else + return maximum; + } + return ValueBase(); +} + + bool ValueNode_Range::set_link_vfunc(int i,ValueNode::Handle value) { @@ -187,49 +244,6 @@ ValueNode_Range::get_link_vfunc(int i)const } } -int -ValueNode_Range::link_count()const -{ - return 3; -} - -String -ValueNode_Range::link_local_name(int i)const -{ - assert(i>=0 && i=0 && i