Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² X Window срСдствами Free PascalΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 7

Автор А. ΠŸΠΎΠ»ΠΈΡ‰ΡƒΠΊ

1.2 ВСкст ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ программист для Π²Ρ‹Π²ΠΎΠ΄Π° тСкста ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… графичСских ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ X являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΊΠ½Π΅, Π½ΠΎ ΠΈ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ области памяти. Данная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ называСтся ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ пиксСлСй ΠΈ идСнтифицируСтся Ρ†Π΅Π»Ρ‹ΠΌ числом, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ Ρ‚ΠΈΠΏ TPixmap. ΠšΠ°Ρ€Ρ‚Π° Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½ΠΎΠΉ Π² ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ - битовая.

1.2.1 ГрафичСский контСкст

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ сСбС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π΅Π΅. Π­Ρ‚Π° структура называСтся графичСским контСкстом (Graphic Context (GC)). Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° GC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ "Ρ€ΠΈΡΡƒΡŽΡ‰ΠΈΡ…" Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ X. ГрафичСский контСкст содСрТит ряд Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: тСкста, Π»ΠΈΠ½ΠΈΠΉ, Ρ„ΠΈΠ³ΡƒΡ€ ΠΈ Π΄Ρ€. Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ GC Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ освобоТдСн Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ГрафичСский контСкст создаСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ XCreateGC(), ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ:

function XCreateGC(prDisplay: PDisplay; nDrawable: TDrawable; nValueMask: cardinal; prValues: PXGCValues): TGC; cdecl; external;

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру Ρ‚ΠΈΠΏΠ° TDisplay, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ послС Π²Ρ‹Π·ΠΎΠ²Π° XOpenDisplay(); Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠΊΠ½Π° (ΠΈΠ»ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ пиксСлСй), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ; Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - битовая маска, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ, ΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ GC Π·Π°Π΄Π°ΡŽΡ‚ΡΡ; послСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - структура Ρ‚ΠΈΠΏΠ° TXGCValues, опрСдСляСмая ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

TXGCValues = record

 Xfunction: longint; {Renamed function to Xfunction}

 plane_mask: cardinal;

 foreground: cardinal;

 background: cardinal;

 line_width: longint;

 line_style: longint;

 cap_style: longint;

 join_style: longint;

 fill_style: longint;

 fill_rule: longint;

 arc_mode: longint;

 tile: TPixmap;

 stipple: TPixmap;

 ts_x_origin: longint;

 ts_y_origin: longint;

 font: TFont;

 subwindow_mode: longint;

 graphics_exposures: TBool;

 clip_x_origin: longint;

 clip_y_origin: longint;

 clip_mask: TPixmap;

 dash_offset: longint;

 dashes: char;

end;

PXGCValues = ^TXGCValues;

ЗначСния ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Π½Π½ΠΎΠΉ структуры Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Ρ‹ Π½ΠΈΠΆΠ΅. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… соотвСтствуСт Π±ΠΈΡ‚ Π² маскС, которая пСрСдаСтся Π² качСствС Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ XCreateGC(). Π­Ρ‚ΠΈ Π±ΠΈΡ‚Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ символичСскими константами, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ X. Если Π±ΠΈΡ‚ установлСн, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ взято ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ XCreateGC() структуры TXGCValues. Если Π±ΠΈΡ‚ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½, Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ процСсс создания графичСского контСкста, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°: Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° ΠΈ Ρ†Π²Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°.

…

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().

Π¨Π°Π±Π»ΠΎΠ½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для заполнСния рисуСмых Ρ„ΠΈΠ³ΡƒΡ€. ΠŸΡ€ΠΎΡ†Π΅ΡΡ рисования Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π΄Π²Π° этапа. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ пиксСли, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Ρ‹. ПослС этого Ρ†Π²Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ измСняСтся. Π’Π°ΠΊ, для Π»ΠΈΠ½ΠΈΠΈ входящиС Π² Π½Π΅Π΅ пиксСли ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°.