взял, и вместо них приделал каждому виджету свойства «box-group-width» и «box-group-height». у всех «самых верхних» виджетов с одинаковым значением свойства будет одинаковая ширина/высота (выравнивается по максимальному значению).
лично мне кажется, что это проще в использовании, мощнее, и — что самое главное — почти не раздуло код layouter'а.
чинятся, как я написал, только «самые верхние» виджеты. то есть, если у виджета есть дети, у которых та же самая группа — на это кладётся толстый хуй. потому что это, как понимаете, удовлетворить невозможно, и это точно ошибка в описании UI.
самое хорошее в этом всём то, что вызов `layout()` не требует выделений памяти, поэтому, например, окошки можно спокойно рисовать в игровом цикле, менять при этом их размеры и всё такое — GC внезапно не выскочит.
вся функция раскладывания — меньше двухсот строк, состоит из четырёх отдельных частей (которые можно было выделить в отдельные функции, но нахера?). сначала считает свободное место, потом раскидывает его по flex-ящикам, потом чинит группы (если надо), потом устанавливает координаты. всё это простые циклы, логика прозрачная и понятная. и позволяет строить любые морды, включая и формы типа «метка: поле ввода».