Author: Carlos Lopez <[email protected]>
Date: Sun Dec 11 21:14:15 2011 +0100
Fix crash when inserting an item on a generic empty dynamic list.
---
synfig-core/src/synfig/valuenode_dynamiclist.cpp | 83 ++++++++++++++++------
1 files changed, 61 insertions(+), 22 deletions(-)
diff --git a/synfig-core/src/synfig/valuenode_dynamiclist.cpp
b/synfig-core/src/synfig/valuenode_dynamiclist.cpp
index 710f0fe..fb0ea83 100644
--- a/synfig-core/src/synfig/valuenode_dynamiclist.cpp
+++ b/synfig-core/src/synfig/valuenode_dynamiclist.cpp
@@ -138,62 +138,101 @@ ValueNode_DynamicList::ListEntry
ValueNode_DynamicList::create_list_entry(int index, Time time, Real origin)
{
ValueNode_DynamicList::ListEntry ret;
-
-
+ int c(link_count());
synfig::ValueBase prev,next;
- index=index%link_count();
+ if(c)
+ index=index%c;
+ else
+ index=0;
assert(index>=0);
ret.index=index;
ret.set_parent_value_node(this);
- next=(*list[index].value_node)(time);
-
- if(index!=0)
- prev=(*list[index-1].value_node)(time);
- else
+ if(c)
{
- if(get_loop())
- prev=(*list[link_count()-1].value_node)(time);
+ next=(*list[index].value_node)(time);
+
+ if(index!=0)
+ prev=(*list[index-1].value_node)(time);
else
{
- prev=next;
+ if(get_loop())
+ prev=(*list[link_count()-1].value_node)(time);
+ else
+ {
+ prev=next;
+ }
}
}
-
switch(get_contained_type())
{
case ValueBase::TYPE_VECTOR:
{
- Vector a(prev.get(Vector())), b(next.get(Vector()));
- ret.value_node=ValueNode_Const::create((b-a)*origin+a);
+ if(c)
+ {
+ Vector a(prev.get(Vector())), b(next.get(Vector()));
+ ret.value_node=ValueNode_Const::create((b-a)*origin+a);
+ }
+ else
+ {
+ ret.value_node=ValueNode_Const::create(Vector());
+ }
break;
}
case ValueBase::TYPE_REAL:
{
- Real a(prev.get(Real())), b(next.get(Real()));
- ret.value_node=ValueNode_Const::create((b-a)*origin+a);
+ if(c)
+ {
+ Real a(prev.get(Real())), b(next.get(Real()));
+ ret.value_node=ValueNode_Const::create((b-a)*origin+a);
+ }
+ else
+ {
+ ret.value_node=ValueNode_Const::create(Real());
+ }
break;
}
case ValueBase::TYPE_COLOR:
{
- Color a(prev.get(Color())), b(next.get(Color()));
- ret.value_node=ValueNode_Composite::create((b-a)*origin+a);
+ if(c)
+ {
+ Color a(prev.get(Color())), b(next.get(Color()));
+
ret.value_node=ValueNode_Composite::create((b-a)*origin+a);
+ }
+ else
+ {
+ ret.value_node=ValueNode_Const::create(Color());
+ }
break;
}
case ValueBase::TYPE_ANGLE:
{
- Angle a(prev.get(Angle())), b(next.get(Angle()));
- ret.value_node=ValueNode_Const::create((b-a)*origin+a);
+ if(c)
+ {
+ Angle a(prev.get(Angle())), b(next.get(Angle()));
+ ret.value_node=ValueNode_Const::create((b-a)*origin+a);
+ }
+ else
+ {
+ ret.value_node=ValueNode_Const::create(Angle());
+ }
break;
}
case ValueBase::TYPE_TIME:
{
- Time a(prev.get(Time())), b(next.get(Time()));
- ret.value_node=ValueNode_Const::create((b-a)*origin+a);
+ if(c)
+ {
+ Time a(prev.get(Time())), b(next.get(Time()));
+ ret.value_node=ValueNode_Const::create((b-a)*origin+a);
+ }
+ else
+ {
+ ret.value_node=ValueNode_Const::create(Time());
+ }
break;
}
default:
------------------------------------------------------------------------------
Learn Windows Azure Live! Tuesday, Dec 13, 2011
Microsoft is holding a special Learn Windows Azure training event for
developers. It will provide a great way to learn Windows Azure and what it
provides. You can attend the event by watching it streamed LIVE online.
Learn more at http://p.sf.net/sfu/ms-windowsazure
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl