В настоящее время я делаю порт Windows для Mozilla XUL. Мой подход не включает методы линейного программирования, как упомянул Стив, но это более объектно-ориентированный подход. Он основан на шаблонах дизайна Composite и Decorator.
Составной шаблон позволяет создавать элементы управления, которые имеют дочерние элементы управления, которые, в свою очередь, могут иметь своих собственных дочерних элементов. Элемент управления отвечает за размещение своих дочерних элементов управления в пределах своего назначенного клиентского прямоугольника.
Например, предположим, что вы хотите реализовать макет, который размещает дочерние элементы управления горизонтально. Затем алгоритм компоновки должен рассчитать ширину каждого дочернего элемента управления, чтобы рассчитать смещения по x для каждого дочернего элемента управления.
Расчет ширины контейнера выполняется путем возврата суммы ширин дочерних элементов управления.
Классы Decorator могут использоваться для добавления дополнительных свойств. Например, MarginDecorator может добавлять интервалы между дочерними элементами управления, ScrollDecorator может использовать полосы прокрутки и т. Д. *
Забавно, желаю удачи!