Author: Carlos Lopez <[email protected]>
Date: Sun Aug 28 22:04:22 2011 +0200
Introduce a new ValueNode bool variable 'homogeneous' to be used as false when
loading old files.
---
.../src/modules/mod_geometry/advanced_outline.cpp | 10 ++++++++++
.../src/modules/mod_geometry/advanced_outline.h | 1 +
synfig-core/src/synfig/layer.cpp | 6 +++---
synfig-core/src/synfig/layer.h | 2 +-
synfig-core/src/synfig/valuenode.cpp | 10 ++++++----
synfig-core/src/synfig/valuenode.h | 9 +++++----
synfig-core/src/synfig/valuenode_animated.cpp | 4 ++--
.../src/synfigapp/actions/valuedescset.cpp | 2 +-
8 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
index 3c415af..81a13dc 100644
--- a/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
+++ b/synfig-core/src/modules/mod_geometry/advanced_outline.cpp
@@ -890,6 +890,16 @@ Advanced_Outline::set_version(const synfig::String &ver)
return true;
}
+bool
+Advanced_Outline::connect_dynamic_param(const String& param,
etl::loose_handle<ValueNode> value_node, bool homogeneous)
+{
+ if(old_version)
+ return Layer::connect_dynamic_param(param, value_node, false);
+ return Layer::connect_dynamic_param(param, value_node, homogeneous);
+}
+
+
+
ValueBase
Advanced_Outline::get_param(const String& param)const
{
diff --git a/synfig-core/src/modules/mod_geometry/advanced_outline.h
b/synfig-core/src/modules/mod_geometry/advanced_outline.h
index 47ae5e8..8c0ee59 100644
--- a/synfig-core/src/modules/mod_geometry/advanced_outline.h
+++ b/synfig-core/src/modules/mod_geometry/advanced_outline.h
@@ -81,6 +81,7 @@ public:
virtual void set_time(Context context, Time time, Vector pos)const;
virtual bool set_version(const synfig::String &ver);
//! Connects the parameter to another Value Node. Implementation for
this layer
+ virtual bool connect_dynamic_param(const String& param,
etl::loose_handle<ValueNode> value_node, bool homogeneous=true);
private:
diff --git a/synfig-core/src/synfig/layer.cpp b/synfig-core/src/synfig/layer.cpp
index 17a71da..5fa081f 100644
--- a/synfig-core/src/synfig/layer.cpp
+++ b/synfig-core/src/synfig/layer.cpp
@@ -237,7 +237,7 @@ Layer::set_description(const String& x)
}
bool
-Layer::connect_dynamic_param(const String& param, etl::loose_handle<ValueNode>
value_node)
+Layer::connect_dynamic_param(const String& param, etl::loose_handle<ValueNode>
value_node, bool homogeneous)
{
ValueNode::Handle previous(dynamic_param_list_[param]);
@@ -267,7 +267,7 @@ Layer::connect_dynamic_param(const String& param,
etl::loose_handle<ValueNode> v
String name(iter->first);
Vocab::iterator viter(vocab.find_paramdesc(name));
if(viter->is_bline_linked())
-
(iter->second)->set_bline(ValueNode::Handle(value_node));
+
(iter->second)->set_bline(ValueNode::Handle(value_node), homogeneous);
}
}
else // if new value node is not a bline
@@ -283,7 +283,7 @@ Layer::connect_dynamic_param(const String& param,
etl::loose_handle<ValueNode> v
Vocab vocab(get_param_vocab());
Vocab::iterator iter(vocab.find_paramdesc(param));
if(iter->is_bline_linked())
- parameter->set_bline(bline);
+ parameter->set_bline(bline,
homogeneous);
}
}
diff --git a/synfig-core/src/synfig/layer.h b/synfig-core/src/synfig/layer.h
index 5b6e20c..eb79d48 100644
--- a/synfig-core/src/synfig/layer.h
+++ b/synfig-core/src/synfig/layer.h
@@ -539,7 +539,7 @@ public:
virtual Handle simple_clone()const;
//! Connects the parameter to another Value Node
- virtual bool connect_dynamic_param(const String& param,
etl::loose_handle<ValueNode>);
+ virtual bool connect_dynamic_param(const String& param,
etl::loose_handle<ValueNode>, bool homogeneous=true);
//! Disconnects the parameter from any Value Node
virtual bool disconnect_dynamic_param(const String& param);
diff --git a/synfig-core/src/synfig/valuenode.cpp
b/synfig-core/src/synfig/valuenode.cpp
index 5b1416d..1473354 100644
--- a/synfig-core/src/synfig/valuenode.cpp
+++ b/synfig-core/src/synfig/valuenode.cpp
@@ -123,6 +123,7 @@ synfig::find_value_node(const GUID& guid)
ValueNode::ValueNode(ValueBase::Type type):type(type)
{
value_node_count++;
+ homogeneous_=true;
}
ValueNode::~ValueNode()
@@ -303,9 +304,10 @@ ValueNode::set_root_canvas(etl::loose_handle<Canvas> x)
}
void
-ValueNode::set_bline(ValueNode::Handle x)
+ValueNode::set_bline(ValueNode::Handle x, bool homogeneous)
{
bline_=x;
+ homogeneous_=homogeneous;
add_child(x.get());
changed();
}
@@ -383,7 +385,7 @@ LinkableValueNode::set_link(int i,ValueNode::Handle x)
}
void
-LinkableValueNode::set_bline(ValueNode::Handle x)
+LinkableValueNode::set_bline(ValueNode::Handle x, bool homogeneous)
{
Vocab::iterator iter;
int i=0;
@@ -392,12 +394,12 @@ LinkableValueNode::set_bline(ValueNode::Handle x)
{
if(iter->is_bline_linked())
{
- get_link(i)->set_bline(x);
+ get_link(i)->set_bline(x, homogeneous);
get_link(i)->add_child(x.get());
get_link(i)->changed();
}
}
- ValueNode::set_bline(x);
+ ValueNode::set_bline(x, homogeneous);
}
ValueNode::LooseHandle
LinkableValueNode::get_link(int i)const
diff --git a/synfig-core/src/synfig/valuenode.h
b/synfig-core/src/synfig/valuenode.h
index 95fbab3..415aa31 100644
--- a/synfig-core/src/synfig/valuenode.h
+++ b/synfig-core/src/synfig/valuenode.h
@@ -126,7 +126,8 @@ private:
etl::loose_handle<Canvas> root_canvas_;
//! The bline the value node is attached to. Used for BLine 'dependant'
Value Nodes
ValueNode::RHandle bline_;
-
+ //! Homogeneous: true when the bline linked value node is length
homogeneous
+ bool homogeneous_;
/*
-- ** -- S I G N A L S -------------------------------------------------------
*/
@@ -232,7 +233,7 @@ public:
//! Gets the bline of the Value Node
ValueNode::LooseHandle get_bline()const { return bline_; }
-
+ bool get_homogeneous()const { return homogeneous_; }
//! Sets the parent canvas for the Value Node
void set_parent_canvas(etl::loose_handle<Canvas> x);
@@ -240,7 +241,7 @@ public:
void set_root_canvas(etl::loose_handle<Canvas> x);
//! Sets the bline of the Value Node. Can be overrided by derived
classes
- virtual void set_bline(ValueNode::Handle x);
+ virtual void set_bline(ValueNode::Handle x, bool homogeneous=true);
//! Returns the relative ID of a Node when accessed form the \x Canvas
String get_relative_id(etl::loose_handle<const Canvas> x)const;
@@ -400,7 +401,7 @@ public:
bool set_link(const String &name,ValueNode::Handle x) { return
set_link(get_link_index_from_name(name),x); }
//! Sets the bline.
//! Depending on the parameter vocabulary, it sets it to the parameter
too.
- virtual void set_bline(ValueNode::Handle x);
+ virtual void set_bline(ValueNode::Handle x, bool homogeneous);
//! Returns a Loose Handle to the Value Node based on the link's index
ValueNode::LooseHandle get_link(int i)const;
diff --git a/synfig-core/src/synfig/valuenode_animated.cpp
b/synfig-core/src/synfig/valuenode_animated.cpp
index 6562698..18a0b60 100644
--- a/synfig-core/src/synfig/valuenode_animated.cpp
+++ b/synfig-core/src/synfig/valuenode_animated.cpp
@@ -305,7 +305,7 @@ public:
{
// If it is bline linked...
ValueNode_BLine::Handle
bline(ValueNode_BLine::Handle::cast_dynamic(get_bline()));
- if(bline)
+ if(bline && get_homogeneous())
{
// ...change the Waypoints to be in the
homogeneous space.
for(iter=waypoint_list_.begin();iter!=waypoint_list_.end();iter++)
@@ -537,7 +537,7 @@ public:
Real value(ValueBase(ret).get(Real()));
// If it is bline linked...
ValueNode_BLine::Handle
bline(ValueNode_BLine::Handle::cast_dynamic(get_bline()));
- if(bline)
+ if(bline && get_homogeneous())
{
// ...change the Waypoints to be in the
homogeneous space.
value=hom_to_std( (*bline)(t).get_list(),
value, bline->get_loop());
diff --git a/synfig-studio/src/synfigapp/actions/valuedescset.cpp
b/synfig-studio/src/synfigapp/actions/valuedescset.cpp
index 471ee66..4cb12d3 100644
--- a/synfig-studio/src/synfigapp/actions/valuedescset.cpp
+++ b/synfig-studio/src/synfigapp/actions/valuedescset.cpp
@@ -671,7 +671,7 @@ Action::ValueDescSet::prepare()
if(value_desc.is_value_node())
{
if(value_desc.get_value_node()->get_bline())
-
value_node->set_bline(ValueNode_Const::Handle::cast_dynamic(value_desc.get_value_node())->get_bline());
+
value_node->set_bline(value_desc.get_value_node()->get_bline(),
value_desc.get_value_node()->get_homogeneous());
}
Action::Handle action;
if(!value_desc.is_value_node())
------------------------------------------------------------------------------
EMC VNX: the world's simplest storage, starting under $10K
The only unified storage solution that offers unified management
Up to 160% more powerful than alternatives and 25% more efficient.
Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl