Распределение

Вторая фаза раскладки начинается с этого места. GtkWindow принимает решение о том, сколько места действительно доступно для ребенка, и передает свое решение ребенку. Это называется распределением ребенка, представленное следующей структурой: typedef struct _GtkAllocation GtkAllocation; struct _GtkAllocation { gint16 x; gint16 y; guint16 width; guint16 height; }

Элементы width и height идентичны GtkRequisition; они представляют размер виджета. GtkAllocation также включает координаты ребенка относительно его родителя. Структуры GtkAllocation присваиваются детям их родительским контейнером.

От виджетов требуется, чтобы они обращали внимание на GtkAllocation, передаваемый им. GtkRequisition всего лиш запрос; виджеты должны быть способными справляться с любым размером.

В приведенном описании процесса раскладки легко увидеть роль, которую играют контейнеры. Их работа состоит в том, чтобы собрать требование размера каждого ребенка в одно требование, передаваемое выше по дереву виджетов; затем разделить полученное распределение между своими детьми. Как это точно происходит -- зависит от конкретного контейнера.


Linux Land
2000-09-15