void Layout::add_constraint(Widget &src, ConstraintType type, Widget &tgt)
{
+ if(&src==&tgt)
+ throw InvalidParameterValue("Can't add a self-referencing constraint");
+
Slot &src_slot = get_slot_for_widget(src);
Slot &tgt_slot = get_slot_for_widget(tgt);
Pointers &ptrs = pointers[dir&VERTICAL];
LinearProgram linprog(slots.size()*5+1);
+ float weight = slots.size();
for(list<Slot *>::iterator i=slots.begin(); i!=slots.end(); ++i)
{
- linprog.get_object_row()[(*i)->index*5] = 0.1*((*i)->*(ptrs.packing)).gravity;
- linprog.get_object_row()[(*i)->index*5+1] = (((*i)->*(ptrs.packing)).expand ? 5 : -1);
+ linprog.get_object_row()[(*i)->index*5] = ((*i)->*(ptrs.packing)).gravity/weight;
+ linprog.get_object_row()[(*i)->index*5+1] = (((*i)->*(ptrs.packing)).expand ? weight : -1);
{
LinearProgram::Row row = linprog.add_row();