Программирование в X Window средствами Free Pascal - [11]
Следующий пример показывает процесс создания графического контекста, в котором устанавливаются два атрибута: цвет фона и цвет переднего плана.
…
>var
> prGC: TGC;
> rValues: TXGCValues;
> prDisplay: PDisplay;
> nScreenNum: integer;
…
> rValues.foreground:= XBlackPixel (prDisplay, nScreenNum);
> rValues.background:= XWhitePixel (prDisplay, nScreenNum);
…
> prGC:= XCreateGC(prDisplay, XRootWindow (prDisplay, nScreenNum), (GCForeground OR GCBackground), @rValues);
Вызов XCreateGC() - не единственный способ создания графического контекста. Так, например, новый контекст может быть получен из уже существующего GC с помощью XCopyGC().
Когда контекст порожден, его атрибуты могут изменяться процедурой XChangeGC(). Например:
>rValues.line_width:= 10;
>XChangeGC (prDisplay, prGC, GCLineWidth, @rValues);
Приведенный фрагмент кода меняет ширину линий, рисуемых с помощью графического контекста.
Для того, чтобы получить значение полей GC, используется процедура XGetGCValues().
1.2.2 Характеристики графического контекста
В предыдущем разделе мы говорили, что GC имеет ряд атрибутов, воздействующих на вывод изображений. Для текста это цвет и шрифт, для линий - цвет и толщина и т.д. Как уже упоминалось выше, атрибуты контекста задаются в момент его создания. Потом они могут меняться с помощью функции XChangeGC(). Кроме того, X поддерживает специальные функции для изменения параметров GC.
Ниже перечисляются основные характеристики графического контекста и процедуры, меняющие их.
Режим рисования (поле Xfunction в структуре TXGCValues) указывает, каким образом комбинируются при рисовании цвет графики и цвет изображения, на которое накладывается графика. Данное поле задает некоторую логическую функцию. Возможные значения:
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 определяет тип линии. Возможные значения следующие:
• LineSolid - сплошная линия;
• LineOnOffDash - пунктирная линия; промежутки между штрихами не закрашиваются;
• LineDoubleDash - пунктирная линия; промежутки между штрихами закрашиваются цветом фона.
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 перечислены ниже.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.