logo
Литература_1 / photon_old

Геометрия виджета

Вы можете рассматривать виджет, как картинку или, подмонтированную фотографию. Виджет закрепляется на раме, называемой рамкой (by a frame, called a border – велик и могуч английский язык. Прим. пер.). Для виджета рамка – это набор контуров и создающие эффект выпуклости фаски, которые могут быть нарисованы вокруг внешних сторон.

Часть виджета, используемая для рисования, называется канвой (canvas). Для PtWidget – это область внутри рамки виджета. Для PtBasic и его потомков канва – это область внутри рамки виджета и границ. Другие виджеты, такие как PtLabel, определяют другие границы. Границы, формирующие затемнение (matt) и затеняющие любую часть канвы, распространяются за пределы отсечённой части. Эта затенённая область иногда называется как отсечённая (clipping) область (см. диаграмму на рис. 4).

 Для наглядности на диаграмме канва и границы показаны различным цветом. В реальном виджете они одного цвета.

              1. Рис. 4. Анатомия виджета PtBasic

Для виджета рамка является необязательной. Она рисуется, только если виджет подсвечен (т.е. в его ресурсе Pt_ARG_FLAGS установлен флаг Pt_HIGHLIGHTED). Рамка состоит из различных необязательных компонентов, в зависимости от установок в ресурсе Pt_ARG_BASIG_FLAGS.

Компонентами, рассматривая их от самых наружных вовнутрь, являются:

Виджет имеет несколько важных атрибутов, определяющих геометрию этих элементов. Размеры виджета, Pt_ARG_DIM – это общий размер виджета, включая его границы.

              1. Рис. 5. Позиция и размеры виджета

Pt_ARG_MARGIN_WIDTH определяет ширину границы слева и справа от канвы, и Pt_ARG_MARGIN_HEIGHT определяет высоту границы над и под канвой. Эти ресурсы определены в PtBasic. Другие классы виджетов определяют свои собственные ресурсы границ, которые могут быть добавлены к ширине и высоте базовой границы. Например, виджет надписи (label widget) обеспечивает различные границы для левой, правой, верхней и нижней сторон виджета. Они добавляются к базовым ширине и высоте для определения объёма пространства, оставляемого на каждую сторону канвы. Начальной точкой виджета (в целях выполнения любой прорисовки или позициониования любого порождаемого виджета) является верхний левый угол канвы. Все координаты, определяемые для виджета, являются относительными этого начала, как координаты всех событий, получаемых виджетом. Например, если виджет является контейнером, позиции всех его "детей" являются относительными этой точки.

              1. Рис. 6. Начальная точка виджета и позиция его "ребёнка"

Для позиционирования "детей" контейнеры описаны только внешним краем рамки виджета. Позиция виджета содержится в ресурсе Pt_ARG_POS. Эта позиция является точкой в верхнем левом углу внешнего контура рамки виджета. Контейнер позиционирует своих детей выравниванием по этому ресурсу.

Доступ и модификация позиции и размеров виджета могут быть достигнуты одновременно использованием ресурса Pt_ARG_AREA, предоставляемого виджетом. Пространство виджета – это прямоугольник, определяемый позицией виджета и его размерами. Обычно оно не может быть вычислено до того, как виджет не будет реализован; Вы можете принудить виджет вычислить своё пространство вызовом PtExtentWidget( ); чтобы вынудить виджет и все его порождения вычислить свои пространства, необходимо вызвать PtExtentWidgetFamily( ). Как только пространство вычислено, Вы можете узнать его, получив данные ресурса Pt_ARG_EXTENT, или вызовом PtWidgetExtent( ).

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4