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

Reply via email to