Вот как вы это делаете. Фокус в том, что виджет в FLTK может быть за пределами границ его родительской группы.
У вас есть 4 группы A, B, C и D. B и C являются дочерними элементами A. D является дочерним элементом C. Не показано, что виджет, который вы на самом деле хотите центрировать, называется E. E является ребенок C. A и E - это те, которые вы хотите увидеть на самом деле. B, C и D пусты, без границ, поэтому они невидимы. A и D изменяемы по размеру. Ничего другого. Центр E в A, не перекрываясь с D. E, будет частично за пределами C. Это трюк.
|--------------------------------------------|
| A |
||--------------------||--------------------||
|| || |-----| ||
|| B || C | D | ||
|| || |-----| ||
||--------------------||--------------------||
|--------------------------------------------|
Когда А изменяются, В и С будут изменены пропорционально и равномерно, так как нет изменяемых размеров детей А, и они имеют одинаковый размер. Происхождение C останется в центре A. Когда C будет изменено, E не будет изменяться, только D. Таким образом, E останется в том же положении относительно начала C, то есть относительно центра A .
Caveat 1: Я реализовал это в FLUID/FLTK 1.3.0, который, по общему признанию, является старым. С тех пор ситуация изменилась. Я не пытался проверить это на что-нибудь более недавнее.
Caveat 2: FLUID автоматически изменяет размер группы вложить виджеты внутри него всякий раз, когда вы перемещаете любой виджет. Это нарушает поведение центровки. Я нашел, что мне нужно изменить размер C через диалоговое окно FLUID до исходного размера, после любые изменения макета, каждый раз.