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