2014-09-11 3 views
1

Можете ли вы центрировать невидимый виджет в FLTK? Ссылки от this stackoverflow question, по-видимому, подразумевают ответ: нет. Для центрированного виджета с обеих сторон требуются изменяемые размеры виджетов, но в группе может быть только один изменяемый размер.Центрированный виджет в FLTK

(Извините за задавать вопросы и отвечать, но я искал во всем для этого и почти сдался, так что я думаю, что это будет полезно для других.)

ответ

0

Вот как вы это делаете. Фокус в том, что виджет в 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 до исходного размера, после любые изменения макета, каждый раз.

Смежные вопросы