Содержание Список структур

XSizeHints - геометрические параметры окна

       Эта структура хранит данные, описывающие размер окна и его поведение при смене размера.

Формат структуры:

    typedef struct {
	long flags;
	int x, y;           /* Больше не используется */
	int width, height;  /* Больше не используется */
	int min_width, min_height;
	int max_width, max_height;
	int width_inc, height_inc;
	struct {
	    int x;  /* числитель */
	    int y;  /* знаменатель */
	} min_aspect, max_aspect;
	int base_width, base_height;
	int win_gravity;
    } XSizeHints;

       Возможно, в будущем к этой структуре будут добавлены дополнительные поля.

       Поле flags представляет собой битовую маску обозначает, какие из полей этой структуры задействованы. Один бит соответствует конкретному полю структуры. Вариация полей достигается логическим сложением небходимых разрядов. Для каждого разряда определено символьное название:

#define   USPosition    (1L << 0)     /* x, y (запрос пользователя)*/
#define   USSize        (1L << 1)     /* width, height (запроc пользователя)*/
#define   PPosition     (1L << 2)     /* x, y */
#define   PSize         (1L << 3)     /* width, height */
#define   PMinSize      (1L << 4)     /* min_width, min_height */
#define   PMaxSize      (1L << 5)     /* max_width, max_height */
#define   PResizeInc    (1L << 6)     /* width_inc, height_inc */
#define   PAspect       (1L << 7)     /* min_aspect, max_aspect */
#define   PBaseSize     (1L << 8)     /* base_width, base_height */
#define   PWinGravity   (1L << 9)     /* win_gravity */
#define   PAllHints     (PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect)

       Несмотря на то, что определена такая маска как PAllHints, пользоваться ею крайне не рекомендуется. Это связано с тем, что в будущем возможно расширение структуры и введение дополнительных масок. В этом случае при использовании маски PAllHints будет подразумеваться использование этих расширенных полей, а значения на самом деле заполнены не будут и в итоге возможна некорректная работа программы.

       Поля x, y, width и height более не используются и оставлены в структуре лишь по соображениям совместимости.

       Поля min_width и min_height указывают минимальные размеры по горизонтали и вертикали, при которых возможна работа с приложением.

       Поля max_width и max_height указывают максимальный размер окна.

       Поля width_inc и height_inc указывают шаг изменения размера окна. Эти поля, к примеру, можно удачно применить в следующих случах:

       Поля min_aspect и max_aspect вычисляются как отношение x и y. Они позволяют приложению указать диапазон допустимых значений пропорций размеров окна.

       base_width и base_height указывают желаемый размер окна.

       Поле win_gravity определяет привязку окна к какому-либо элементу периметра родительского окна. В случае смены размера родительского окна расстояние от окна до элемента периметра родительского окна останется неизменным. Это поле является достаточно мощным инструментом при дизайне сложных окон. Значения для этого поля определены в символьном виде следующим образом:

       Будьте внимательны при заполнении полей. Указание маски в флаге и незаполнение соотвествующего поля может привести к неадекватному поведению окна. Также в оконном менеджере могут быть не реализованными некоторые возможности и он не будет обрабатывать некоторые из полей.

См. также: XSetWMProperties, XSetWMNormalHints.


Содержание Список структур