X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fvaluenode_dynamiclist.cpp;h=a8c253a95a57c7261161762ae70b438889436849;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=7e8f378211dc588576bfe06e3df93c8533f3f209;hpb=b37086823c5bfee9c76f6b265584a414100963ef;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/valuenode_dynamiclist.cpp b/synfig-core/trunk/src/synfig/valuenode_dynamiclist.cpp index 7e8f378..a8c253a 100644 --- a/synfig-core/trunk/src/synfig/valuenode_dynamiclist.cpp +++ b/synfig-core/trunk/src/synfig/valuenode_dynamiclist.cpp @@ -6,6 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -576,6 +577,12 @@ ValueNode_DynamicList::create_from(const ValueBase &value) ValueNode_DynamicList* value_node(new ValueNode_DynamicList(value_list.front().get_type())); + // when creating a list of vectors, start it off being looped. + // I think the only time this is used if for creating polygons, + // and we want them to be looped by default + if (value_node->get_contained_type() == ValueBase::TYPE_VECTOR) + value_node->set_loop(true); + for(iter=value_list.begin();iter!=value_list.end();++iter) { ValueNode::Handle item(ValueNode_Const::create(*iter)); @@ -588,6 +595,9 @@ ValueNode_DynamicList::create_from(const ValueBase &value) ValueBase ValueNode_DynamicList::operator()(Time t)const { + if (getenv("SYNFIG_DEBUG_VALUENODE_OPERATORS")) + printf("%s:%d operator()\n", __FILE__, __LINE__); + std::vector ret_list; std::vector::const_iterator iter; @@ -621,6 +631,7 @@ bool ValueNode_DynamicList::set_link_vfunc(int i,ValueNode::Handle x) { assert(i>=0); + if((unsigned)i>=list.size()) return false; if(x->get_type()!=container_type) @@ -633,6 +644,7 @@ ValueNode::LooseHandle ValueNode_DynamicList::get_link_vfunc(int i)const { assert(i>=0); + if((unsigned)i>=list.size()) return 0; return list[i].value_node; @@ -647,7 +659,8 @@ ValueNode_DynamicList::link_count()const String ValueNode_DynamicList::link_local_name(int i)const { - assert(i>=0 && (unsigned)i=0 && i(create_new()); ret->set_guid(get_guid()^deriv_guid); std::vector::const_iterator iter; @@ -670,7 +683,7 @@ ValueNode_DynamicList::clone(const GUID& deriv_guid)const ListEntry list_entry(*iter); //list_entry.value_node=find_value_node(iter->value_node->get_guid()^deriv_guid).get(); //if(!list_entry.value_node) - list_entry.value_node=iter->value_node->clone(deriv_guid); + list_entry.value_node=iter->value_node->clone(deriv_guid); ret->add(list_entry); //ret->list.back().value_node=iter->value_node.clone(); } @@ -709,6 +722,13 @@ ValueNode_DynamicList::check_type(ValueBase::Type type) return type==ValueBase::TYPE_LIST; } +void +ValueNode_DynamicList::set_member_canvas(etl::loose_handle canvas) +{ + for (vector::iterator iter = list.begin(); iter != list.end(); iter++) + iter->value_node->set_parent_canvas(canvas); +} + ValueBase::Type ValueNode_DynamicList::get_contained_type()const { @@ -718,8 +738,7 @@ ValueNode_DynamicList::get_contained_type()const LinkableValueNode* ValueNode_DynamicList::create_new()const { - assert(0); - return 0; + return new ValueNode_DynamicList(container_type); } int