: Программирование в среде X Window на основе библиотеки Xlib :

С о д е р ж а н и е

Введение

I. Базовые понятия X Window
Характеристики X-окна
Менеджер окон
Свойства и атомы
Первый пример
События
Атрибуты окна
Операции над окнами

II. Текст и графика
Графический контекст
Характеристики графического контекста
Вывод текста, работа с шрифтами
Использование цвета
Битовые и пиксельные карты
Изменяем курсор мыши

III. Работа с внешними устройствами
Клавиатура
Мышь

IV. Ресурсы программ
Формат файла ресурсов
Доступ к ресурсам программ

V. Взаимодействие клиентов
Механизм свойств
Работаем с менеджером окон

VI. Дополнительная информация

VII. Литература

Характеристики графического контекста

Ниже перечисляются основные характеристики графического контекста и функции, меняющие их.

Режим рисования (поле Xfunction в структуре XGCValues) указывает, каким образом комбинируются при рисовании цвет графики и цвет изображения, на которое накладывается графика. Данное поле задает некоторую логическую функцию. Возможные значения:

  GXclear         0x0  0
  GXand           0x1  src AND dst
  GXandReverse    0x2  src AND NOT dst
  GXcopy          0x3  src
  GXandInverted   0x4  (NOT src) AND dst
  GXnoop          0x5  dst
  GXxor           0x6  src XOR dst
  GXor            0x7  src OR dst
  GXnor           0x8  (NOT src) AND (NOT dst)
  GXequiv         0x9  (NOT src) XOR dst
  GXinvert        0xa  NOT dst
  GXorReverse     0xb  src OR (NOT dst)
  GXcopyInverted  0xc  NOT src
  GXorInverted    0xd  (NOT src) OR dst
  GXnand          0xe  (NOT src) OR (NOT dst)
  GXset           0xf  1

По умолчанию Xfunction равно GXcopy. Устанавливается режим рисования с помощью функции XSetFunction().

Изменяемые цветовые плоскости. Каждый пиксель задается с помощью N бит. Биты с одним номером во всех пикселях образуют как бы плоскости, идущие параллельно экрану. Получить число плоскостей для конкретного дисплея можно с помощью функции XDisplayPlanes(). Поле plane_mask структуры графического контекста определяет, в каких плоскостях идет рисование при вызове функций X. Если бит поля установлен, то при рисовании соответствующая плоскость изменяется, в противном случае она не затрагивается.

Цвет переднего плана и фона (поля foreground и background) задают цвета, используемые при рисовании линий текста и других графических элементов. Устанавливаются значения указанных полей функциями XSetForeground() и XSetBackground() соответственно.

Атрибуты, влияющие на рисование линий. Шесть параметров определяют вид прямых, дуг и многоугольников, изображаемых с помощью X Window.

  1. Поле line_width задает толщину линии в пикселях. Нулевое значение поля соответствует тому, что линия должна быть толщиной в один пиксель и рисоваться с помощью наиболее быстрого алгоритма для данного устройства вывода.
  2. Поле line_style определяет тип линии. Возможные значения следующие:
  3. Параметр cap_style определяет вид линии в крайних точках, если ее ширина больше 1 пикселя. На рис. 1.4 приведены значения параметра и соответствующий вид конца линии.


    Рис. 1.4. Значения параметра cap_style графического контекста

  4. Поле join_style определяет, как соединяются линии друг с другом. На рис. 1.5 показаны соответствующие возможности. Параметр имеет смысл при толщине линии большей 1.


    Рис. 1.5. Значения параметра join_style графического контекста

  5. Если линия пунктирная, то поле dashes дает длину пунктира и промежутков в пикселях.
  6. Параметр dash_offset указывает, с какого места начинать рисование первой черточки пунктирной линии.

Для установки параметров линии используется функция XSetLineAttributes().

Шрифт. Поле font определяет шрифт, используемый для вывода текста. Задать этот параметр можно с помощью функции XSetFont().

Шаблоны, используемые для заполнения рисуемых фигур. Процесс рисования включает в себя два этапа. На первом определяются пиксели, которые должны быть закрашены. После этого цвет выделенных точек изменяется. Так, для линии входящие в нее пиксели определяются по специальному алгоритму, а потом закрашиваются, например, цветом переднего плана.

Способ закраски определяется полем fill_style. Он устанавливается функцией XSetFillStyle() и воздействует на все функции, рисующие линии, текст и фигуры. Исключение составляет случай, когда выводится линия, для которой значение line_width равно 0. Возможные значения параметра fill_style перечислены ниже.

Для задания полей tile и stipple можно использовать карты любого размера. На некоторых устройствах при определенных размерах рисование идет намного быстрее. Для получения таких размеров можно использовать функции XQueryBestSize(), XQueryBestStipple(), XQueryBestTile().

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

Режим заполнения дуг (поле arc_mode). Параметр задается функцией XSetArcMode() и влияет на вид фигур, рисуемых функциями XFillArc() и XFillArcs().

Влияние подокон на рисование графических примитивов определяется полем subwindow_mode. Оно устанавливается функцией XSetSubwindowMode() и имеет следующие значения:

Генерация запроса на перерисовку при копировании частей окон (поле graphics_exposures). Когда часть окна копируется куда-либо, то вполне вероятна ситуация, что исходное изображение перекрыто, возможно не полностью, другими окнами или недоступна по другим причинам. В этом случае может быть необходимо сообщить клиенту, в окно которого происходит копирование, что часть нового изображения не может быть получена простым переносом пикселей, а должна быть перерисована. Если поле graphics_exposures равно True, то X посылает при копировании следующее:

Если поле равно False, то событие не посылается. Устанавливается параметр функцией XSetGraphicsExposures().

Область отсечения (задается полями clip_mask, clip_x_origin, clip_y_origin). Это битовая карта, говорящая о том, какие пиксели выводятся, а какие нет при всех операциях рисования. Если бит карты установлен, то соответствующий пиксель появится в окне, а если бит сброшен, то пиксель будет пропущен. Положение в окне верхнего левого угла области отсечения определяется параметрами clip_x_origin и clip_y_origin.

Эти параметры устанавливаются функцией XSetClipOrigin(). Сама область отсечения задается с помощью функций XSetClipMask(), code>XSetClipRectangles() или XSetClipRegion().

Небольшой пример example4.c

<<< Содержание >>>