When converting a gradient to be "Two Tone", take the two colors from either end...
authordooglus <dooglus@1f10aa63-cdf2-0310-b900-c93c546f37ac>
Sat, 8 Mar 2008 14:38:31 +0000 (14:38 +0000)
committerdooglus <dooglus@1f10aa63-cdf2-0310-b900-c93c546f37ac>
Sat, 8 Mar 2008 14:38:31 +0000 (14:38 +0000)
git-svn-id: http://svn.voria.com/code@1888 1f10aa63-cdf2-0310-b900-c93c546f37ac

synfig-core/trunk/src/synfig/valuenode_twotone.cpp
synfig-core/trunk/src/synfig/valuenode_twotone.h

index f64e847..7148502 100644 (file)
@@ -53,34 +53,31 @@ using namespace synfig;
 
 /* === M E T H O D S ======================================================= */
 
-synfig::ValueNode_TwoTone::ValueNode_TwoTone():LinkableValueNode(synfig::ValueBase::TYPE_GRADIENT)
+synfig::ValueNode_TwoTone::ValueNode_TwoTone(const ValueBase &value):LinkableValueNode(synfig::ValueBase::TYPE_GRADIENT)
 {
-       set_link("color1",ValueNode_Const::create(Color::black()));
-       set_link("color2",ValueNode_Const::create(Color::white()));
+       switch(value.get_type())
+       {
+       case ValueBase::TYPE_GRADIENT:
+               set_link("color1",ValueNode_Const::create(value.get(Gradient())(0)));
+               set_link("color2",ValueNode_Const::create(value.get(Gradient())(1)));
+               break;
+       default:
+               throw Exception::BadType(ValueBase::type_local_name(value.get_type()));
+       }
+
        DCAST_HACK_ENABLE();
 }
 
 LinkableValueNode*
 ValueNode_TwoTone::create_new()const
 {
-       return new ValueNode_TwoTone();
+       return new ValueNode_TwoTone(get_type());
 }
 
 ValueNode_TwoTone*
 ValueNode_TwoTone::create(const ValueBase& x)
 {
-       ValueBase::Type id(x.get_type());
-       if(id!=ValueBase::TYPE_GRADIENT)
-       {
-               assert(0);
-               throw runtime_error(String(_("Two-Tone"))+_(":Bad type ")+ValueBase::type_local_name(id));
-       }
-
-       ValueNode_TwoTone* value_node=new ValueNode_TwoTone();
-
-       assert(value_node->get_type()==id);
-
-       return value_node;
+       return new ValueNode_TwoTone(x);
 }
 
 synfig::ValueNode_TwoTone::~ValueNode_TwoTone()
index 83e161d..fb5a58b 100644 (file)
 
 namespace synfig {
 
-struct ValueNode_TwoTone : public LinkableValueNode
+class ValueNode_TwoTone : public LinkableValueNode
 {
-       typedef etl::handle<ValueNode_TwoTone> Handle;
-       typedef etl::handle<const ValueNode_TwoTone> ConstHandle;
-
-protected:
-
-       ValueNode_TwoTone();
-
-private:
-
        ValueNode::RHandle ref_a;
        ValueNode::RHandle ref_b;
 
+       ValueNode_TwoTone(const ValueBase &value);
+
 public:
 
-       virtual ~ValueNode_TwoTone();
+       typedef etl::handle<ValueNode_TwoTone> Handle;
+       typedef etl::handle<const ValueNode_TwoTone> ConstHandle;
 
-       virtual bool set_link_vfunc(int i,ValueNode::Handle x);
+       virtual ~ValueNode_TwoTone();
 
        virtual ValueNode::LooseHandle get_link_vfunc(int i)const;
 
@@ -69,16 +63,16 @@ public:
        virtual String get_name()const;
        virtual String get_local_name()const;
 
-//     static bool check_type(const ValueBase::Type &type);
-
+protected:
        LinkableValueNode* create_new()const;
+       virtual bool set_link_vfunc(int i,ValueNode::Handle x);
 
 public:
        using synfig::LinkableValueNode::get_link_vfunc;
 
        using synfig::LinkableValueNode::set_link_vfunc;
        static bool check_type(ValueBase::Type type);
-       static ValueNode_TwoTone* create(const ValueBase &x=ValueBase::TYPE_GRADIENT);
+       static ValueNode_TwoTone* create(const ValueBase &x);
 }; // END of class ValueNode_TwoTone
 
 }; // END of namespace synfig