Author: Konstantin Dmitriev <[email protected]>
Date:   Thu Jan 10 20:32:07 2013 +0700

Enable reverse manipulations of Scale ValueNode for Real type control points

---

 synfig-core/src/synfig/valuenode_scale.cpp         |   17 +++++++++++++++++
 synfig-core/src/synfig/valuenode_scale.h           |    1 +
 .../src/synfigapp/actions/valuedescset.cpp         |    2 ++
 3 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/synfig-core/src/synfig/valuenode_scale.cpp 
b/synfig-core/src/synfig/valuenode_scale.cpp
index d800949..855ecd8 100644
--- a/synfig-core/src/synfig/valuenode_scale.cpp
+++ b/synfig-core/src/synfig/valuenode_scale.cpp
@@ -182,6 +182,23 @@ synfig::ValueNode_Scale::get_inverse(Time t, const 
synfig::Angle &target_value)
        return ValueBase();
 }
 
+synfig::ValueBase
+synfig::ValueNode_Scale::get_inverse(Time t, const synfig::Real &target_value) 
const
+{
+       Real scalar_value((*scalar)(t).get(Real()));
+       if(scalar_value==0)
+                       throw runtime_error(strprintf("ValueNode_Scale: 
%s",_("Attempting to get the inverse of a non invertible Valuenode")));
+       else
+               {
+                       switch (get_type())
+                       {
+                                       default:
+                                       return target_value / scalar_value;
+                       }
+               }
+       return ValueBase();
+}
+
 bool
 synfig::ValueNode_Scale::is_invertible(Time t) const
 {
diff --git a/synfig-core/src/synfig/valuenode_scale.h 
b/synfig-core/src/synfig/valuenode_scale.h
index a0e6dd0..d642b32 100644
--- a/synfig-core/src/synfig/valuenode_scale.h
+++ b/synfig-core/src/synfig/valuenode_scale.h
@@ -63,6 +63,7 @@ public:
        //! Returns the modified Link to match the target value at time t
        ValueBase get_inverse(Time t, const synfig::Vector &target_value) const;
        ValueBase get_inverse(Time t, const synfig::Angle &target_value) const;
+       ValueBase get_inverse(Time t, const synfig::Real &target_value) const;
 
        bool is_invertible(Time t)const;
 
diff --git a/synfig-studio/src/synfigapp/actions/valuedescset.cpp 
b/synfig-studio/src/synfigapp/actions/valuedescset.cpp
index 044969f..32442ff 100644
--- a/synfig-studio/src/synfigapp/actions/valuedescset.cpp
+++ b/synfig-studio/src/synfigapp/actions/valuedescset.cpp
@@ -342,6 +342,8 @@ Action::ValueDescSet::prepare()
                        new_value = scale_value_node->get_inverse(time, 
value.get(Angle()));
                else if(value.get_type() == ValueBase::TYPE_VECTOR)
                        new_value = scale_value_node->get_inverse(time, 
value.get(Vector()));
+               else if(value.get_type() == ValueBase::TYPE_REAL)
+                       new_value = scale_value_node->get_inverse(time, 
value.get(Real()));
                else
                        throw Error(_("Inverse manipulation of %s scale values 
not implemented in core."), value.type_name().c_str());
                Action::Handle action(Action::create("ValueDescSet"));


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to