%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%    4. fejezet
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\clearpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\section{Az X gra\-fi\-ka}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{graf}

Az X Win\-dows-t bit\-t\'er\-k\'e\-pes gra\-fi\-kus ki\-jel\-z\H ok\-h\"oz fej\-lesz\-tet\-t\'ek ki. A
fej\-lesz\-t\'es\-kor egy tel\-je\-sen hor\-doz\-ha\-t\'o gra\-fi\-kus fe\-l\"ul\-et ki\-a\-la\-k\'\i{}\-t\'a\-s\'a\-ra
t\"o\-re\-ked\-tek, hogy az X egya\-r\'ant k\'e\-pes le\-gyen ke\-zel\-ni sz\'\i{}\-nes, mo\-nok\-r\'om \'es
sz\"ur\-ke\-\'ar\-nya\-la\-tos ki\-jel\-z\H o\-ket.

Az X gra\-fi\-ka egyik jel\-lem\-z\H o\-je, hogy a leg\-t\"obb le\-he\-t\H o\-s\'eg csak az Xlib szin\-t\H u
f\"ugg\-v\'e\-nyek hasz\-n\'a\-la\-t\'a\-val \'er\-he\-t\H o el. Ez\'ert egy gra\-fi\-k\'at is hasz\-n\'a\-l\'o, de
alap\-ve\-t\H o\-en va\-la\-me\-lyik (pl. XVi\-ew) {\em to\-ol\-kit\/}re \'ep\"u\-l\H o X prog\-ram\-ban gyak\-ran
ta\-l\'al\-ni olyan prog\-ram\-r\'e\-sze\-ket, ahol Xlib \'es {\em to\-ol\-kit} szin\-t\H u
f\"ugg\-v\'eny\-h\'\i{}\-v\'a\-sok v\'alt\-j\'ak egy\-m\'ast. Mi\-vel ezek ugya\-na\-zo\-kat az ob\-jek\-tu\-mo\-kat
hasz\-n\'al\-hat\-j\'ak, ez\'ert az XVi\-ew ob\-jek\-tu\-mok\-hoz el\H o kell \'al\-l\'\i{}\-ta\-ni az Xlib szin\-t\H u
azo\-no\-s\'\i{}\-t\'ot. En\-nek m\'od\-j\'a\-ra mu\-tat p\'el\-d\'at a k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let.

\begin{tt}
\begin{verbatim}
void repaint_proc(canvas, paint_win, repaint_area)
Canvas canvas;
Xv_Window paint_win;    /* XView window */
Rectlist *repaint_area;
{
    Window xwin;        /* Xlib window */

    xwin = xv_get(paint_win, XV_XID);
    XDrawPoint(display, xwin, gc, 0, 0);
}
\end{verbatim}
\end{tt}

A {\tt disp\-lay} \'es {\tt gc} v\'al\-to\-z\'ok\-r\'ol a \ref{graf:gc} \'es \ref{graf:fv}
fe\-je\-ze\-tek\-ben lesz sz\'o. Ami most sz\'a\-munk\-ra \'er\-de\-kes, az az {\tt XV\_XID}
att\-ri\-b\'u\-tum, ami\-vel az XVi\-ew ob\-jek\-tu\-mok Xlib azo\-no\-s\'\i{}\-t\'o\-j\'at le\-het le\-k\'er\-dez\-ni.

A bit\-t\'er\-k\'e\-pes gra\-fi\-ka ala\-pe\-le\-me a {\bf pi\-xel} (k\'e\-per\-ny\H o\-pont). Egy pi\-xel a
me\-m\'o\-ri\-\'a\-ban {\it n} bi\-ten t\'a\-ro\-l\'o\-dik. Ezt az {\em n} sz\'a\-mot ne\-ve\-zik a k\'e\-per\-ny\H o
m\'ely\-s\'e\-g\'e\-nek. A le\-gegy\-sze\-r\H ubb fe\-ke\-te-fe\-h\'er ki\-jel\-z\H on {\em n} \'er\-t\'e\-ke 1, \'es ez az
egy bit ha\-t\'a\-roz\-za meg, hogy az adott pont a k\'e\-per\-ny\H on fe\-ke\-te vagy fe\-h\'er.
Sz\'\i{}\-nes, ill. sz\"ur\-ke\-\'ar\-nya\-la\-tos ki\-jel\-z\H o\-k\"on egy pi\-xel t\"obb bit\-nyi he\-lyet is el\-fog\-lal.
Ezek a bi\-tek nem k\"oz\-vet\-le\-n\"ul ha\-t\'a\-roz\-z\'ak meg a k\'e\-per\-ny\H o\-pont sz\'\i{}\-n\'et, ill.
\'ar\-nya\-la\-t\'at. Ehe\-lyett az X egy in\-dex-k\'ent ke\-ze\-li \H oket, ami\-nek se\-g\'\i{}t\-s\'e\-g\'e\-vel a
{\em co\-lor\-map\/}nak ne\-ve\-zett t\'ab\-l\'a\-zat\-b\'ol le\-het a t\'eny\-le\-ges sz\'\i{}nt, ill.
\'ar\-nya\-la\-tot meg\-kap\-ni. En\-nek r\'esz\-le\-te\-i\-r\H ol \'es a sz\'\i{}\-nes gra\-fi\-kai le\-he\-t\H o\-s\'e\-gek
hasz\-n\'a\-la\-t\'a\-r\'ol a \ref{graf:szin} fe\-je\-zet\-ben \'\i{}runk.

Az X Win\-dows fej\-lesz\-t\'e\-se so\-r\'an szem\-pont volt az is, hogy az X adat\-for\-ga\-lom
mi\-n\'el ke\-v\'es\-b\'e ter\-hel\-je le a sz\'a\-m\'\i{}\-t\'o\-g\'ep\-h\'a\-l\'o\-za\-tot. De mi\-vel a gra\-fi\-ka \'al\-ta\-l\'a\-ban
na\-gyon sok pa\-ra\-m\'e\-ter\-t\H ol f\"ugg, ez sok adat \'at\-vi\-te\-l\'et je\-len\-te\-n\'e a h\'a\-l\'o\-za\-ton. Ezt
a prob\-l\'e\-m\'at az X ter\-ve\-z\H oi \'ugy ol\-dot\-t\'ak meg, hogy be\-ve\-zet\-tek egy komp\-lex
adatst\-ruk\-t\'u\-r\'at, az \'un. {\em Grap\-hics Con\-text\/}et. Er\-r\H ol a struk\-t\'u\-r\'a\-r\'ol,
hasz\-n\'a\-la\-t\'a\-r\'ol sz\'ol a \ref{graf:gc} fe\-je\-zet.

Az X gra\-fi\-ka hasz\-n\'a\-la\-t\'at ren\-ge\-teg Xlib szin\-t\H u raj\-zo\-l\'o alap\-f\"ugg\-v\'eny te\-szi
k\'e\-nyel\-mes\-s\'e. Ezek hasz\-n\'a\-la\-t\'a\-val le\-het raj\-zol\-ni pon\-to\-kat, vo\-na\-la\-kat, k\"o\-r\'\i{}\-ve\-ket,
el\-lip\-szi\-se\-ket, le\-het te\-r\"u\-le\-te\-ket ki\-t\"ol\-te\-ni el\H o\-re meg\-a\-dott min\-t\'ak\-kal \'es le\-het
sz\"o\-ve\-get meg\-je\-le\-n\'\i{}\-te\-ni. Ezek\-nek a f\"ugg\-v\'e\-nyek\-nek a hasz\-n\'a\-la\-t\'a\-r\'ol sz\'ol a
\ref{graf:fv} fe\-je\-zet.

Az Xlib raj\-zo\-l\'o f\"ugg\-v\'e\-nye\-i\-nek egyik jel\-lem\-z\H o\-je, hogy nem csak a k\'e\-per\-ny\H o\-re,
ab\-la\-kok\-ba le\-het ve\-l\"uk raj\-zol\-ni, ha\-nem {\em ima\-ge\/}-ek\-be is. Az {\em
ima\-ge\/}-et \'ugy le\-het el\-k\'ep\-zel\-ni, mint egy olyan ab\-la\-kot, ami nem l\'at\-ha\-t\'o a
k\'e\-per\-ny\H on. Ezek se\-g\'\i{}t\-s\'e\-g\'e\-vel le\-het l\'et\-re\-hoz\-ni sz\'\i{}\-nes iko\-no\-kat, soft\-wa\-re
gom\-bo\-kat ({\em but\-ton\/}okat). Ezek\-r\H ol lesz sz\'o a \ref{graf:image} fe\-je\-zet\-ben.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{Sz\'\i{}\-nek hasz\-n\'a\-la\-ta}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{graf:szin}

Az X sz\'\i{}n\-ke\-ze\-l\'e\-s\'e\-ben alap\-ve\-t\H o sze\-re\-pe van az \'un. {\bf co\-lor\-map\/}nek. Ez egy
struk\-t\'u\-ra\-t\"omb, az el\-e\-me\-it cel\-l\'ak\-nak ({\em co\-lor\-cell}) h\'\i{}v\-j\'ak. Sz\'\i{}\-nes {\em
disp\-lay} ese\-t\'en min\-den cel\-la h\'a\-rom me\-z\H o\-b\H ol \'all, amik a h\'a\-rom alap\-sz\'\i{}n (v\"o\-r\"os,
z\"old, k\'ek) in\-ten\-zi\-t\'a\-s\'er\-t\'e\-k\'et ad\-j\'ak meg.

Az X egyet\-len {\em co\-lor\-map\/}et ke\-zel, ezt hasz\-n\'al\-ja az \"o\discretionary{sz-}{sz}{ssz}es prog\-ram. Min\-den
egyes ab\-lak l\'et\-re\-hoz\-hat\-ja a sa\-j\'at vir\-tu\-\'a\-lis {\em co\-lor\-map\/}-j\'et,
fel\-hasz\-n\'al\-va bi\-zo\-nyos sz\'a\-m\'u cel\-l\'at. Ter\-m\'e\-sze\-te\-sen fel\-me\-r\"ul a k\'er\-d\'es, mi
t\"or\-t\'e\-nik, ha meg\-te\-lik a {\em co\-lor\-map\/}. Az X r\'e\-geb\-bi ver\-zi\-\'o\-i\-n\'al ilyen\-kor nem
le\-he\-tett to\-v\'ab\-bi cel\-l\'a\-kat fog\-lal\-ni. Az \'ujabb ver\-zi\-\'ok\-ban \'ugy ol\-dot\-t\'ak meg ezt
a prob\-l\'e\-m\'at, hogy ilyen eset\-ben a k\'ert sz\'\i{}n\-hez leg\-k\"o\-ze\-lebb \'al\-l\'o sz\'\i{}nt
tar\-tal\-ma\-z\'o cel\-l\'at kap\-ja meg a k\'e\-rel\-me\-z\H o. Ez\'al\-tal ugyan el\H o\-for\-dul, hogy nem
min\-den al\-kal\-ma\-z\'as hasz\-n\'al he\-lyes sz\'\i{}\-ne\-ket, de le\-ga\-l\'abb nem okoz hi\-b\'at t\'ul sok
sz\'\i{}n hasz\-n\'a\-la\-ta.

Az X h\'a\-rom\-f\'e\-le {\em disp\-lay\/}t\'\i{}\-pust k\'e\-pes ke\-zel\-ni:

\begin{enumerate}
 \item {\bf Mo\-noch\-rom\/}: Min\-den pi\-xel egy bi\-ten t\'a\-ro\-l\'o\-dik a me\-m\'o\-ri\-\'a\-ban. Ez a bit
ha\-t\'a\-roz\-za meg, hogy az adott k\'e\-per\-ny\H o\-pont fe\-ke\-te vagy fe\-h\'er sz\'\i{}\-n\H u.

 \item {\bf Pse\-u\-do-co\-lor\/}: Ti\-pi\-ku\-san egy pi\-xel\-nek n\'egy \'es ti\-zen\-ket\-t\H o k\"o\-z\"ot\-ti
bit\-sz\'am fe\-lel meg. A pi\-xe\-l\'er\-t\'ek egy in\-dex-k\'ent ke\-ze\-l\H o\-dik, ami alap\-j\'an a {\em
co\-lor\-map} h\'a\-rom me\-z\H o\-je ha\-t\'a\-roz\-za meg a k\'e\-per\-ny\H o\-pont sz\'\i{}\-n\"o\discretionary{sz-}{sz}{ssz}e\-te\-v\H o\-it, a v\"o\-r\"os,
z\"old \'es k\'ek in\-ten\-zi\-t\'ast. A sz\"ur\-ke\-\'ar\-nya\-la\-tos {\em disp\-lay} a {\em pse\-u\-do-co\-lor}
t\'\i{}\-pu\-s\'u {\em disp\-lay} el\-fa\-jult v\'al\-to\-za\-t\'a\-nak te\-kint\-he\-t\H o. Ilyen\-kor a {\em
co\-lor\-map} egyet\-len me\-z\H o\-b\H ol \'all, ami az in\-ten\-zi\-t\'ast ad\-ja meg.

 \item {\bf Di\-rect-co\-lor\/}: Egy pi\-xel ti\-pi\-ku\-san ti\-zen\-ket\-t\H o \'es har\-min\-chat
k\"o\-z\"ot\-ti sz\'a\-m\'u bi\-ten t\'a\-ro\-l\'o\-dik. A pi\-xe\-l\'er\-t\'ek h\'a\-rom me\-z\H o\-b\H ol \'all, ame\-lyek
k\"u\-l\"on-k\"u\-l\"on in\-de\-xek\-k\'ent ke\-ze\-l\H od\-nek. Eb\-ben az eset\-ben c\'el\-sze\-r\H ubb a {\em
co\-lor\-map} h\'a\-rom me\-z\H o\-j\'et \'ugy el\-k\'ep\-zel\-ni, mint\-ha h\'a\-rom f\"ug\-get\-len {\em co\-lor\-map}
len\-ne, min\-den alap\-sz\'\i{}n\-hez egy, \'es ezek\-be in\-de\-xel\-ne be\-le a pi\-xe\-l\'er\-t\'ek h\'a\-rom
me\-z\H o\-je.
\end{enumerate}

Sz\'\i{}\-nes {\em disp\-lay\/}t fel\-t\'e\-te\-lez\-ve a {\em co\-lor\-map} in\-de\-xe\-l\'e\-s\'et a k\"o\-vet\-ke\-z\H o
p\'el\-da szem\-l\'el\-te\-ti:

\begin{quote}
Te\-gy\"uk fel, hogy a {\em co\-lor\-map} el\-s\H o nyolc cel\-l\'a\-ja az \ref{cmap}. t\'ab\-l\'a\-zat
sze\-rint van ki\-t\"olt\-ve.

\begin{table}
\begin{center}
\begin{tt}
\begin{tabular} {|c||c|c|c|} \hline
 in\-dex & v\"o\-r\"os & z\"old & k\'ek \\
 \hline\hline
 0 & 0x00 & 0x00 & 0x00 \\
 \hline
 1 & 0xf0 & 0x00 & 0x00 \\
 \hline
 2 & 0x00 & 0xe0 & 0x00 \\
 \hline
 3 & 0x00 & 0x00 & 0xd0 \\
 \hline
 4 & 0x80 & 0x90 & 0xa0 \\
 \hline
 5 & 0x4c & 0x5e & 0x6b \\
 \hline
 6 & 0x70 & 0x68 & 0x60 \\
 \hline
 7 & 0xff & 0xff & 0xff \\
 \hline
\end{tabular}
\caption{A {\em co\-lor\-map} el\-s\H o nyolc cel\-l\'a\-ja}
\label{cmap}
\end{tt}
\end{center}
\end{table}

{\em Pse\-u\-do-co\-lor} t\'\i{}\-pu\-s\'u {\em disp\-lay\/}t fel\-t\'e\-te\-lez\-ve le\-gyen a pi\-xe\-l\'er\-t\'ek
{\tt 0x01}. Ek\-kor a h\'a\-rom in\-ten\-zi\-t\'a\-s\'er\-t\'ek a k\"o\-vet\-ke\-z\H o lesz: pi\-ros --- {\tt
0x0f}, z\"old --- {\tt 0x00}, k\'ek --- {\tt 0x00}.

Ha a {\em disp\-lay} {\em di\-rect-co\-lor} t\'\i{}\-pu\-s\'u, \'es a pi\-xe\-l\'er\-t\'ek {\tt 0x040603}
(h\'a\-rom 8 bi\-tes me\-z\H o\-vel), ak\-kor a h\'a\-rom in\-ten\-zi\-t\'a\-s\'er\-t\'ek a k\"o\-vet\-ke\-z\H o lesz: pi\-ros
--- {\tt 0x80}, z\"old --- {\tt 0x68}, k\'ek --- {\tt 0xd0}.
\end{quote}

A sz\'\i{}\-nek hasz\-n\'a\-la\-t\'a\-ra az XVi\-ew {\em to\-ol\-kit} is biz\-to\-s\'\i{}t k\'e\-nyel\-mes esz\-k\"o\-z\"o\-ket.
Le\-he\-t\H o\-s\'eg van sa\-j\'at {\em co\-lor\-map} szeg\-mens l\'et\-re\-ho\-z\'a\-s\'a\-ra, ami\-nek a ke\-ze\-l\'e\-se
na\-gyon egy\-sze\-r\H u. A k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let er\-re mu\-tat p\'el\-d\'at. Te\-gy\"uk fel,
hogy a prog\-ra\-munk a gra\-fi\-k\'a\-hoz n\'egy sz\'\i{}nt hasz\-n\'al: fe\-ke\-t\'et, fe\-h\'e\-ret, pi\-ro\-sat
\'es k\'e\-ket.

\begin{tt}
\begin{verbatim}
Xv_singlecolor cms_colors[] = {
    {   0,   0,   0 },
    { 255, 255, 255 },
    { 255,   0,   0 },
    {   0,   0, 255 }};

Cms cms;
unsigned long *cmit;

main()
{
\end{verbatim}
    /* XVi\-ew ini\-ci\-a\-li\-z\'a\-l\'as ... */
\begin{verbatim}
    cms = (Cms)xv_create(NULL, CMS,
        CMS_COLORS,   cms_colors,
        CMS_SIZE,     4,
        NULL);

    cmit = (unsigned long *)xv_get(cms, CMS_INDEX_TABLE);
\end{verbatim}
    /* Ab\-la\-kok l\'et\-re\-ho\-z\'a\-sa, ese\-m\'eny\-cik\-lus ... */
\begin{verbatim}
}

void set_color(dpy, gc, color)
Display *dpy;
GC gc;
int color;                   /* 0 <= color <= 3 */
{
    XSetForeground(dpy, gc, cmit[color]);
}
\end{verbatim}
\end{tt}

A prog\-ram az ini\-ci\-a\-li\-z\'a\-l\'as so\-r\'an l\'et\-re\-hoz egy sa\-j\'at {\em co\-lor\-map} szeg\-menst
({\tt cms}), majd le\-k\'er\-de\-zi az eh\-hez tar\-to\-z\'o in\-dex\-t\'ab\-l\'a\-za\-tot ({\tt cmit}). Ezu\-t\'an
min\-den raj\-zo\-l\'as el\H ott, ami\-kor a GC (\ref{graf:gc}) el\H o\-t\'er\-sz\'\i{}\-n\'et \'al\-l\'\i{}t\-ja, a sz\'\i{}n
\'er\-t\'e\-k\'et in\-dex\-k\'ent hasz\-n\'al\-va az in\-dex\-t\'ab\-l\'a\-zat adott el\-e\-m\'e\-nek \'er\-t\'e\-k\'e\-re \'al\-l\'\i{}t\-ja
be az el\H o\-t\'er\-sz\'\i{}nt.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{A GC adatst\-ruk\-t\'u\-ra}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{graf:gc}

Mint b\'ar\-mely gra\-fi\-k\'at t\'a\-mo\-ga\-t\'o nyelv\-ben, az X-ben is ta\-l\'al\-ha\-tunk f\"ugg\-v\'e\-nye\-ket
pon\-tok, vo\-na\-lak raj\-zo\-l\'a\-s\'a\-hoz. Ezek\-nek az Xlib szin\-t\H u f\"ugg\-v\'e\-nyek\-nek egyik
sa\-j\'a\-tos\-s\'a\-ga, hogy nem ig\'eny\-lik pa\-ra\-m\'e\-ter\-k\'ent az \"o\discretionary{sz-}{sz}{ssz}es raj\-zo\-l\'as\-hoz sz\"uk\-s\'e\-ges
in\-for\-m\'a\-ci\'o \'at\-a\-d\'a\-s\'at. Ehe\-lyett az X egy olyan er\H o\-for\-r\'ast ve\-ze\-tett be, ami
meg\-ha\-t\'a\-roz\-za a rajz \"o\discretionary{sz-}{sz}{ssz}es jel\-lem\-z\H o\-j\'et (sz\'\i{}\-nek, vo\-nal\-vas\-tag\-s\'ag, stb.). Ez az
er\H o\-for\-r\'as a {\bf GC}, {\em Grap\-hics Con\-text} (gra\-fi\-kus k\"or\-nye\-zet). Mi\-vel min\-den
raj\-zo\-l\'o\-ru\-tin egyik pa\-ra\-m\'e\-te\-re egy GC t\'\i{}\-pu\-s\'u adat, ez\'ert a prog\-ram\-nak l\'et\-re
kell hoz\-nia egy ilyet az el\-s\H o gra\-fi\-kus f\"ugg\-v\'eny\-h\'\i{}\-v\'ast meg\-e\-l\H o\-z\H o\-en. A GC
l\'et\-re\-ho\-z\'a\-s\'a\-ra szol\-g\'al az {\tt XCreateGC} f\"ugg\-v\'eny. A k\"o\-vet\-ke\-z\H o
prog\-ram\-r\'esz\-let en\-nek hasz\-n\'a\-la\-t\'at mu\-tat\-ja be.

\begin{tt}
\begin{verbatim}
    GC gc;
    XGCValues values;
    unsigned long valuemask;

    values.foreground = BlackPixel(display, screen_num);
    values.background = WhitePixel(display, screen_num);
    gc = XCreateGC(display, RootWindow(display, screen_num),
            (GCForeground | GCBackground), &values);
\end{verbatim}
\end{tt}

A prog\-ram\-r\'esz\-let egy olyan GC-t hoz l\'et\-re, ami\-nek az el\H o\-t\'er\-sz\'\i{}\-ne fe\-ke\-te, a
h\'at\-t\'er\-sz\'\i{}\-ne pe\-dig fe\-h\'er. A fe\-ke\-te \'es fe\-h\'er sz\'\i{}n\-nek meg\-fe\-le\-l\H o in\-de\-xek
le\-k\'er\-de\-z\'e\-s\'e\-re k\'et mak\-r\'ot hasz\-n\'al. Az {\tt XCreateGC} m\'a\-so\-o\-dik
pa\-ra\-m\'e\-te\-r\'e\-nek a he\-ly\'e\-re b\'ar\-mi\-lyen ab\-lak azo\-no\-s\'\i{}\-t\'o\-j\'at be\-\'\i{}r\-hat\-n\'ank, ami \H ose a
raj\-zo\-l\'as c\'el\-j\'a\-ul szol\-g\'a\-l\'o ab\-la\-kunk\-nak. A {\tt RootWindow} mak\-r\'o azt az
ab\-la\-kot ad\-ja vi\discretionary{sz-}{sz}{ssz}a, ami min\-den ab\-lak \H ose, \'\i{}gy ez min\-dig hasz\-n\'al\-ha\-t\'o ezen a
he\-lyen. A {\tt display} \'es {\tt screen\_num} v\'al\-to\-z\'ok\-r\'ol a \ref{graf:fv}
al\-fe\-je\-zet\-ben lesz sz\'o.

Az {\tt XCreateGC} har\-ma\-dik pa\-ra\-m\'e\-te\-re egy maszk, ami meg\-ad\-ja, hogy a
ne\-gye\-dik pa\-ra\-m\'e\-ter\-ben \'at\-a\-dott struk\-t\'u\-ra mely me\-z\H oi van\-nak ki\-t\"olt\-ve.

A GC tar\-tal\-m\'at a szer\-ver t\'a\-rol\-ja, ily m\'o\-don is cs\"ok\-kent\-ve a h\'a\-l\'o\-za\-ton
\'at\-k\"ul\-den\-d\H o adat\-me\discretionary{ny-}{ny}{nny}i\-s\'e\-get. A prog\-ram egy azo\-no\-s\'\i{}\-t\'ot kap vi\discretionary{sz-}{sz}{ssz}a a GC
l\'et\-re\-ho\-z\'a\-sa\-kor, ez\-zel le\-het k\'e\-s\H obb hi\-vat\-koz\-ni r\'a, ak\'ar raj\-zo\-l\'as\-kor, ak\'ar a
raj\-zo\-l\'as pa\-ra\-m\'e\-te\-re\-i\-nek meg\-v\'al\-toz\-ta\-t\'a\-sa\-kor. Le\-he\-t\H o\-s\'eg van egyi\-de\-j\H u\-leg t\"obb
GC hasz\-n\'a\-la\-t\'a\-ra is, ame\-lyek egy\-m\'as\-t\'ol el\-t\'e\-r\H o \'er\-t\'e\-kek\-re van\-nak be\-\'al\-l\'\i{}t\-va. Ily
m\'o\-don ugya\-naz\-zal a szub\-ru\-tin\-nal k\"u\-l\"on\-b\"o\-z\H o ha\-t\'a\-so\-kat le\-het el\-\'er\-ni at\-t\'ol
f\"ug\-g\H o\-en, hogy me\-lyik GC-t kap\-ja meg pa\-ra\-m\'e\-ter\-k\'ent. 

A GC se\-g\'\i{}t\-s\'e\-g\'e\-vel a rajz na\-gyon sok pa\-ra\-m\'e\-te\-r\'et le\-het v\'al\-toz\-tat\-ni. A
k\"o\-vet\-ke\-z\H ok\-ben ezek k\"o\-z\"ul a leg\-gya\-jo\-rib\-bak\-kal fog\-lal\-ko\-zunk.
 \'Igy p\'el\-d\'a\-ul nem t\'er-nk ki a sz\"o\-ve\-gek jel\-lem\-z\H o\-i\-nek \'al\-l\'\i{}\-t\'a\-s\'a\-ra, a
te\-r\"u\-let\-ki\-t\"ol\-t\'es pa\-ra\-m\'e\-te\-re\-i\-nek meg\-ha\-t\'a\-ro\-z\'a\-s\'a\-ra, stb. A GC hasz\-n\'a\-la\-t\'a\-r\'ol
r\'esz\-le\-tes le\-\'\i{}\-r\'as ta\-l\'al\-ha\-t\'o \cite{xws1}-ben, r\"o\-vid re\-fe\-ren\-ci\-a\-k\'ent pe\-dig
\cite{xws2} hasz\-n\'al\-ha\-t\'o.
\begin{description}

 \item[Lo\-gi\-kai funk\-ci\'o] Ez a me\-z\H o ha\-t\'a\-roz\-za meg, hogy a raj\-zo\-l\'as\-kor ho\-gyan
ke\-let\-ke\-zik az \'uj pi\-xe\-l\'er\-t\'ek a GC el\H o\-t\'er\-sz\'\i{}n me\-z\H o\-j\'e\-b\H ol \'es az el\H o\-z\H o
pi\-xel\-\'er\-t\'ek\-b\H ol. A leg\-gyak\-rab\-ban hasz\-n\'alt \'er\-t\'e\-kek a {\tt GXcopy}
(de\-fa\-ult \'er\-t\'ek) \'es {\tt GXxor}. Az el\H ob\-bi fi\-gyel\-men k\'\i{}\-v\"ul hagy\-ja az el\H o\-z\H o
pi\-xe\-l\'er\-t\'e\-ket \'es az el\H o\-t\'er\-sz\'\i{}n\-re \'al\-l\'\i{}t\-ja a pont sz\'\i{}\-n\'et, az ut\'ob\-bi\-n\'al pe\-dig a k\'et
\'er\-t\'ek ki\-z\'a\-r\'o-vagy kap\-cso\-la\-ta lesz az \'uj \'er\-t\'ek.

A me\-z\H o az {\tt XSetFunction} f\"ugg\-v\'e\discretionary{ny-}{ny}{nny}el \'al\-l\'\i{}t\-ha\-t\'o.

 \item[El\H{o}t\'ersz\'{\i}n, H\'att\'ersz\'{\i}n] Ezek a me\-z\H ok ha\-t\'a\-roz\-z\'ak meg a
raj\-zo\-l\'as sz\'\i{}\-ne\-it. A sz\'\i{}n \'er\-t\'e\-ke egy in\-dex lesz a {\em co\-lor\-map\/}be. A k\'et me\-z\H o
\'er\-t\'e\-ke az {\tt XSet\-Fore\-ground} il\-let\-ve {\tt XSetBackground}
f\"ugg\-v\'e\-nyek\-kel \'al\-l\'\i{}t\-ha\-t\'o.

 \item[Vo\-nal\-jel\-lemz\H{o}k] Ez alatt a GC n\'egy me\-z\H o\-j\'et \'ert\-j\"uk, ame\-lyek egyet\-len
f\"ugg\-v\'eny\-h\'\i{}\-v\'as\-sal \'al\-l\'\i{}t\-ha\-t\'ok.

\begin{description}

 \item[li\-ne\_width] Vo\-nal\-vas\-tag\-s\'ag pi\-xe\-lek\-ben. Ha ez az \'er\-t\'ek 0, ak\-kor az X a
leg\-gyor\-sabb vo\-nal\-h\'u\-z\'o al\-go\-rit\-must fog\-ja hasz\-n\'al\-ni, ami az adott g\'e\-pen
el\-\'er\-he\-t\H o. (Bi\-zo\-nyos g\'e\-pek biz\-to\-s\'\i{}\-ta\-nak gyors hard\-wa\-re vo\-nal\-raj\-zo\-l\'a\-si
le\-he\-t\H o\-s\'e\-get, en\-nek ki\-hasz\-n\'a\-l\'a\-s\'at je\-len\-ti a 0 \'er\-t\'ek.)

 \item[li\-ne\_style] A vo\-nal st\'\i{}\-lu\-sa, de\-fa\-ult \'er\-t\'e\-ke a foly\-to\-nos vo\-nal, de meg
le\-het ad\-ni szag\-ga\-tott vo\-na\-lat is, s\H ot le\-he\-t\H o\-s\'eg van a szag\-ga\-tott\-s\'ag m\'od\-j\'a\-nak
be\-\'al\-l\'\i{}\-t\'a\-s\'a\-ra is.

 \item[cap\_style] A vo\-nal\-v\'eg st\'\i{}\-lu\-sa, de\-fa\-ult \'er\-t\'e\-ke me\-r\H o\-le\-ge\-sen le\-v\'a\-gott,
de be le\-het p\'el\-d\'a\-ul \'al\-l\'\i{}\-ta\-ni le\-ke\-re\-k\'\i{}\-tett vo\-nal\-v\'e\-get is. Csak ak\-kor van
\'er\-tel\-me, ha a vo\-nal\-vas\-tag\-s\'ag na\-gyobb mint 1.

 \item[jo\-in\_style] A csat\-la\-ko\-z\'o vo\-nal\-v\'e\-gek csat\-la\-ko\-z\'a\-s\'a\-nak m\'od\-j\'at ad\-ja meg.
Le\-het sz\"og\-le\-tes, le\-ke\-re\-k\'\i{}\-tett, stb. En\-nek a me\-z\H o\-nek is csak ak\-kor van \'er\-tel\-me,
ha a vo\-nal\-vas\-tag\-s\'ag le\-ga\-l\'abb 2.
\end{description}

A n\'egy me\-z\H o az {\tt XSetLineAttributes} f\"ugg\-v\'e\discretionary{ny-}{ny}{nny}el \'al\-l\'\i{}t\-ha\-t\'o.
\end{description}

A GC me\-z\H o\-i\-nek \'er\-t\'e\-k\'et be le\-het \'al\-l\'\i{}\-ta\-ni a GC l\'et\-re\-ho\-z\'a\-sa\-kor, mint azt a fe\-je\-zet
el\-e\-j\'en l\'at\-tuk, vagy ut\'o\-lag, amint a k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let mu\-tat\-ja:


\begin{tt}
\begin{verbatim}
    unsigned int line_width = 6;
    int line_style = LineOnOffDash;
    int cap_style = CapRound;
    int join_style = JoinRound;
    int dash_offset = 0;
    static char dash_list[] = {12, 24};
    int list_length = 2;

    XsetForeground(display, gc,
            BlackPixel(display, screen_num));
    XSetLineAttributes(display, gc, line_width,
            line_style, cap_style, join_style);
    XSetDashes(display, gc, dash_offset,
            dash_list, list_length); \end{verbatim}
\end{tt}

Ez a prog\-ram\-r\'esz\-let \'ugy \'al\-l\'\i{}t\-ja be a GC-t, hogy az ezt k\"o\-ve\-t\H o vo\-nal\-raj\-zo\-l\'a\-sok
fe\-ke\-te sz\'\i{}\-n\H u, hat pi\-xel vas\-tag szag\-ga\-tott vo\-na\-lat raj\-zol\-nak le\-ke\-re\-k\'\i{}\-tett
v\'e\-gek\-kel \'es csat\-la\-ko\-z\'a\-sok\-kal. A szag\-ga\-tott\-s\'a\-got a {\tt dash\_list} t\"omb \'\i{}r\-ja
le.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{Raj\-zo\-l\'o alap\-f\"ugg\-v\'e\-nyek}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \label{graf:fv}

Az X raj\-zo\-l\'o alap\-ru\-tin\-jai na\-gyon egy\-sze\-r\H u\-en hasz\-n\'al\-ha\-t\'ok pon\-tok, vo\-na\-lak,
t\'eg\-la\-la\-pok, k\"o\-r\'\i{}\-vek raj\-zo\-l\'a\-s\'a\-ra. Eb\-ben a fe\-je\-zet\-r\'esz\-ben nem k\'\i{}\-v\'an\-juk be\-mu\-tat\-ni
az \"o\discretionary{sz-}{sz}{ssz}es ru\-tint vagy ak\'ar csak egy r\'e\-sz\"u\-ket. Sze\-ret\-n\'enk ehe\-lyett \'al\-ta\-l\'a\-nos
el\-vek\-r\H ol \'\i{}r\-ni, a hasz\-n\'a\-la\-tuk\-r\'ol, pa\-ra\-m\'e\-te\-re\-z\'e\-s\"uk\-r\H ol. Az \"o\discretionary{sz-}{sz}{ssz}es f\"ugg\-v\'eny
fel\-so\-ro\-l\'a\-sa pa\-ra\-m\'e\-te\-rek\-kel, azok le\-het\-s\'e\-ges \'er\-t\'e\-ke\-i\-vel \cite{xws2}-ban
ta\-l\'al\-ha\-t\'o meg. Aki\-nek pe\-dig prog\-ra\-mo\-z\'as k\"oz\-ben csak a f\"ugg\-v\'e\-nyek h\'\i{}\-v\'a\-si
for\-m\'a\-j\'a\-ra van sz\"uk\-s\'e\-ge \'es \cite{xws2} nincs k\'ez\-n\'el, azok\-nak aj\'anl\-juk, hogy
hasz\-n\'al\-j\'ak az {\tt Xlib.h} inc\-lu\-de fi\-le-t.

Egy {\em to\-ol\-kit\/}re \'ep\"u\-l\H o prog\-ram\-ban gra\-fi\-k\'at hasz\-n\'al\-ni ki\-csit olyan, mint\-ha
egy ma\-ga\discretionary{sz-}{sz}{ssz}in\-t\H u prog\-ram\-nyelv\-ben as\-semb\-ler uta\-s\'\i{}\-t\'a\-so\-kat hasz\-n\'al\-n\'ank. A {\em
to\-ol\-kit\/}ek \'al\-ta\-l\'a\-ban nem biz\-to\-s\'\i{}\-ta\-nak olyan le\-he\-t\H o\-s\'e\-ge\-ket a raj\-zo\-l\'as\-ra, mint
az Xlib f\"ugg\-v\'e\-nyek. Ez\'ert \'al\-ta\-l\'a\-nos az Xlib raj\-zo\-l\'o f\"ugg\-v\'e\-nye\-i\-nek hasz\-n\'a\-la\-ta
a gra\-fi\-k\'at meg\-va\-l\'o\-s\'\i{}\-t\'o r\'e\-szek\-n\'el. Ar\-r\'ol m\'ar sz\'ol\-tunk ezen fe\-je\-zet el\-e\-j\'en, hogy
mi\-k\'ep\-pen le\-het az XVi\-ew ob\-jek\-tu\-mok azo\-no\-s\'\i{}\-t\'o\-it Xlib azo\-no\-s\'\i{}\-t\'ok\-k\'a kon\-ver\-t\'al\-ni.
Most az Xlib raj\-zo\-l\'o f\"ugg\-v\'e\-nye\-i\-nek h\'a\-rom \'al\-lan\-d\'o\-an sze\-rep\-l\H o pa\-ra\-m\'e\-te\-r\'e\-r\H ol,
el\H o\-\'al\-l\'\i{}\-t\'a\-suk\-r\'ol lesz sz\'o.

\begin{description}

 \item[disp\-lay] {\tt `Display *'} t\'\i{}\-pu\-s\'u pa\-ra\-m\'e\-ter. Nem csak a raj\-zo\-l\'o, ha\-nem
az \"o\discretionary{sz-}{sz}{ssz}es Xlib f\"ugg\-v\'eny el\-s\H o pa\-ra\-m\'e\-te\-re. Azt az X szer\-vert ad\-ja meg, ame\-lyik\-nek
a pro\-to\-koll k\'e\-rel\-met k\"ul\-de\-ni kell. Mi\-vel egy prog\-ram \'al\-ta\-l\'a\-ban egy ki\-jel\-z\H o\-re
dol\-go\-zik, ez\'ert ez a pa\-ra\-m\'e\-ter egy prog\-ra\-mon be\-l\"ul \'al\-lan\-d\'o \'er\-t\'ek. Xlib szin\-t\H u
prog\-ra\-mok\-ban a szer\-ver\-hez va\-l\'o csat\-la\-ko\-z\'as\-kor ad\'o\-dik vi\discretionary{sz-}{sz}{ssz}a, XVi\-ew szin\-ten
pe\-dig a k\"o\-vet\-ke\-z\H o f\"ugg\-v\'eny\-h\'\i{}\-v\'as\-sal \'al\-l\'\i{}t\-ha\-t\'o el\H o tet\-sz\H o\-le\-ges ab\-lak
azo\-no\-s\'\i{}\-t\'o\-j\'a\-b\'ol:

\begin{tt}
\begin{verbatim}
    display = XV_DISPLAY_FROM_WINDOW(frame);
\end{verbatim}
\end{tt} 

 \item[dra\-wab\-le] {\tt Drawable} t\'\i{}\-pu\-s\'u pa\-ra\-m\'e\-ter. Ez a t\'\i{}\-pus a {\tt Window}
\'es {\tt Pixmap} t\'\i{}\-pu\-sok \"o\discretionary{sz-}{sz}{ssz}es\-s\'e\-ge. Ez ha\-t\'a\-roz\-za meg a raj\-zo\-l\'as c\'el\-j\'at, ami
le\-het ab\-lak vagy {\em pix\-map\/}. Egy XVi\-ew ab\-lak vagy egy {\tt Server\_image}
azo\-no\-s\'\i{}\-t\'o\-j\'a\-b\'ol a fe\-je\-zet el\-e\-j\'en le\-\'\i{}rt m\'o\-don le\-het el\H o\-\'al\-l\'\i{}\-ta\-ni.

 \item[gc] {\tt GC} t\'\i{}\-pu\-s\'u pa\-ra\-m\'e\-ter. A raj\-zo\-l\'as jel\-lem\-z\H o\-it (vo\-nal\-vas\-tag\-s\'ag,
sz\'\i{}\-nek, stb.) ha\-t\'a\-roz\-za meg. A \ref{graf:gc} al\-fe\-je\-zet\-ben r\'esz\-le\-te\-zett m\'o\-don
le\-het el\H o\-\'al\-l\'\i{}\-ta\-ni.
\end{description}

Az Xlib tar\-tal\-maz olyan mak\-r\'o\-kat, ame\-lyek\-kel a k\'e\-per\-ny\H o jel\-lem\-z\H o\-i\-r\H ol nyer\-he\-t\"unk
in\-for\-m\'a\-ci\-\'ot (pl. {\tt DisplayWidth}), vagy k\"u\-l\"on\-b\"o\-z\H o azo\-no\-s\'\i{}\-t\'o\-kat kap\-ha\-tunk
meg (pl. {\tt RootWindow}). Ezek a mak\-r\'ok gyak\-ran k\'er\-nek olyan pa\-ra\-m\'e\-tert, ami
a k\'e\-per\-ny\H ot azo\-no\-s\'\i{}t\-ja\footnote{En\-nek ak\-kor van k\"u\-l\"o\-n\"os je\-len\-t\H o\-s\'e\-ge, ami\-kor
egy szer\-ver t\"obb k\'e\-per\-ny\H ot is ke\-zel.}. Ez a pa\-ra\-m\'e\-ter is egy mak\-r\'o\-h\'\i{}\-v\'as\-sal
\'al\-l\'\i{}t\-ha\-t\'o el\H o a k\"o\-vet\-ke\-z\H o m\'o\-don:

\begin{tt}
\begin{verbatim}
    int scr_num;
    scr_num = DefaultScreen(display);
\end{verbatim}
\end{tt}

A raj\-zo\-l\'o f\"ugg\-v\'e\-nyek t\"ob\-bi pa\-ra\-m\'e\-te\-r\'e\-nek be\-\'al\-l\'\i{}\-t\'a\-sa egye\-di, a raj\-zo\-l\'as c\'el\-j\'a\-t\'ol
f\"ugg (pl. egy vo\-nal\-raj\-zo\-l\'as\-kor a vo\-nal v\'eg\-pont\-jai). A k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let
az {\tt XDrawRectangle} f\"ugg\-v\'eny hasz\-n\'a\-la\-t\'a\-ra mu\-tat p\'el\-d\'at.

\begin{tt}
\begin{verbatim}
void draw_graphics(win, gc, win_width, win_height)
Window win;
GC gc;
unsigned int win_width, win_height;
{
    int x, y;
    unsigned int width, height;

    height = win_height/2;
    width = 3 * win_width/2;
    x = win_width/2 - width/2;        /* Centered */
    y = win_height/2 - height/2;
    XDrawRectangle(display, win, gc, x, y, width, height);
}
\end{verbatim}
\end{tt}

Ez a prog\-ram\-r\'esz\-let egy t\'eg\-la\-la\-pot raj\-zol a {\tt win} pa\-ra\-m\'e\-ter\-ben ka\-pott
ab\-lak\-ba. Mint l\'at\-ha\-t\'o, a po\-z\'\i{}\-ci\'o pon\-tos be\-\'al\-l\'\i{}\-t\'a\-sa te\-szi ki a ru\-tin na\-gyob\-bik
r\'e\-sz\'et, a raj\-zo\-l\'as ma\-ga na\-gyon egy\-sze\-r\H u.

%%%%%%%%%%%%%%%%%%%%%%
%
 \subsection{Ima\-ge-ek}
%
%%%%%%%%%%%%%%%%%%%%%%
 \label{graf:image}

Az X k\'et\-f\'e\-le k\'e\-per\-ny\H on k\'\i{}\-v\"u\-li ({\em off-scre\-en}) k\'e\-pet is\-mer, a {\bf bit\-map\/}et
\'es a {\bf pix\-map\/}et. Ezek na\-gyon ha\-son\-l\'o adatst\-ruk\-t\'u\-r\'ak az\-zal a k\"u\-l\"onb\-s\'eg\-gel,
hogy a {\em bit\-map} 1 bit m\'ely\-s\'e\-g\H u t\'eg\-la\-lap, m\'\i{}g a {\em pix\-map} m\'ely\-s\'e\-ge
na\-gyobb is le\-het. A ket\-t\H ot k\"o\-z\"os n\'e\-ven {\bf ima\-ge\/}-nek h\'\i{}v\-j\'ak. Egy {\em
ima\-ge\/}-et el\H o le\-het \'al\-l\'\i{}\-ta\-ni \'ugy, hogy a tar\-tal\-m\'at el\-k\"uld\-j\"uk a szer\-ver\-nek,
vagy pe\-dig a k\'e\-per\-ny\H o meg\-fe\-le\-l\H o m\'e\-re\-t\H u da\-rab\-j\'at be\-le\-m\'a\-sol\-juk. M\'eg egy
le\-he\-t\H o\-s\'eg van {\em ima\-ge\/}-ek l\'et\-re\-ho\-z\'a\-s\'a\-ra, ez a raj\-zo\-l\'o f\"ugg\-v\'e\-nyek
hasz\-n\'a\-la\-ta.

Az {\em ima\-ge\/}-eket \'al\-ta\-l\'a\-ban egy \'ab\-ra\-r\'esz\-let ab\-lak\-ban t\"or\-t\'e\-n\H o
meg\-je\-le\-n\'\i{}\-t\'e\-s\'e\-re hasz\-n\'al\-j\'ak, pl. 
iko\-nok, kur\-zo\-rok \'es nyo\-m\'o\-gom\-bo\-kok l\'et\-re\-ho\-z\'a\-s\'a\-ra. A
nyo\-m\'o\-gom\-bok\-r\'ol m\'ar volt sz\'o a \ref{xview:obj:panel} fe\-je\-zet\-ben, a m\'a\-sik k\'et
ob\-jek\-tum\-faj\-t\'a\-r\'ol n\'e\-h\'any sz\'o:

\begin{description}

 \item[ikon] Ah\-hoz, hogy a ren\-del\-ke\-z\'e\-s\"unk\-re \'al\-l\'o k\'e\-per\-ny\H o\-fe\-l\"u\-let \'at\-l\'at\-ha\-t\'o
ma\-rad\-jon \'es ne zs\'u\-fo\-l\'od\-jon te\-le egy\-m\'ast \'at\-fe\-d\H o ab\-la\-kok\-kal, az \'ep\-pen nem
hasz\-n\'alt ab\-la\-ko\-kat c\'el\-sze\-r\H u be\-z\'ar\-ni. Az ikon egy olyan kis\-m\'e\-re\-t\H u ab\-lak, ami egy
{\em fra\-me} z\'art \'al\-la\-po\-t\'a\-ra utal.

 \item[kur\-zor] A kur\-zor egy olyan szim\-b\'o\-lum, ami a k\'e\-per\-ny\H on az eg\'er moz\-g\'a\-s\'at
k\"o\-ve\-ti\footnote{Az X sz\'o\-hasz\-n\'a\-lat k\"u\-l\"onb\-s\'e\-get tesz k\'et\-f\'e\-le po\-z\'\i{}\-ci\-\'ot jel\-z\H o
ob\-jek\-tum k\"ozt. A kur\-zor ({\em cur\-sor}) az ege\-ret k\'ep\-vi\-se\-li a k\'e\-per\-ny\H on, eb\-b\H ol
egy ki\-jel\-z\H on egy van. A {\em ca\-ret} \'al\-ta\-l\'a\-ban sz\"o\-veg\-szer\-kesz\-t\H o, sz\"o\-veg\-be\-vi\-te\-li
funk\-ci\-\'ok\-hoz kap\-cso\-l\'o\-dik, azt mu\-tat\-ja, hogy me\-lyik po\-z\'\i{}\-ci\-\'o\-ba ke\-r\"ul a k\"o\-vet\-ke\-z\H o
ka\-rak\-ter. Ilyen\-b\H ol min\-den ab\-lak\-hoz tar\-toz\-hat egy.}. Ez el\-t\'er a m\'as t\'\i{}\-pu\-s\'u
k\'e\-per\-ny\H o-out\-pu\-tok\-t\'ol, mi\-vel \'at\-l\'at\-sz\'o, \'es \'ugy mo\-zog a k\'e\-per\-ny\H o\-te\-r\"u\-let fe\-lett,
hogy nem v\'al\-toz\-tat\-ja meg azt. A prog\-ra\-mo\-z\'o min\-den ab\-lak\-hoz m\'as ala\-k\'u kur\-zort
ren\-del\-het, en\-nek m\'od\-j\'a\-ra k\'e\-s\H obb mu\-ta\-tunk p\'el\-d\'at.

A kur\-zort t\"obb jel\-lem\-z\H o ha\-t\'a\-roz\-za meg:

\begin{description}

 \item[Alak] A kur\-zor alak\-j\'at egy a {\tt CURSOR\_IMAGE} att\-ri\-b\'u\-tum\-hoz
ren\-delt {\em bit\-map\/}pel le\-het meg\-ad\-ni.

 \item[Maszk] A kur\-zor maszk\-ja azo\-kat a pi\-xe\-le\-ket ad\-ja meg, ame\-lye\-ket a kur\-zor
m\'o\-do\-s\'\i{}t a k\'e\-per\-ny\H on.

 \item[Sz\'{\i}n] A kur\-zor\-hoz ren\-del\-he\-t\"unk el\H o\-t\'er\-sz\'\i{}nt \'es h\'at\-t\'er\-sz\'\i{}nt. Ezek az
ala\-kot le\-\'\i{}\-r\'o {\em bit\-map} {\tt 1} \'es {\tt 0} bit\-je\-i\-hez ren\-de\-l\H od\-nek, ha az adott
pont maszk bit\-je egy.

 \item[Hots\-pot] A kur\-zor {\em hots\-pot\/}ja an\-nak a pont\-nak a he\-ly\'et ad\-ja meg
az {\em ima\-ge\/}-en be\-l\"ul, ami\-nek a ko\-or\-di\-n\'a\-t\'a\-it kur\-zor-ko\-or\-di\-n\'a\-t\'ak\-k\'ent
meg\-kap\-ja a prog\-ram.
\end{description}

\end{description}

A k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let egy ikon l\'et\-re\-ho\-z\'a\-s\'a\-ra mu\-tat p\'el\-d\'at.

\begin{tt}
\begin{verbatim}
short closed_bits[] = {
#include "my.icon"
};

main()
{
    Server_image closed_im;
    Icon icon;
\end{verbatim}
    /* fra\-me l\'et\-re\-ho\-z\'a\-sa ... */
\begin{verbatim}
    closed_im = (Server_image)xv_create(NULL, SERVER_IMAGE,
        XV_WIDTH,             64,
        XV_HEIGHT,            64,
        SERVER_IMAGE_BITS,    closed_bits,
        NULL);

    icon = (Icon)xv_create(frame, ICON,
        ICON_IMAGE,       closed_im,
        NULL);

    xv_set(frame, FRAME_ICON, icon, NULL);
\end{verbatim}
    /* Ese\-m\'eny\-cik\-lus ... */
\begin{verbatim}
}
\end{verbatim}
\end{tt}

A p\'el\-da el\-e\-j\'en sze\-rep\-l\H o {\tt \#include} di\-rek\-t\'\i{}\-va \'al\-tal be\-ol\-va\-sott fi\-le
tar\-tal\-maz\-za az ikon k\'e\-p\'et. Ilyen fi\-le-t Open\-Win\-dows k\"or\-nye\-zet\-ben
le\-gegy\-sze\-r\H ub\-ben az {\em Icon Edi\-tor} prog\-ram se\-g\'\i{}t\-s\'e\-g\'e\-vel le\-het el\H o\-\'al\-l\'\i{}\-ta\-ni,
ami a k\"o\-vet\-ke\-z\H o for\-m\'a\-tu\-mot hasz\-n\'al\-ja:

\begin{tt}
\begin{verbatim}
    0x0000,0x0000,0x0000,0x0000,
    0x00E0,0x01F3,0x0000,0x0000,
...
    0x0000,0x00A0,0x0040,0x0000
\end{verbatim}
\end{tt}

Az ilyen fi\-le-ok\-kal l\'et\-re\-ho\-zott {\em ima\-ge\/}-eket tet\-sz\H o\-le\-ges c\'el\-ra le\-het
hasz\-n\'al\-ni, nem csak ikon l\'et\-re\-ho\-z\'a\-s\'a\-ra. H\'at\-r\'a\-nya vi\-szont ezek\-nek a fi\-le-ok\-nak,
hogy sz\'\i{}\-nes {\em ima\-ge} nem k\'e\-sz\'\i{}t\-he\-t\H o ve\-l\"uk ({\tt Depth=1}). En\-nek a
prob\-l\'e\-m\'a\-nak egy le\-het\-s\'e\-ges meg\-ke\-r\"u\-l\'e\-se az Xlib
raj\-zo\-l\'o\-f\"ugg\-v\'e\-nyek hasz\-n\'a\-la\-ta. Ilyen\-kor az Xlib f\"ugg\-v\'e\-nyek m\'a\-so\-dik
pa\-ra\-m\'e\-te\-r\'e\-nek nem {\tt Window}, ha\-nem {\tt Pixmap} t\'\i{}\-pu\-s\'u pa\-ra\-m\'e\-tert kell
meg\-ad\-ni, amit a l\'et\-re\-ho\-zott {\tt Server\_image}-b\H ol a fe\-je\-zet el\-e\-j\'en le\-\'\i{}rt
m\'o\-don le\-het el\H o\-\'al\-l\'\i{}\-ta\-ni.

A tel\-jes\-s\'eg ked\-v\'e\-\'ert egy-egy p\'el\-d\'at mu\-ta\-tunk egy kur\-zor \'es egy nyo\-m\'o\-gomb k\'e\-p\'e\-nek
meg\-a\-d\'a\-s\'a\-ra is:

\begin{tt}
\begin{verbatim}
    cursor = (Cursor)xv_create(NULL, CURSOR,
        CURSOR_IMAGE,        crs_image,
        CURSOR_XHOT,         15,
        CURSOR_YHOT,         15,
        NULL);

    button = (Panel_item)xv_create(panel, PANEL_BUTTON,
        PANEL_LABEL_IMAGE,   button_im,
        NULL);
\end{verbatim}
\end{tt}

A kur\-zor l\'et\-re\-ho\-z\'a\-s\'a\-n\'al l\'at\-ha\-t\'o p\'el\-da a ko\-r\'ab\-ban fel\-so\-rolt kur\-zor\-jel\-lem\-z\H ok
\'al\-l\'\i{}\-t\'a\-s\'a\-ra is. A masz\-kot nem \'al\-l\'\i{}t\-ja a prog\-ram, en\-nek de\-fa\-ult \'er\-t\'e\-ke az {\em
ima\-ge} bit\-map\-je.

Bi\-zo\-nyos ala\-k\'u kur\-zo\-ro\-kat m\'as m\'od\-szer\-rel is l\'et\-re le\-het hoz\-ni, {\em ima\-ge}
hasz\-n\'a\-la\-ta n\'el\-k\"ul. L\'e\-tez\-nek ka\-rak\-ter\-k\'ent el\H o\-re de\-fi\-ni\-\'alt OPEN\-LO\-OK kur\-zo\-rok,
ezek a k\"o\-vet\-ke\-z\H o\-k\'ep\-pen hasz\-n\'al\-ha\-t\'ok:

\begin{tt}
\begin{verbatim}
    cursor = (Cursor)xv_create(NULL, CURSOR,
        CURSOR_SRC_CHAR,    OLC_BASIC_PTR,
        CURSOR_MASK_CHAR,   OLC_BASIC_MASK_PTR,
        NULL);
\end{verbatim}
\end{tt}

\noindent A p\'el\-d\'a\-ban sze\-rep\-l\H o kur\-zor a stan\-dard OPEN\-LO\-OK kur\-zor.

Mi\-u\-t\'an l\'et\-re\-hoz\-tuk a kur\-zort, azt hasz\-n\'al\-ni is akar\-juk. En\-nek m\'od\-j\'a\-ra mu\-tat
p\'el\-d\'at a k\"o\-vet\-ke\-z\H o prog\-ram\-r\'esz\-let.


\begin{tt}
\begin{verbatim}
    canvas = (Canvas)xv_create(frame, CANVAS,
        CANVAS_PAINTWINDOW_ATTRS,
            WIN_CURSOR,     cursor,
            NULL,
        NULL);
\end{verbatim}
\end{tt}


Ez a f\"ugg\-v\'eny\-h\'\i{}\-v\'as a {\em can\-vas\/}-hoz hoz\-z\'a\-ren\-de\-li a ko\-r\'ab\-ban l\'et\-re\-ho\-zott
kur\-zort. Ezu\-t\'an va\-la\-h\'any\-szor \'ugy moz\-gat\-juk az ege\-ret, hogy a kur\-zor a {\em
can\-vas} f\"o\-l\'e ke\-r\"ul, az a {\tt cursor} v\'al\-to\-z\'o\-hoz ren\-delt kur\-zor\-r\'a fog
\'at\-v\'al\-toz\-ni.

%