Чтение онлайн

на главную - закладки

Жанры

Программирование в X Window средствами Free Pascal

Семериков С. А.

Шрифт:

• UnmapGravity - подокна удаляются с экрана; окну посылается событие UnmapNotify, в ответ на которое оно может переместить свои подокна и показать их с помощью процедуры XMapSubWindow;

• StaticGravity - подокна остаются на месте по отношению к главному (корневому) окну сервера;

• NorthWestGravity - устанавливается по умолчанию; соответствует смещению (0, 0);

• NorthGravity - смещение (H/2, 0);

• NorthEastGravity - смещение (H, 0);

• WestGravity - смещение (0, V/2);

• CenterGravity - смещение (H/2, V/2);

• EastGravity - смещение (H, V/2);

• SouthWestGravity - смещение (0, V);

• SouthGravity - смещение (H/2, V);

• SouthEastGravity - смещение (H, V).

Автоматическое сохранение содержимого окна, когда его часть перекрывается другими окнами, или, когда окно удаляется с экрана, определяется параметрами backing_store, backing_planes и backing_pixel. Сохраненные данные могут использоваться для восстановления окна, что значительно быстрее, чем его перерисовка программой в ответ на событие Expose. Параметр backing_store имеет следующие возможные значения:

• NotUseful (устанавливается по умолчанию) - серверу не рекомендуется сохранять содержимое окна;

• WhenMapped - серверу рекомендуется спасти содержимое невидимых частей окна, когда окно показывается на экране;

• Always - серверу рекомендуется сохранить содержимое окна даже, если оно не показано на экране.

Сохранение изображений требует, как правило, довольно большого расхода памяти. Атрибуты backing_planes и backing_pixel призваны уменьшить этот расход. Первый из указанных параметров говорит серверу, какие плоскости изображения надо сохранять; backing_pixel означает, какой цвет использовать при восстановлении изображения в тех плоскостях, которые не сохранялись. По умолчанию backing_planes - маска, состоящая из единиц, а backing_pixel равно 0.

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

Когда обрабатывает (или не обрабатывает) событие, последнее может быть передано его родительскому окну. Атрибут do_not_propagate_mask (по умолчанию 0) говорит и о том, какие события не должны доходить до родителей.

Изменение размеров окна и его положения на экране контролируется атрибутом override_redirect. Если он равен False, то размер окна и его положение меняются с помощью менеджера окон. Если же он равен True, то окно само решает, где ему быть, и какую ширину и высоту иметь.

Цветовую гамму окна задает параметр colormap. Значение по умолчанию - CopyFromParent, которое говорит, что окно использует палитру своего непосредственного родителя.

Теперь рассмотрим "неизменяемые" параметры окна. Строго говоря, атрибуты, о которых пойдет речь, нельзя назвать неизменяемыми. Некоторые из них могут меняться сервером или менеджером окон. Но для обычных программ-клиентов они действительно являются таковыми.

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

Ширина края окна определяется параметром border_width.

Маска, говорящая о том, какие события выбраны для передачи окну породившим его клиентом, содержится в поле флагов your_event_mask. Значение параметра образуется комбинацией флагов, идентифицирующих события.

Информация о дисплее, на котором показано окно, содержится в структуре Visual, на которую показывает поле visual. Эти данные, как правило, не обрабатываются обычными программами-клиентами (заметим, что для получения информации о дисплее, в системе предусмотрена процедура XGetVisualInfo).

Класс окна сообщает поле class. Возможные значения: InputOutput и InputOnly.

Число цветовых плоскостей дисплея (число бит-на-пиксел) помещается в поле depth.

На информацию об экране, на котором помещается окно, указывает поле screen. Она, как правило, не используется обычными программами.

Идентификатор главного (корневого) окна экрана, на котором помещается окно, находится в поле root.

Если окно имеет палитру, и она в настоящее время активна, то поле map_installed равно True, в противном случае - False.

Видно в настоящее время окно на экране или нет, сообщает атрибут map_state.

Маска всех событий, выбранных всеми программами для данного окна, содержится в атрибуте all_event_mask. Дело в том, что окно обрабатывается не только порождающим его клиентом, но, возможно, и другими приложениями, например, менеджером окон.

Мы рассказали о том, как получить атрибуты окна, и что они означают. Теперь рассмотрим, как их изменить. Для этого можно использовать несколько процедур X Window, основной из которых является XChangeWindowAttributes, имеющая следующий прототип:

function XChangeWindowAttributes(prDisplay: PDisplay;
nWnd: TWindow; nValueMask: cardinal;
prWinAttr: PXSetWindowAttributes): longint; cdecl; external;

Требуемые установки атрибутов передаются через аргумент prWinAttr. Он указывает на переменную типа TXSetWindowAttributes. Ее поля те же, что и соответствующие поля TXWindowAttributes. Разница заключается лишь в разных именах некоторых из них. Так, поле your_event_mask в TXWindowAttributes соответствует полю event_mask в TXSetWindowAttributes.

Поделиться:
Популярные книги

Я все еще не царь. Книга XXVI

Дрейк Сириус
26. Дорогой барон!
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Я все еще не царь. Книга XXVI

Том 5. Литургия мне

Сологуб Федор Кузьмич
5. Собрание сочинений в восьми томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 5. Литургия мне

Генрик Сенкевич. Собрание сочинений. Том 6-7

Сенкевич Генрик
6. Собрание сочинений в девяти томах
Проза:
историческая проза
5.00
рейтинг книги
Генрик Сенкевич. Собрание сочинений. Том 6-7

Беседы

Агеев Александр Иванович
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Беседы

Газлайтер. Том 23

Володин Григорий Григорьевич
23. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
Газлайтер. Том 23

Роза ветров

Кас Маркус
6. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Роза ветров

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
6.25
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35

Фрегат Звенящий (сборник)

Крапивин Владислав Петрович
24. Владислав Крапивин собрание сочинений
Детские:
детская фантастика
5.00
рейтинг книги
Фрегат Звенящий (сборник)

Шайтан Иван 6

Тен Эдуард
6. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
7.43
рейтинг книги
Шайтан Иван 6

Лоенгрин, рыцарь Лебедя

Никитин Юрий Александрович
Фантастика:
фэнтези
боевая фантастика
5.50
рейтинг книги
Лоенгрин, рыцарь Лебедя

"Фантастика 2024-21". Компиляция. Книги 1-21

Суржевская Марина
Фантастика 2024. Компиляция
Фантастика:
боевая фантастика
детективная фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2024-21. Компиляция. Книги 1-21

Я до сих пор царь. Книга XXXII

Дрейк Сириус
32. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор царь. Книга XXXII

Я уже князь. Книга XIX

Дрейк Сириус
19. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.50
рейтинг книги
Я уже князь. Книга XIX

Я все еще барон

Дрейк Сириус
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Я все еще барон