From 72ff5dd05003d9daf338af91bb42c0541a0293ab Mon Sep 17 00:00:00 2001 From: dooglus Date: Sat, 8 Mar 2008 14:38:31 +0000 Subject: [PATCH] When converting a gradient to be "Two Tone", take the two colors from either end of the existing gradient to use as the two colors in the new ValueNode. git-svn-id: http://svn.voria.com/code@1888 1f10aa63-cdf2-0310-b900-c93c546f37ac --- synfig-core/trunk/src/synfig/valuenode_twotone.cpp | 29 ++++++++++------------ synfig-core/trunk/src/synfig/valuenode_twotone.h | 24 +++++++----------- 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/synfig-core/trunk/src/synfig/valuenode_twotone.cpp b/synfig-core/trunk/src/synfig/valuenode_twotone.cpp index f64e847..7148502 100644 --- a/synfig-core/trunk/src/synfig/valuenode_twotone.cpp +++ b/synfig-core/trunk/src/synfig/valuenode_twotone.cpp @@ -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() diff --git a/synfig-core/trunk/src/synfig/valuenode_twotone.h b/synfig-core/trunk/src/synfig/valuenode_twotone.h index 83e161d..fb5a58b 100644 --- a/synfig-core/trunk/src/synfig/valuenode_twotone.h +++ b/synfig-core/trunk/src/synfig/valuenode_twotone.h @@ -36,25 +36,19 @@ namespace synfig { -struct ValueNode_TwoTone : public LinkableValueNode +class ValueNode_TwoTone : public LinkableValueNode { - typedef etl::handle Handle; - typedef etl::handle 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 Handle; + typedef etl::handle 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 -- 2.7.4