X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flayout.cpp;h=468d45ff213267a88c55dba98a2777e20dadb3b8;hb=a84c813859b6908c511b12ab7d82d6643f4f1a42;hp=35019482bcfbc1efe288be7cf6136723ce3f39a3;hpb=01eaaef90f4c56cd4669d2f621e3061a938753eb;p=libs%2Fgltk.git diff --git a/source/layout.cpp b/source/layout.cpp index 3501948..468d45f 100644 --- a/source/layout.cpp +++ b/source/layout.cpp @@ -1,3 +1,10 @@ +/* $Id$ + +This file is part of libmspgltk +Copyright © 2011 Mikko Rasa, Mikkosoft Productions +Distributed under the LGPL +*/ + #include #include "container.h" #include "layout.h" @@ -179,6 +186,9 @@ Layout::ConstraintType Layout::complement(ConstraintType type) 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); @@ -233,10 +243,11 @@ void Layout::solve_constraints(int dir) Pointers &ptrs = pointers[dir&VERTICAL]; LinearProgram linprog(slots.size()*5+1); + float weight = slots.size(); for(list::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();