¸®´ª½º ±âŸ ÀÚ·á

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   X-Windows Programming #7 1998/07/04 (16:31)
À̸§ ±èÈ¿¿ø
¹øÈ£ 47
Á¶È¸ 359
º»¹®
¡º¸®´ª½º Çдç-¸®´ª½º °­Á / ¿¬Àç (go LINUX)¡» 237¹ø
Á¦  ¸ñ:[°­Á 07] X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ±×·¡ÇÈ                        
¿Ã¸°ÀÌ:geoman  (À̸¸¿ë  )    96/05/02 23:12    ÀÐÀ½:2210 °ü·ÃÀÚ·á ¾øÀ½
-----------------------------------------------------------------------------


/* ±×·¡ÇÈÀÇ ¿¬½À */

Xlib ±×·¡ÇÈÀº X ÇÁ·Î±×·¡¹ÖÀÇ ±âÃÊ°¡ µÇ¾îÁÖ´Â ¾ÆÁÖ ±âº»ÀûÀÎ ±â´ÉÀÔ´Ï´Ù. X À©µµ
¿ì´Â ¿ÂÅë ±×·¡ÇÈÀ¸·Î °¡µæ Â÷ ÀÖ´Ù°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. Á¡ ÇϳªºÎÅÍ ¸ðµç º¹ÀâÇÑ
µµÇüÀº °á±¹ Xlib ÀÇ ÇÔ¼ö¸¦ ÅëÇؼ­ °¡´ÉÇÑ °ÍÀÔ´Ï´Ù. Á¦ °èȹÀ¸·Î´Â ¾öû³­ ¼Óµµ·Î
(!) Xlib ÇÁ·Î±×·¡¹ÖÀ» ¸¶Ä¡°í ¾î¼­ »¡¸® ¿©·¯ºÐÀÌ Àç¹ÌÀÖ¾î ÇÒ Xt ÇÁ·Î±×·¡¹ÖÀ¸·Î
³Ñ¾î°¡°í ½ÍÀºµ¥¿ä, ¹Ù·Î ±× °÷¿¡¼­ À§Á¬À» »õ·Î ¸¸µç´Ùµç°¡ ÇÒ ¶§ ¾ÆÁÖ À¯¿ëÇÏ°Ô
¾²ÀÔ´Ï´Ù. Àú¸¦ µû¶ó ¿À½Ã¸é ¿©·¯ºÐ¸¸ÀÇ ¸ÚÁø À§Á¬À» ¸¸µé ¼ö ÀÖµµ·Ï ¾È³»Çص帮°Ú
½À´Ï´Ù. ¶Ç ¸ð¸£ÁÒ. ¿©·¯ºÐ Áß¿¡¼­ Á¤¸»·Î »ó»ó·ÂÀÌ ¶Ù¾î³ª°í ¸ÚÁø À§Á¬ÀÌ ³ª¿À¸é
FWF(Free Widget Foundation)ÀÇ À§Á¬¼Â¿¡ Æ÷ÇԵǾî Àü¼¼°èÀÇ ÇÁ·Î±×·¡¸Óµé¿¡°Ô ¾Ë·Á
Áú ¼öµµ ÀÖ½À´Ï´Ù. ¼Ò½º°¡ °ø°³µÇ¾î ÀÖÁö ¾Ê´Â ´Ù¸¥ ½Ã½ºÅÛ¿¡¼­´Â ºÒ°¡´ÉÇÑ ÀÏ ¾Æ´Ï
°Ú½À´Ï±î?

´Ù½Ã ÇÑ ¹ø È®ÀÎÇÕ´Ï´Ù! Xlib ±×·¡ÇÈÀº Ç×»ó GC ¶ó°í ÇÏ´Â ¸®¼Ò½º¸¦ °¡Áö°í ÇÕ´Ï´Ù.
±× GC´Â ±×·¡ÇÈ¿¡ °üÇÑ ¿©·¯ Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â ³à¼®Àä, ´ç¿¬È÷ ¼­¹ö Ãø¿¡´Ù
GC »ý¼ºÀ» ÀÇ·ÚÇÏ°í ¿ì¸®´Â ±× GCÀÇ ID¸¸À» ¹Þ¾Æ¿É´Ï´Ù. ÀÌ°ÍÀº X À©µµ¿ìÀÇ ³×Æ®¿ö
Å© ÁöÇâÀû Ư¼º¿¡¼­ ³ª¿À´Â °ÍÀ¸·Î¼­, ³×Æ®¿öÅ©¸¦ ÅëÇؼ­ ÃÖ¼ÒÀÇ Á¤º¸¸¦ ÀüÇϸ鼭
µµ ¿øÇÏ´Â ±â´ÉÀ» ¾ò°íÀÚ Çϱ⠶§¹®ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ¸Å¹ø red ¶ó´Â »ö»óÀ¸·Î ¼±À»
±×À¸¶ó´Â 100¹øÀÇ ¸í·ÉÀÌ ÀÖ´Ù¸é, red·Î ±×¸®¶ó°í´Â ¸í·ÉÀÌ °è¼Ó ³×Æ®¿öÅ©¸¦ Ÿ°í
¼­¹ö·Î ÀüÇØÁ®¾ß ÇÒ °ÍÀÔ´Ï´Ù. ¿©·¯ °¡Áö ÁÖ¹®»çÇ×À» ¹Ì¸® µî·ÏÇسõ°í °£´ÜÈ÷ ±×
ID¸¸À» Àü¼ÛÇÏ´Â ¹æ½ÄÀÌ ÈξÀ ³×Æ®¿öÅ©ÀÇ ·Îµå¸¦ ÁÙÀÌ´Â ¹æ¹ýÀÌ µÇ°ÚÁÒ? ¹°·Ð Á׾
´Â °ÍÀº Ç×»ó ¼­¹öÀÔ´Ï´Ù. :)

<!-- ÀÌÁ¦ºÎÅÍ ±×·¡ÇÈÀ» ¿¬½ÀÇغ¾½Ã´Ù >

¿¹Á¦ 7)

/* ------------------------------- CUT HERE ------------------------------- */

#include <X11/Xlib.h>

/* »ö»ó À̸§¿¡ ÇØ´çÇÏ´Â Çȼ¿°ª ¹ÝȯÇÏ´Â ÇÔ¼ö */
unsigned long UsrColorPixel( Display*, char* );
/* ¿äûÀ» Ç÷¯½¬ÇÏ°í ÁöÁ¤µÈ Ãʸ¸Å­ Áö¿¬½ÃÅ°´Â ÇÔ¼ö */
void Pause( Display*, int );

static XPoint points[] = {{ 200, 50 },{ 100, 150 },{ 300, 150 },{ 200, 50 }};
static XSegment segs[] = {{ 10, 10, 390, 190 },{ 10, 190, 390, 10 }};
static char dash_list[] = { 20, 5, 10, 5 };

int main()
{
Display *d;
Window w; /* One TopLevel Window & Two Child Windows */
GC gc;
XGCValues gv;

/* ¼­¹ö¿Í Á¢¼ÓÇϱ⠱׸®°í º¯¼öµéÀ» ÃʱâÈ­ */
d = XOpenDisplay ( NULL );

/* ÀÚ, ½ÃÀÛÇغ¼±î¿ä? */

w = XCreateSimpleWindow ( d, DefaultRootWindow( d ),
         100, 100, 400, 200, 1,
 BlackPixel(d,0), WhitePixel(d,0) );
XMapWindow( d, w );
Pause( d, 2 );



/*
* [1] Á¡(Point)À» Âï¾îº¾´Ï´Ù. XDrawPoint(s) ÇÔ¼ö »ç¿ë
*/
gv.foreground = UsrColorPixel( d, "red" );
gc = XCreateGC( d, w, GCForeground, &gv );
XDrawPoint ( d, w, gc, 200, 100 );
Pause( d, 3 );

gv.foreground = UsrColorPixel( d, "blue" );
XChangeGC ( d, gc, GCForeground, &gv );
XDrawPoints ( d, w, gc, points, 3, CoordModeOrigin );
Pause( d, 3 );

/*
* °íÇػ󵵿¡¼­´Â ¹¹ °ÅÀÇ ¾Èº¸ÀÏ Á¤µµ·Î RED»öÀÇ ÀÛÀº Á¡ Çϳª,
* ±×¸®°í ³ª¼­ BLUE»öÀÇ Á¡ 3°³¸¦ Âï°í ÀÖ½À´Ï´Ù. Á¤¸»·Î ÁýÁßÇؼ­
* º¸¼Å¾ß ÇÒ °Ì´Ï´Ù. ¸ð´ÏÅÍ°¡ ´õ·¯¿ì¸é ¸ÕÁö¿Í ±¸º°ÀÌ ¾ÈµÉÁöµµ... :)
*/
XClearWindow( d, w );
{
   int i, j;
   for ( j = 0; j < 200 ; j++ )
for ( i = 0; i < 400 ; i++ )
{
   XDrawPoint( d, w, gc, i, j );
   XFlush ( d );
}
}
Pause( d, 3 );

/*
* BLUE Á¡À¸·Î â Çϳª °¡µæÈ÷ Ä¥Çغ¾´Ï´Ù. XFlush ÇÔ¼ö¸¦ °íÀÇ·Î ½á¼­
* ±× °úÁ¤À» ¾Ë¾Æº¼ ¼ö ÀÖµµ·Ï ÇÏ¿´½À´Ï´Ù. »ý°¢º¸´Ù ºü¸£°Ô ÂïÈú °Ì´Ï´Ù.
* ¸®´ª½º´Â ¿ÏÀüÇÑ ÀǹÌÀÇ 32ºñÆ® OS À̴ϱî¿ä.
*/



/*
* [2] ¼±(Line)À» ±×·Áº¾´Ï´Ù.
*/

XSetWindowBackground ( d, w, UsrColorPixel( d, "blue" ) );
gv.foreground = WhitePixel( d, 0 );
gv.background = UsrColorPixel( d, "red" );
gv.line_width = 20;
XChangeGC( d, gc, GCForeground|GCBackground|GCLineWidth, &gv );
XDrawLine ( d, w, gc, 20, 20, 380, 180 ); /* CapButt */
Pause ( d, 3 );

gv.cap_style = CapRound;
XChangeGC( d, gc, GCCapStyle, &gv );
XClearWindow( d, w );
XDrawLine ( d, w, gc, 380, 20, 20, 180 );
Pause ( d, 3 );

gv.cap_style = CapProjecting;
XChangeGC( d, gc, GCCapStyle, &gv );
XClearWindow( d, w );
XDrawLine ( d, w, gc, 20, 20, 380, 180 );
Pause ( d, 3 );

/*
* ¿©±â±îÁö´Â XDrawLine ÇÔ¼ö¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. ĸ ½ºÅ¸ÀÏ(Cap)ÀÌ ¼­·Î
* ¾î¶»°Ô ´Ù¸¥Áö È®ÀÎÇØ º¸½Ê½Ã¿ä.
*/

XSetLineAttributes ( d, gc, 10, LineDoubleDash, CapRound, JoinRound );
XSetDashes( d, gc, 0, dash_list, 4 );
XClearWindow( d, w );
XDrawSegments ( d, w, gc, segs, 2 );
Pause ( d, 3 );

XClearWindow ( d, w );
XSetLineAttributes ( d, gc, 15, LineOnOffDash, CapButt, JoinBevel );
XDrawLines( d, w, gc, points, 4, CoordModeOrigin );
Pause ( d, 3 );

/*
* ¼±³¡Á¡ ½ºÅ¸ÀÏ¿¡´Â CapButt, CapRound, CapProjecting 3 °¡Áö°¡ ÀÖ½À´Ï´Ù.
* ¼±°ú ¼±ÀÌ ¸¸³ª´Â ¹æ½Ä¿¡µµ ¼¼ °¡Áö°¡ ÀÖ½À´Ï´Ù. JoinMiter, JoinRound,
* ±×¸®°í JoinBevel ÀÌ ±×°ÍÀÌÁÒ.
* Áß¿äÇÑ °Í! ¼±ÀÇ ½ºÅ¸ÀÏ¿¡´Â ±×³É LineSolid, LineOnOffDash, LineDouble-
* Dash °¡ ÀÖ½À´Ï´Ù.
* XSetLineAttributes(), XSetDashes()´Â ¿¬±¸°úÁ¦ÀÔ´Ï´Ù.
*/




/*
* [3] ÀÌÁ¦ 2Â÷¿øÀ¸·Î °¡º¾½Ã´Ù. »ç°¢ÇüºÎÅÍ ½ÃÀÛ!
*/

XClearWindow( d, w );
XSetLineAttributes ( d, gc, 5, LineSolid, CapButt, JoinRound );
XDrawRectangle( d, w, gc, 50 /* X */, 50 /* Y */,
300 /* width */, 100 /* height */ );
Pause( d, 3 );

{
   XRectangle rect[7];
   int i;

   for ( i = 0; i < 7 ; i ++ )
   {
rect[i].x = 10 + i * 50; rect[i].y = 20;
rect[i].width = 40 ; rect[i].height = 150;
   }
   XClearWindow( d, w );
   XSetLineAttributes(d,gc,1,LineDoubleDash,CapProjecting,JoinMiter);
   XDrawRectangles ( d, w, gc, rect, 7 );
   Pause ( d, 3 );
}

/*
* ÀÚ, XDrawRectangle(s)ÀÇ »ç¿ë¹ýÀ» ¾Æ¼Ì³ª¿ä? ±×·¸´Ù¸é ¿¬±¸°úÁ¦°¡ ÀÖ½º
* ´Ï´Ù. ÀÌµé ´ë½Å¿¡ XFillRectangle(s)¸¦ ½áº¸½Ê½Ã¿ä. ¾î¶² ÀÏÀÌ ÀϾ
* ´Ï±î?
*/



/*
* [4] µÕ±×·± °Íµµ ±×·Áº¾½Ã´Ù.
*/

{
   int i, radi;
   XArc arc[2];

   XClearWindow ( d, w );
   XSetLineAttributes(d,gc,10,LineSolid,CapRound,JoinRound);
   for ( radi = 0 ; radi <= 360 ; radi += 90 )
   {
XDrawArc ( d, w, gc, 10, 10, 380, 180, 0 * 64, radi * 64 );
Pause( d, 1 );
   }
   for ( i = 0 ; i < 2 ; i ++ ) {
arc[i].x = 30 + 200 * i;
arc[i].y = 30;
arc[i].width = arc[i].height = 100;
arc[i].angle1 = 0 * 64;
arc[i].angle2 = 90 * ( i + 1 ) * 64;
   }
   XClearWindow ( d, w );
   XDrawArcs( d, w, gc, arc, 2 );
   Pause( d, 1 );
   XSetForeground( d, gc, UsrColorPixel(d,"yellow") );
   for ( i = 0 ; i < 2 ; i ++ ) {
       XClearWindow ( d, w );
XSetArcMode ( d, gc, i == 0 ? ArcPieSlice : ArcChord );
    for ( radi = 0 ; radi <= 360 ; radi += 90 )
    {
   XFillArc ( d, w, gc, 10, 10, 380, 180, 0 * 64, radi * 64 );
   Pause( d, 1 );
    }
    XClearWindow( d, w );
    XFillArcs( d, w, gc, arc, 2 );
    Pause( d, 1 );
   }
}



/* GC, â Æı« & ¼­¹ö¿ÍÀÇ Á¢¼Ó ÇØÁ¦ */
XFreeGC( d, gc );
XUnmapWindow( d, w );
XDestroyWindow( d, w );

XCloseDisplay( d );

return 0;
}

/*

 UsrColorPixel() : ÁÖ¾îÁø À̸§ÀÇ »ö»ó¿¡ ´ëÇÑ ±âº» Ä÷¯¸ÊÀÇ Çȼ¿°ª ¹Ýȯ

*/

unsigned long UsrColorPixel( display, name )
Display *display;
char *name;
{
Colormap cmap;
XColor c0, c1;

cmap = DefaultColormap( display, 0 );

XAllocNamedColor( display, cmap, name, &c0, &c1 );

return ( c0.pixel );
}

void Pause( Display *d, int secs )
{
XFlush ( d );
sleep( secs );
}

/* --------------------------------- CUT HERE ------------------------------ */

ÄÄÆÄÀÏÀº -lX11 ¿É¼ÇÀ» Áּż­ Xlib ¿Í ¸µÅ©½ÃÄÑ ÁÖ½Ã¸é µË´Ï´Ù.

ÃÖ´ëÇÑ Xlib ±×·¡ÇÈ ÇÔ¼öµéÀÇ ±â´ÉÀ» º¸ÀÌ·Á°í ³ë·ÂÇß½À´Ï´Ù. ÇÏÁö¸¸ À§¿¡¼­ º¸¿©
µå¸° °Í¸¸À¸·Î´Â ¸¹ÀÌ ºÎÁ·ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ÀÚÀ¯·Î¿î ´Ù°¢ÇüÀ» ±×¸®¸é¼­ »ö»óÀ»
Ä¥ÇÒ ¼ö ÀÖ´Â XFillPolygon()°ú °°ÀÌ À¯¿ëÇÑ ÇÔ¼ö´Â ¼³¸íµå¸®Áö ¾Ê¾Ò½À´Ï´Ù. ÀÚ¼¼ÇÑ
°ÍÀº ¿©·¯ºÐÀÇ Å½±¸¿¡ ´Þ·Á ÀÖ½À´Ï´Ù.

´ÙÀ½ ¹ø¿¡´Â ÆùÆ® Ãâ·ÂÇÏ´Â ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¸±â·Î ÇսôÙ. ¿µ¹®ÀÚ Ãâ·Â°ú ´ç¿¬È÷
ÇÑ±Û Ãâ·Â¿¡ °üÇÑ ¾ê±â¸¦ Çغ¸µµ·Ï ÇÏÁÒ. ÆùÆ® °­ÀǸ¦ ¸¶Ä¡¸é ÀÌÁ¦ X À©µµ¿ì´Ù¿î
ÇÁ·Î±×·¥À» © ¼ö ÀÖ´Â "À̺¥Æ®"¸¦ ´Ù·ê ¼ö ÀÖ°Ô µÇ°Ú±º¿ä. Xlib µµ ¾ó¸¶ ³²Áö ¾Ê¾Ò
½À´Ï´Ù. Èû³»¼¼¿ä. :)

¹®ÀÇ»çÇ×Àº ³ª¿ìÄÄ ¾ÆÀ̵ð geoman À̳ª geoman@nownuri.nowcom.co.kr·Î º¸³»Áֽñ⠹ٶø´Ï
´Ù.

<!-- È­°îµ¿¿¡ »ç´Â ¸¸¿ëÀÌ -->

HomePage Backward Forward Post Reply List
1998 by swindler