Previous Next Table of Contents

6. X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ÇѱÛÆùÆ®

ÀÚ, º¹½ÀÇغ¼±î¿ä? X À©µµ¿ì¿¡¼­ ÇϳªÀÇ ¹®ÀÚ ¶Ç´Â ¹®ÀÚ¿­À» Ãâ·ÂÇϱâ À§Çؼ­´Â ¸î °¡Áö °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù.

  1. ÀÚ½ÅÀÌ ¿øÇÏ´Â ÆùÆ®¸í( XLFD ¹æ½ÄÀÌµç º°¸íÀÌµç °£¿¡... )À» ¾Ë°í XLoadFont ÇÔ¼ö·Î X À©µµ¿ìÀÇ ÆùÆ®¼­¹ö(xfs)·ÎºÎÅÍ Font ID¸¦ ¹Þ¾Æ¿É´Ï´Ù.
  2. ±× ID ¸¦ °¡Áö°í ±×·¡ÇÈ ÄÜÅؽºÆ®(GC)¿¡ µî·ÏÇÕ´Ï´Ù.
  3. ÀÌÁ¦ ¸¶Áö¸·À¸·Î XDrawString ÇÔ¼ö¸¦ ½á¼­ ¿øÇϴ âÀÇ ¿øÇÏ´Â À§Ä¡¿¡´Ù ¹®ÀÚ¿­À» »Ñ·ÁÁÝ´Ï´Ù.

¾ÆÁÖ °£´ÜÇÑ °úÁ¤ÀÌÁÒ? ¿À´ÃÀº ÀÌ°ÍÀ» ½ÉÈ­ÇнÀÇÏ°Ú½À´Ï´Ù. ±×¸®°í ÇÑ±Û Ãâ·Â¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏÁÒ.

6.1 ÇÑ±Û Ãâ·Â¿¡ °üÇÑ ¸î °¡Áö À̾߱â

½ÃÀÛÇÏ´Â Áö·çÇÑ À̾߱â

ÄÄÇ»Å͸¦ ¾²¸é¼­ ¿ì¸®¸¦ °¡Àå ¸¹ÀÌ ±«·ÓÈ÷´Â ¹®Á¦ Áß¿¡ Çϳª°¡ ¹Ù·Î ÇÑ±Û ¹®Á¦ ÀÔ´Ï´Ù. À߸øµÈ Á¤Ä¡·Î ÀÎÇØ ¿ì¸® ÇÑ±Û ÄÚµå´Â Á¶ÇÕÇü/¿Ï¼ºÇü ÀÌÁ¦´Â ¾ó¸¶Àü °øÁøû¿¡¼­ ¸¸µç °ÅÀÇ À¯¸í¹«½ÇÇÑ KSC5700 ÄÚµå, M$ µîÀÌ ÁÖÃàÀÌ µÇ¾î ÃßÁøÇÏ°í ÀÖ´Â À¯´ÏÄÚµå, M$ »ç¿¡¼­ Çѱ¹ÀεéÀ» ¿ì·ÕÇÏ´Â µíÀÌ ¹öÁ£ÀÌ ¸¸µé¾î ³õ°í À©µµ±× 95¿Í À©µµ±× NT ¿¡¼­ ¾²°í ÀÖ´Â È®Àå¿Ï¼ºÇü( ¶Ç´Â ÅëÇտϼºÇü, À̸§ÀÌ ¾îÂî µÇ¾úµç ½Çü´Â °°À½ )ÀÌ ÀÖ½À´Ï´Ù. ¿ì¸®ÀÇ ÇѱÛÀÌ °ÅÀÇ ¸ö»ìÀ» ¾Î°í ÀÖ´Ù°í Çصµ °ú¾ðÀÌ ¾Æ´Õ´Ï´Ù. ÄÄÇ»ÅÍÀÇ ÃÊâ±â( ÇöÀçÀÇ ÇÑÄÄ»ç »çÀå ÀÌÂùÁø¾¾°¡ ±× À¯¸íÇÑ ¾Æ·¡ÇѱÛÀ» ¸¸µé´ø ½ÃÀý ÀÌÀü )¿¡ °¢ ȸ»ç¿¡¼­ ¿Õ¼ºÇÏ°Ô º¸¿©ÁÖ¾ú´ø ÇѱÛÈ­ÀÇ ¿­±â´Â Á¤¸»·Î ¶ß°Å¿ü½À´Ï´Ù. ±×¾ß ¹°·Ð ´ç¿¬È÷ Á¶ÇÕÇüÀ̾úÁö¿ä. ÇÏÁö¸¸ Á¤ºÎ¿Í ¸î¸î °üº¯ Á¤ºÎÀÇ ÇϼöÀÎ °üº¯ ÇÐÀÚµé ´öºÐ¿¡ ¿Ï¼ºÇüÀ̶ó´Â ±«¹°ÀÌ Åº»ýÇÏ¿´°í, ±× ÀÌÈÄ ÇѱÛÈ­ÀÇ ¿­±â´Â Âù¹°À» µÚÁý¾î ½è½À´Ï´Ù. °Ô´Ù°¡ ÇѱÛÀº ¾î´À»õ ±â¾÷ÀÌ ¼ÒÇÁÆ®¿þ¾î¸¦ ÆȾƸԱâ À§ÇÑ ¹«±â°¡ µÇ¾î¹ö¸®°í ¸»¾Ò½À´Ï´Ù. ÇѱÛÈ­ ±â¼úÀº ±â¾÷ÀÇ µ¶Á¡ÀûÀÎ ¶óÀ̼¾½º³ª ´Ù¸§ ¾ø¾îÁ³°í M$ »çÀÇ °æ¿ì¿¡´Â ´õ´õ¿í ÇѱÛÀ» º¼¸ð·Î »ï°í ÀÖÁö¿ä.

¸®´ª¼­µé¿¡°Ô ÇѱÛÈ­ ±â¼úÀ» °¡Á®´Ù Á٠ȸ»ç´Â ¾ø½À´Ï´Ù! ¹Ù·Î ¿ì¸®µéÀÇ ÈûÀ¸·Î ÀÌ·èÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ ¸®´ª¼­µéÀº ³²µéÀÌ ÇØÁÖ±æ ¹Ù¶óÁöµµ ¾Ê½À´Ï´Ù. ¹Ù·Î ÀÌÁ¦ºÎÅÍ ¿ì¸® ½º½º·ÎÀÇ ÈûÀ¸·Î ¾Æ¸§´Ù¿î ÇѱÛÀ» ±¸ÇöÇØ ³ª°©½Ã´Ù. ÇѱÛÀ» º¼¸ð·Î Àâ°í ¼ÒºñÀÚ¸¦ ¿ì·ÕÇÏ´Â ±â¾÷µé¿¡°Ô º»¶§¸¦ º¸¿©Áà¾ß ÇÒ ½Ã°£À̶ó°í »ý°¢ÇÕ´Ï´Ù.

ÇÑ±Û Ãâ·Â! ¹«¾ùÀÌ ´Ù¸¥°¡?

¸ðµç ¹®Á¦´Â ¹Ù·Î ¿µ¹® ·Î¸¶ÀÚ´Â 1 ¹ÙÀÌÆ®·Î Ç¥ÇöÇÏ°íµµ ³²´Â ¹Ý¸é, Çѱ¹¾î, Áß±¹¾î ÀϺ»¾î¿Í °°Àº µ¿¾ç±Ç ¾ð¾îµéÀº 2 ¹ÙÀÌÆ® ÀÌ»óÀ» ÇÊ¿ä·Î ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. µû¶ó¼­ 1 ¹ÙÀÌÆ® ·Î¸¶ÀÚ¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼ö¿Í´Â ´Ù¸¥ ¹æ½ÄÀÇ ÇÔ¼ö¸¦ »ç¿ëÇϸç, ¹®ÀÚ¿­¿¡ ´ëÇÑ ¾à°£ÀÇ °¡°ø°úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù.

±× ¿Ü¿¡ ÆùÆ®¸¦ Àоî¿À´Â °Í, GC¿¡ µî·ÏÇÏ´Â °Í°ú °°Àº °úÁ¤Àº Â÷ÀÌ ¾ø½À´Ï´Ù. ´ÜÁö Á¶°ÇÀÌ Çϳª ÀÖ´Ù¸é X ÆùÆ®¼­¹ö(xfs, X À©µµ¿ì¸¦ ½ÃÀÛÇÏ¸é ¿ì¸® ¸ð¸£°Ô ¶° ÀÖ½À´Ï´Ù ±×·¯´Ï °ÆÁ¤ÇÏ½Ç ÇÊ¿ä¾øÀ½ )°¡ 2 ¹ÙÀÌÆ® Ãâ·ÂÀ» Áö¿øÇÏ´À³ÄÀÇ ¹®Á¦Àε¥, ¿äÁò¿¡ 2 ¹Ù ÀÌÆ® Áö¿øÇÏÁö ¾Ê´Â X ¼­¹öµµ ÀÖ³ª¿ä? :)

X À©µµ¿ì¿¡¼­ ÇÑ±Û ¾îÇÃÀ» °³¹ßÇÏ´Â ¹æ¹ý

X À©µµ¿ì¿¡¼­ ÇÑ±Û ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ´Â ¹æ¹ýÀº Å©°Ô 2 °¡Áö°¡ ÀÖ½À´Ï´Ù.

ÀÌ¿Ü¿¡µµ ¿ì¸®°¡ À©µµ±×¿¡¼­ ÁÖ·Î »ç¿ëÇÏ¿´´ø ÇѸÞÇѱÛó·³ HanX ¶ó°í ÇÏ´Â °ÍÀ» ÀÌ¿ëÇؼ­ ÇѱÛÀ» º¼ ¼ö ÀÖµµ·Ï(Ãâ·Â¸¸) ÇÏ´Â ¹æ½Äµµ ÀÖ½À´Ï´Ù.

¿ì¸®°¡ ÀÍÇô¾ß ÇÒ °ÍÀº ÀüÀÚ/ÈÄÀÚÀÇ °³¹ß ¸ðµÎ¿¡ °øÅëµÇ´Â °¡Àå ±âº»ÀûÀÎ ÇѱÛÃâ·Â ¹æ¹ýÀÔ´Ï´Ù. ÇöÀç Àú´Â ÈÄÀÚÀÇ °³¹ß¿¡ ³ë·Â ÁßÀÔ´Ï´Ù. ¾î¼­ »¡¸® XFree86 ¿¡µµ »ó¿ë ¸øÁö ¾ÊÀº ÇÑ±Û ½Ã½ºÅÛÀ» žÀçÇÏ¿© ÇÁ·Î±×·¥ °³¹ß¿¡¼­ ÇÑ±Û Ã³¸®¿¡ ÇÒ¾ÖÇÏ´Â ½Ã°£°ú ³ë·ÂÀ» ¾Æ³¥ ¼ö ÀÖµµ·Ï ÇؾßÇÑ´Ù°í ¹Ï½À´Ï´Ù.

6.2 ÇÑ±Û Ãâ·Â °úÁ¤

¹«¾ùÀÌ ¶Ç ¹®Á¦Àΰ¡?

ÇöÀç X À©µµ¿ì¿¡¼­ »ç¿ëµÇ´Â ÇÑ±Û ÆùÆ®ÀÇ Á¾·ù´Â Å©°Ô 3 °¡Áö¶ó°í ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù. 1 ¹ø°·Î´Â ¿©·¯ºÐÀÌ ¾Ö¿ëÇϽô ÇÑÅÒ Á¶ÇÕÇü ÆùÆ®ÀÔ´Ï´Ù. 2 ¹ø°´Â ´ë¿ìÆùÆ®, ÇѾçÆùÆ® µîÀÇ ¿Ï¼ºÇü ÆùÆ®ÀÔ´Ï´Ù. 3 ¹ø°´Â °°Àº ¿Ï¼ºÇü ÆùÆ®À̸鼭µµ ¾ÕÀÇ µÎ °³¿Í´Â ¾ÆÁÖ »ç¼ÒÇÏ°Ô ´Ù¸¥ 󸮰úÁ¤À» °ÅÃÄ¾ß ÇÏ´Â »ïº¸ ÆùÆ®°¡ ÀÖ½À´Ï´Ù.

ÀÌ·¸°Ô ´Ù¾çÇÑ ÆùÆ® Çü½ÄÀÇ Á¸Àç´Â ´Ù¾çÇÑ ÆùÆ® Ãâ·Â ¿¹ºñÀÛ¾÷ÀÌ ÇÊ¿äÇÔÀ» ÀÇ¹Ì ÇÕ´Ï´Ù.

Àú´Â ÀÏ´Ü ¿©±â¼­ Á¦ÀÏ °£´ÜÇÑ 2 ¹ø° °æ¿ì¸¸ ¼³¸íµå¸®±â·Î ÇÏ°Ú½À´Ï´Ù. ¹Ì·ÁÇÑ ÆùÆ®ÀÎ 1 ¹ø° ÇÑÅÒ Á¶ÇÕÇü ÆùÆ®ÀÇ Ãâ·ÂÀ» ´Ù¸¥ ÇÑ ¹øÀÇ °­ÀǸ¦ ÇÒ¾ÖÇØ¾ß ÇÒ ¸¸Å­ ¸¹Àº À̾߱Ⱑ ÇÊ¿äÇϱ⠶§¹®ÀÔ´Ï´Ù. ( »ç½ÇÀº »ïº¸ ÆùÆ®°¡ ´õ ½±Áö¸¸¼­µµ ±¸ÇÒ ¼ö°¡ ¾øÀ¸´Ï... )

ÀÚ, ±×·¯¸é ¿©·¯ºÐÀÌ ¿Ï¼ºÇü ¹æ½ÄÀÇ ÆùÆ®¸¦ °¡Áö°í ÀÖ´Ù°í »ý°¢ÇÏ°í ½ÃÀÛÇÏ°Ú½À´Ï´Ù

 ÇÔ¼öÀÇ ¿øÇü : <X11/Xlib.h> ¿¡ ¼±¾ð

  XDrawString16(display, d, gc, x, y, string, length)
             Display *display;
             Drawable d;
             GC gc;
             int x, y;
             XChar2b *string;
             int length;

¿ì¸®´Â ÇÑ±Û ÆùÆ®¸¦ °¡Áö°í ÇѱÛÀ» Ãâ·ÂÇϱâ À§Çؼ­ XDrawString À̶ó´Â 1 ¹ÙÀÌÆ® ¾ð¾î±Ç ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í ³¡¿¡ 16À̶ó´Â ¼ýÀÚ°¡ ºÙÀº ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. ±×¸®°í À¯½ÉÈ÷ »ìÆ캸¸é XDrawString ¿¡¼­´Â char * ÇüÀ̾ú´ø ºÎºÐÀÌ ¿©±â¼­´Â XChar2b * ÇüÀ¸·Î ¹Ù²î¾î ÀÖÁÒ. ¿ì¸®´Â ¿©±â¼­ »õ·Î¿î ÀÚ·áÇü¿¡ ´ëÇؼ­ ¶ÇÇÑ ¾Ë¾ÆºÁ¾ß ÇÕ´Ï´Ù. :<

  typedef struct {         /* normal 16 bit characters are two bytes */
            unsigned char byte1;
            unsigned char byte2;
   } XChar2b;

¿ì¸® ¸»¿¡ ´ëÇÑ Ç¥ÇöÀº ÇöÀç 2 ¹ÙÀÌÆ® Ç¥Çö¹ýÀÌ °¡Àå ¸¹ÀÌ »ç¿ëµÇ°í ÀÖÀ¸¸é Ç¥ÁØÀûÀ̶ó°íµµ ¸»ÇÒ ¼ö ÀÖÀ» °Í °°½À´Ï´Ù. ÇÑ±Û ÇÑ ±ÛÀÚ "ÇÑ" À̶ó´Â ¹®ÀÚ´Â ¿µ¹® 2 ¹ÙÀÌÆ®·Î µÇ¾î ÀÖ°í ±×°Í°ú ÀÏ´ëÀÏ ´ëÀÀÇÏ´Â °ÍÀÌ ¹Ù·Î XChar2b Çü º¯¼öÀÔ´Ï´Ù. µû¶ó¼­ ¿ì¸®´Â char * Çü ¹è¿­À» XChar2b * Çü ¹è¿­·Î º¯È¯½ÃÄÑ Áֱ⸸ ÇÏ¸é µË´Ï´Ù. ±Ùµ¥ ¿ì¸®°¡ ¸¹ÀÌ °¡Áö°í ÀÖ´Â ÇѾçÆùÆ®³ª ´ë¿ìÆùÆ®ÀÇ °æ¿ì, ¸»ÀÌ ½±Áö ±×·¸°Ô´Â µÇÁø ¾Ê½À´Ï´Ù.

´ÙÀ½°ú °°Àº ¿¬»êÀÌ ÀÌ·ç¾îÁ®¾ß ÇÕ´Ï´Ù. ÀÏ´Ü 'ÇÑ'À̶ó°í ÇÏ´Â 2 ¹ÙÀÌÆ® ÇÑ±Û ÇÑ ±ÛÀÚ°¡ ÀÖ´Ù°í Ä¡¸é...

   char *Han = "ÇÑ";
   XChar2b HanX;

   HanX.byte1 = *(Han)   - 0x80;        /* ÁÖÀÇ! 0x80 °ªÀ» »©ÁÖ°í ÀÖ´Ù */
   HanX.byte2 = *(Han+1) - 0x80;

º¸½Ã´Ù½ÃÇÇ ±×³É ÇÑ±Û 2 ¹ÙÀÌÆ®¿Í XChar2b Çü ±¸Á¶Ã¼ ¸â¹ö °£ÀÇ °£´ÜÇÑ ÀÏ´ëÀÏ ´ëÀÀÀÌ ¾Æ´Ï¶ó, 0x80 °ªÀ» »©ÁÖ¾î¾ß ÇÑ´Ù´Â ÀÚÀßÇÑ Áß°£ °úÁ¤ÀÌ ÇÊ¿äÇÕ´Ï´Ù. ( Âü°í·Î »ïº¸ ÆùÆ®´Â 0x80 °ªÀº °ªÀ» »©ÁÖÁö ¾Ê°í ±×³É ÀÏ´ëÀÏ ´ëÀÀ½Ãŵ´Ï´Ù. )

ÀÌÁ¦ Á» °¨ÀÌ ¿À¼Ì½À´Ï±î? ¾Ë°í ³ª´Ï ±²ÀåÈ÷ ½±Áö ¾Ê³ª¿ä? :)

#include <X11/Xlib.h>
#include <stdio.h>

int main()
{
        Display *dpy;
        int screen;
        Window w;
        Font hanFont, engFont;
        GC gc;
        XChar2b HStrBuf[256];
        int n;

        dpy = XOpenDisplay( NULL );

        screen = DefaultScreen( dpy );
        w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 400, 300, 2, 
                        BlackPixel( dpy, screen ), WhitePixel( dpy, screen ));
        XMapWindow( dpy, w );
        XFlush(dpy);

        sleep(4);       /* ¿Ö ³Ö¾úÀ»±î¿ä? */

        gc = XCreateGC ( dpy, w, 0L, (XGCValues *) NULL );
        hanFont = XLoadFont ( dpy, 
                        "-daewoo-mincho-*-r-normal--16-*-*-*-c-*-*-*" );

        engFont = XLoadFont ( dpy, "fixed" );

        XSetFont( dpy, gc, hanFont );
        n = convert_ks_to_display("¾È³çÇϼ¼¿ä¸®´ª¼­", HStrBuf, 10);
        XDrawString16(dpy, w, gc, 100, 100, HStrBuf, n);

        XSetFont( dpy, gc, engFont );
        XDrawString(dpy, w, gc, 100, 150, "Welcome to Linux!", 17 );

        XFlush(dpy);
        getchar();
}

/* ÇÑÅÒ ¼Ò½º¿¡¼­ Àοë */

int convert_ks_to_display(char *str, XChar2b *buf, int n)
{
  int i, j;

  for (i = 0, j = 0; i < n;) {
    buf[j].byte1 = str[i] - 0x80;
    buf[j].byte2 = str[i+1] - 0x80;
    i += 2, j++;
  }
  return j;
}

ÄÄÆÄÀÏ ¹æ¹ýÀº ¶È°°½À´Ï´Ù. ÀÌ»ó ¾øÀÌ ½ÇÇàµÇ·Á¸é ¿©·¯ºÐÀº /usr/X11R6/lib/fonts µð·ºÅ丮ÀÇ ÇϺΠµð·ºÅ丮 misc µð·ºÅ丮¿¡ ´ë¿ì ÆùÆ®°¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù. È­ÀϸíÀº hanglm16.pcf.Z ÀÔ´Ï´Ù. fonts.dir È­ÀÏÀ» »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù. ÇöÀç °¡Áö°í °è½Ã´Â ¿Ï¼ºÇü ¹æ½ÄÀÇ ÆùÆ®¸¦ ¾Æ¹«°Å³ª Àû¾îÁÖ½Ã¸é µË´Ï´Ù. Àü¿¡ ¼³¸íµå·È´ø XLFD ¹æ½ÄÀÇ Ç¥±â ¶Ç´Â ÀÚÁÖ ¾²´Â ÆùÆ®¸í¿¡ ´ëÇÏ¿© fonts.alias ¿¡´Ù º°¸íÀ» Á¤ÇØÁÖ½Ã°í ±× º°¸íÀ» »ç¿ëÇϽõçÁö ¸¶À½´ë·Î ÇÏ½Ã¸é µË´Ï´Ù. Âü°í·Î À§¿¡¼­ »ç¿ëÇÑ ¿µ¹® ÆùÆ®¸í fixed ´Â »ç½Ç º°¸í¿¡ ÇØ´çµË´Ï´Ù. fonts.alias ¸Ç ¾Õ¿¡ Á¤ÀǵǾî ÀÖ½À´Ï´Ù.

¾ÆÁ÷µµ ³²Àº ¹®Á¦°¡ ÀÖ´Ù!

Çѱ۷ΠÃâ·ÂÀ» Çغ¸½Ã´Ï ¾î¶°¼¼¿ä? Á¦°¡ óÀ½À¸·Î ÇÑÅÒ ¼Ò½º¸¦ º¸°í µ¶ÇÐÇϸ鼭 º°°Í ¾Æ´ÏÁö¸¸¼­µµ ÇѱÛÀÌ Ãâ·ÂµÇ´Ï Âü ±âºÐÀÌ ÁÁ´õ±º¿ä. ±Ùµ¥ ¹®Á¦´Â ±×·¸°Ô °£´ÜÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ¹«¾ùÀ̳ı¸¿ä?

À§ÀÇ ¼Ò½º¸¦ Àß »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù. Àß º¸½Ã¸é ÇѱÛÀº Çѱ۴ë·Î µû·Î, ¿µ¹®Àº ¿µ¹®´ë·Î µû·Î Ãâ·ÂÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ°ÍÀÌ ¹«¾ùÀ» ÀǹÌÇÏ´Â °ÍÀϱî¿ä? ¿¹! ±×·¸½À´Ï´Ù. ¿ì¸®´Â ¾ÈŸ±õ°Ôµµ Çѱ۰ú ¿µ¹®À» È¥¿ëÇؼ­ ¾²´Â ½Ã´ë¿¡ »ì°í ÀÖ½À´Ï´Ù. µû¶ó¼­ ¿ì¸®´Â Á¾Á¾ »ç¿ëÀڷκÎÅÍ ´ÙÀ½°ú °°Àº ¹®ÀÚ¿­À» ¹Þ°Ô µË´Ï´Ù.

 char *MixedString = "ÀúÀÇ ÄÚ³Ý ÁÖ¼Ò´Â freeyong@soback.kornet.nm.kr ÀÔ´Ï´Ù";

¹«¾ùÀÌ ¹®Á¦ÀÌ°Ú½À´Ï±î?

XDrawString ÇÔ¼ö´Â ¿À·ÎÁö 1 ¹ÙÀÌÆ® ¹®ÀÚ±Ç ÆùÆ®¸¸ Ãâ·ÂÇÕ´Ï´Ù. ÀÌ¿¡ ºñÇÏ¿© XDrawString16 ÇÔ¼ö´Â ¹Ý´ë·Î 2 ¹ÙÀÌÆ® ¹®ÀÚ±Ç ÆùÆ®¸¸ Ãâ·ÂÇÕ´Ï´Ù. ±×·¸´Ù¸é À§¿Í °°ÀÌ Çѱ۰ú ¿µ¹®ÀÌ ¼¯¿© ÀÖ´Â °æ¿ì¿¡´Â ¹®ÀÚ¿­À» ÁÖ¿í °Ë»öÇϸ鼭 Çѱ۰ú ¿µ¹®À» µû·Î Ãâ·ÂÇØÁÖ¾î¾ß ÇÑ´Ù´Â °á·ÐÀÌ ³ª¿É´Ï´Ù. :<

ÀÌ ºÎºÐÀÌ ¾à°£ÀÇ ³ë·ÂÀ» ÇÊ¿ä·Î ÇÑ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿µ¹®°ú ÇѱÛÀÇ Á¶È­¸¦ ¸ÂÃß´Â °ÍÀÌ ÇöÀç·Î¼­´Â ¾ÆÁÖ Áß¿äÇÕ´Ï´Ù. ¾îÂî ÇÏ´Ùº¸´Ï ¿ì¸®³ª¶óµµ ¿µ¾î¹®È­±ÇÀÌ µÇ¹ö¸° µíÇÑ ¾¹¾µÇÑ ±âºÐÀ» ¹ö¸± ¼ö°¡ ¾ø³×¿ä. ƯÈ÷ ÄÄÇ»ÅÍ ºÐ¾ß¿¡ À־ Çѱ۸¸ ÀßµÇ°í ¿µ¹®Àº ´ë½Å¿¡ ²ÎÀÌ µÇ¹ö¸°´Ù¸é ¾Æ¹«µµ ±×°Å ¾²Áö ¾Ê½À´Ï´Ù.

µû¶ó¼­ ¿©·¯ºÐÀº ÆùÆ® ·Îµù/ÆùÆ®¸¦ GC ¿¡ µî·Ï/ÆùÆ® Ãâ·Â ÀÌ·¸°Ô °£´ÜÇÑ °úÁ¤À» ³Ñ ¾î¼­¼­ ÆùÆ®¿¡ ´ëÇØ¿© ÀÚÀ¯ÀÚÀç·Î ó¸®ÇÏ½Ç ¼ö ÀÖ´Â ´É·ÂÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù.

Çѱ۰ú ¿µ¹®À» ±¸º°Çؼ­ Âï±â

¿©±â¼­ºÎÅÍ´Â Á» ¾î·Á¿öÁö±â ½ÃÀÛÇÕ´Ï´Ù. Á¦°¡ ¿©±â¿¡ Àû¾î³õÀº ÇÔ¼ö´Â ÇÑÅÒ ¼Ò½º¿¡¼­ ÇѱÛó¸® ºÎºÐÀ» º¸°í °í´ë·Î ÀúÀÇ ÇÑ±Û fvwm 2.0.42ÀÇ ÇÑ±Û Ã³¸®·çƾÀ¸·Î º¹»çÇÏ°í ¾à°£À» ¼öÁ¤ÇÑ °ÍÀÔ´Ï´Ù. ÀÌ ¸ðµç ºÎºÐÀ» ÀÌÇØÇÏ½Ç ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ±×¸®°í ¾î´À Á¤µµ ½Ç·ÂÀÌ µÇ½Ã´Â ºÐµéÀº ÀÌ¹Ì ´Ù ¾Ë°í °è½Ã´Â ³»¿ëÀ̶ó°í ¹Ï½À´Ï´Ù. ¿©·¯ºÐÀÌ ÁÖ¸ñÇÏ¼Å¾ß ÇÒ ºÎºÐÀº ¼Ò½º ¾È¿¡¼­ ¼³¸íÀ» µå¸®°Ú½À´Ï´Ù.

void HanXDrawString(Display *d, Drawable w, GC gc, XFontStruct *hfont,
        XFontStruct *efont, int x, int hy, int ey,
        char *str, int len, int hcode, int ftype )
{
  int n;
  char *p;
  XChar2b buf[256];

/*

  ÀÌ ÇÔ¼ö´Â º¸ÅëÀÇ ¾Æ½ºÅ° ¿µ¹®ÀÚ¿Í ÇѱÛÀÌ È¥ÇյǾî ÀÖ´Â ¹®ÀÚ¿­À» ¹Þ½À´Ï´Ù. 
  ¿©±â¼­´Â str À̶ó´Â º¯¼öÀÔ´Ï´Ù.
  
*/ 

  while (len > 0) {
    if (*str & 0x80) {
    /*
        ¹Ù·Î 0x80 °ú AND ¿¬»êÀ» ÇÔÀ¸·Î½á ¹ÙÀÌÆ®ÀÇ 8 ¹ø° ºñÆ®°¡ 1 ·Î µÇ¾î ÀÖ´Â
        °¡¸¦ È®ÀÎÇÕ´Ï´Ù. ±×·¡¼­ ÂüÀÌ¸é ±× ¹ÙÀÌÆ®¿Í ´ÙÀ½ ¹ÙÀÌÆ® µÎ °³´Â ÇѱÛÀ»
        ±¸¼ºÇÑ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
    */
    
      for (p = str; len > 0 && (*p & 0x80); p += 2, len -= 2)
        ;

    /*    
       ¿©±â¿¡ for ( ) ; ¶ó°í ÇÏ´Â Àç¹ÌÀÖ´Â ¹®ÀåÀÌ ÀÖ½À´Ï´Ù. ÇöÀç ÇѱÛÀÌ Ã³À½À¸
       ·Î ³ªÅ¸³­ À§Ä¡ºÎÅÍ ¾îµð±îÁö ÇѱÛÀÌ Áö¼ÓµÇ´Â°¡¸¦ üũÇؼ­ ÇÑ±Û ¹®ÀÚ¿­¸¸
       Ãß·Á³»¾î ó¸®ÇÏ°íÀÚ ÇÏ´Â °Ì´Ï´Ù.
    */

      n = HanXCharConvert(str,buf,p-str, hcode, ftype );
      XSetFont( d, gc, hfont->fid );
      XDrawString16(d,w,gc,x,hy,buf,n);
      /* ¹Ù·Î ¿©±â¼­ XDrawString16 ÇÔ¼ö¸¦ ½á¼­ Ãâ·ÂÇÏ°í ÀÖ½À´Ï´Ù */
      x += XTextWidth16(hfont,buf,n);
      /* XTextWidth16 À̶ó´Â ÇÔ¼ö´Â ´«¿©°Ü º¸¼Å¾ß°ÚÁÒ? */
    }
    else {
    /* ¿µ¹®ÀÏ ¶§ ó¸®ÇÏ´Â ·çƾÀÔ´Ï´Ù */
      for (p = str; len > 0 && !(*p & 0x80); p++, len--)
        ;
      /* ¸¶Âù°¡Áö·Î °è¼ÓÀûÀ¸·Î ASCII ¹®ÀÚ¸¸ ³ª¿Ã ¶§±îÁö Æ÷ÀÎÅÍ À̵¿ */
      XSetFont( d, gc, efont->fid );
      XDrawString(d,w,gc,x,ey,str,p-str);
      x += XTextWidth(efont,str,p-str);
    }
    str = p;
  }
  XSetFont( d, gc, efont->fid );
}

/*
   À§¿¡¼­ ¾µ µ¥ ¾øÀÌ °è¼Ó XSetFont ¸¦ ¾²´Â ÀÌÀ¯´Â ÇϳªÀÇ GC ¿¡´Ù°¡ ÇÑ ¹øÀº
   ÇÑ±Û ÆùÆ®¸¦ µî·ÏÇß´Ù°¡, ¶Ç ÇÑ ¹øÀº ¿µ¹® ÆùÆ®¸¦ µî·ÏÇÏ´Â ÀÛ¾÷À» Çϱ⠶§¹®
   ÀÔ´Ï´Ù.
*/

ÀÚ, ¼³¸íÀ» µå¸®ÁÒ. À§¿¡¼­ »ç¿ëÇÑ Å×Å©´ÐÀº ÇÑ±Û ÇÁ·Î±×·¡¹ÖÀ» ÇϽ÷Á´Â ºÐµéÀº ¾ÆÁÖ ±âº»ÀûÀ¸·Î ÀÍÈ÷¼Ì¾î¾ß ÇÏ´Â ³»¿ëÀÔ´Ï´Ù. ÇÑ±Û ÇÑ ±ÛÀÚ´Â 2 ¹ÙÀÌÆ®À̸ç, ù¹ø° ¹ÙÀÌÆ®ÀÇ MSB ´Â 1 ·Î ¼ÂÆõȴٴ »ç½ÇÀÌÁÒ. ±×·¡¼­ ÇѱÛÀÎÁö ¾Æ´ÑÁö¸¦ üũÇÏ´Â °¡Àå ±âº»ÀûÀ̸鼭µµ À¯ÀÏÇÑ ¹æ¹ýÀº ¹Ù·Î ºñÆ®¸Å½ºÅ© ¿¬»êÀ» Çغ¸´Â °Ì´Ï´Ù. 0x80 À̴ϱñ ÀÌÁø¼ö·Î´Â 1000 0000 ÀÔ´Ï´Ù. ÀÌ ¼ýÀÚ¿Í & ¿¬»êÀ» ÇÏ¸é µÑ ´Ù 1 ÀÎ °æ¿ì¸¸ ÂüÀÌ µÇ¹Ç·Î °ú¿¬ MSB °¡ 1 Àΰ¡ ¾Æ´Ñ°¡¸¦ ½Äº°Çس¾ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù.

ÀÚ¼¼ÇÑ ³»¿ëÀº C ¾ð¾îÃ¥À» º¸½Ã°í ºñÆ®¸Å½ºÅ© ¿¬»êÀ» °øºÎÇϽñ⠹ٶø´Ï´Ù. Á¦°¡ ±ÇÇÏ°í ½ÍÀº Ã¥Àº Ä¿´Ï°Ç & ¸®Ä¡ÀÇ "C Programming Language" ÀÔ´Ï´Ù. Ä¿´Ï°Ç°ú ¸®Ä¡°¡ ¾î¶² »ç¶÷ÀÎÁö´Â ¾Æ½ÃÁÒ? :) ¸ð¸£½Ã¸é ²À ¾Ë¾Æº¸¼¼¿ä. ±âÃÊ »ó½Ä¿¡ ÇØ´çÇϴϱñ¿ä :)

ÆùÆ®¿¡ ´ëÇÑ Áß¿äÇÑ Á¤º¸ ¾Ë¾Æ³»±â

ÇÑ±Û Ãâ·Â ¹ú½áºÎÅÍ ÀÌ·¸°Ô ¾î·Æ±º¿ä. ( ±Ùµ¥ ÇÑ±Û ÀÔ·ÂÀº ´õ¿í ´õ Ȳ´çÇÒ °Ì´Ï´Ù )

ÀÌÁ¦ºÎÅÍ ´Ù·ç°íÀÚ ÇÏ´Â ³»¿ëÀº ¿ì¸®°¡ óÇÒ ¼ö ÀÖ´Â ¾î¶² °æ¿ì¿¡¶óµµ ÀÚÀ¯ÀÚÀç·Î ÆùÆ®¸¦ ó¸®ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. XDrawString À̳ª XDrawString16 À̶ó´Â ÇÔ¼ö´Â ¿ì¸®°¡ Á¤ÇØÁÖÁö ¾Ê¾Æµµ ÆùÆ® °íÀ¯ÀÇ Æ¯¼º¿¡ µû¶ó ¹®ÀÚ¿­À» ¿¹»Ú°Ô ÇÑ ÁÙ·Î ³ªÅ¸³»ÁÝ´Ï´Ù. ÇÏÁö¸¸ µÎ ÁÙ ÀÌ»óÀÌ µÇ´Â ¹®ÀÚ¿­Àº? ÁÙ°£°ÝÀ» ¾î¶»°Ô ÇÒ±î¿ä? Ãâ·ÂµÈ ¹®ÀÚ¿­Àº µµ´ëü ¾ó¸¶ÀÇ ÆøÀ» °¡Áö°í ÀÖ´ÂÁö... µîµî ¹®ÀÚ¿­À» ¿©·¯ºÐ ¸¶À½²¯ Ãâ·ÂÇϱâ À§Çؼ­´Â ÆùÆ®¿¡ ´ëÇÑ Àü¹ÝÀûÀÎ Á¤º¸ ¶Ç´Â ÇÊ¿ä¿¡ µû¶ó ÇÑ ±ÛÀÚ ÇÑ ±ÛÀÚ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë¾Æ³»¾ß ÇÕ´Ï´Ù.

±Ùµ¥ ÆùÆ®¿¡ ´ëÇÑ Á¤º¸´Â ¾îµð¿¡ ÀÖ´Ù°í ÇßÁÒ? ¿¹. ¸Â½À´Ï´Ù. ±×°ÍÀº X ¼­¹ö¿¡ ÀÖ½À´Ï´Ù. ¿ì¸®´Â º¸Åë °¡Àå °£´ÜÇÑ ÇüÅ·μ­ XLoadFont ÇÔ¼ö¸¦ ½á¼­ ÆùÆ® ID ¸¦ ¾ò¾î¿É´Ï´Ù.

°¡Àå °£´ÜÇÑ ¹æ¹ý

       XQueryTextExtents16(display, font_ID, string, nchars,
       direction_return, font_ascent_return,
                               font_descent_return, overall_return)
             Display *display;
             XID font_ID;
             XChar2b *string;
             int nchars;
             int *direction_return;
             int *font_ascent_return, *font_descent_return;
             XCharStruct *overall_return;

¿ì¸®°¡ »ç¿ëÇÏ°íÀÚ ÇÏ´Â ÇÔ¼ö´Â ¹Ù·Î XQueryTextExtents16 À̶ó´Â ¾ÆÁÖ ±ä À̸§À» °¡Áø ÇÔ¼öÀÔ´Ï´Ù. ¿ì¸® ºñ¿µ¾î ¹®È­±Ç »ç¶÷µé¿¡°Ô´Â ÈûµéÁö ¸ô¶óµµ ±×µé¿¡°Ô´Â ½¬¿î ÇÔ¼ö¸íÀÌ°ÚÁÒ? X ·Î ½ÃÀÛÇÏ´Â ÇÔ¼ö´Â ¹Ù·Î Xlib ÇÔ¼öÀÓÀ» ÀǹÌÇÏ´Â °ÍÀÌ°í Query Á¶»çÇÏ´Ù, TextExtents ´Â ÅؽºÆ®ÀÇ ¿µ¿ª ¹üÀ§, µÚ¿¡ 16 À» ºÙÀÎ °ÍÀº 1 ¹ÙÀÌÆ®±Ç ¹®ÀÚ°¡ ¾Æ´Ï¶ó 2 ¹ÙÀÌÆ®±Ç ¹®ÀÚÀÓÀ» ³ªÅ¸³»ÁÖ°í ÀÖ½À´Ï´Ù. ÀÏ´Ü À§¿¡¼­ ÆùÆ® ID º¯¼öÇüÀÌ XID ÀÎ °ÍÀº ¿©·¯ºÐÀÌ »ý°¢ÇØ º¸½Ê½Ã¿ä. 2 ¹ÙÀÌÆ®±Ç ¹®ÀÚ¿­À̹ǷΠXChar2b Çü ¹è¿­À» »ç¿ëÇÏ¿´°í nchars ´Â ±× ¹è¿­ÀÇ Å©±â¸¦ ¾Ë·ÁÁÝ´Ï´Ù ÀÌÁ¦ºÎÅÍ 4 °³ÀÇ Æ÷ÀÎÅÍ Àü´Þº¯¼öµéÀÌ ÀÖ±º¿ä. ¿©·¯ºÐÀÌ »ý°¢Çϱ⿡ ¿Ö ÀÌ ³à¼®µéÀº Æ÷ÀÎÅÍ·Î ÁÖ¾îÁ³À»±î¿ä? ¸Â½À´Ï´Ù. ÀÌ º¯¼öµé¿¡´Ù°¡ ¿ì¸®°¡ ¿øÇÏ´Â Á¤º¸¸¦ ¾ò¾î ¿À·Á°í ÇÏ´Â °ÍÀÔ´Ï´Ù.

direction_return Àº FontLeftToRight, FontRightToLeft ¶ó´Â Á¤º¸°¡ µé¾î ÀÖ½À´Ï´Ù ¿µ¾î¸¦ Á»¸¸ ÀÐÀ¸½Ç ¼ö ÀÖ´Ù¸é ¹«½¼ ¶æÀÎÁö ¾Æ½Ç °Ì´Ï´Ù. º¸ÅëÀÇ °æ¿ì FontLeftToRight ÀÌ°ÚÁÒ? ¹®ÀÚ¿­ÀÇ Ãâ·ÂÀÌ Á --< ¿ì Àΰ¡? ¾Æ´Ï¸é ±× ¹Ý´ëÀΰ¡ ÀÔ´Ï´Ù.

font_ascent_return°ú font_descent_return ¿¡ ´ëÇÑ À̾߱â´Â ÇÑ±Û ¹®ÀÚ¿Í´Â ´Ù¸¥ ¿µ¹® ¹®ÀÚ¸¸ÀÇ Æ¯¼º¿¡ ´ëÇؼ­ ¾Ë¾Æ¾ß ¾ê±â°¡ µÉ °Í °°±º¿ä. ¿ì¸® ¹®ÀÚ´Â ÀÌ·¯ÇÑ °³³äÀÌ ¾ø´Ù°í³ª ÇÒ±î¿ä? ¿µ¹®ÀÚ y ¸¦ ¿¹·Î µé¾îº¾½Ã´Ù. º¸Åë ¿ì¸®°¡ ÁßÇб³ óÀ½ µé¾î°¡¼­( À¹! ¿äÁòÀº ÃʵîÇб³¿¡¼­ºÎÅÍ Çϳª¿ä? ) ¿µ¾î ½Ã°£¿¡ ÇÏ´Â ÀÏÀº ¾ËÆĺª ¾²±â¿´½À´Ï´Ù. ÀÏ´Ü ¹®¹æ±¸¿¡ °¡¼­ µû·Î Á¦ÀÛµÈ ¿µ¾î ³ëÆ®¸¦ ÇÑ ±Ç »ð´Ï´Ù. °øÃ¥À» ÆîÄ¡¸é ¸¶Ä¡ ¿À¼±Áöó·³ ÁÙÀÌ ÁÖ¿íÁÖ¿í ±×¾îÁ® ÀÖ°í, ÀÚ¼¼È÷ º¸½Ã¸é ÆĶõÁÙ ¸»°í »¡°£ÁÙÀÌ ±×¾îÁ® ÀÖ´ø °ÍÀÌ ±â¾ï³ª½Ê´Ï±î? ±× »¡°£ÁÙÀº baseline À̶ó°í ÇÕ´Ï´Ù. a b c ¿Í °°Àº ¹®ÀÚ´Â ¸ðµÎ ±× »¡°£ÁÙ À§¿¡ ¾º¿©Áý´Ï´Ù. ÇÏÁö¸¸ g j y °°Àº ¹®ÀÚµéÀº »¡°£ÁÙ ¾Æ·¡·Î ³»·Á°¡´Â ºÎºÐÀÌ ÀÖÁö¿ä? ÀÌÁ¦ °¨ÀÌ ¿À¼ÌÀ» °Ì´Ï´Ù. font_ascent_return ( ascentÀÇ ÀÇ¹Ì¿Í descentÀÇ Àǹ̸¦ »çÀüÀ» ã¾Æº¸½Ã¸é ¾ÆÁÖ ¸íÈ®ÇØÁý´Ï´Ù )´Â ±× »¡°£ baseline À§·Î ¸î Çȼ¿¸¸Å­ ¿Ã¶ó°¡ Àִ°¡? ±×¸®°í font_descent_returnÀº baseline ¾Æ·¡·Î ¾ó¸¶¸¸Å­Àΰ¡¸¦ ³ªÅ¸³»ÁÝ´Ï´Ù. ¿ì¸® Çѱ۰ú´Â ÀüÇô °ü·ÃÀÌ ¾ø´Ù°í ÇÒ ¼ö ÀÖÁÒ. :) ÇÏÁö¸¸! ±×·¸Áöµµ ¾Ê½À´Ï´Ù. ¿ì¸®°¡ Çѱ۰ú ¿µ¹®À» È¥¿ëÇÒ ¶§ ¿ì¸® ÇѱÛÀº ¿µ¹®°ú Á¶È­¸¦ ÀÌ·ç±â À§Çؼ­ Ç×»ó baseline À§¿¡ ¾º¿©Á®¾ß ÇÏ°ÚÁÒ? ¾û¶×ÇÏ°Ô y ÀÚÀÇ ¹ØºÎºÐ°ú ÆòÇàÇÏ°Ô ¾º¿©Áö¸é ¿µ º¸±â ½È¾îÁý´Ï´Ù.

overall_returnÀº ±ÛÀÚ ±×´ë·Î Àü¹ÝÀûÀÎ Á¤º¸¸¦ °¡Á®´Ù ÁÝ´Ï´Ù. »õ·Î¿î ÀÚ·áÇüÀ̱º¿ä. XCharStruct ¶ó´Â.... ÀÌ ÀÚ·áÇüÀÌ ¾î¶»°Ô ÀÌ·ç¾îÁ® ÀÖ´ÂÁö´Â Xlib.h Çì´õ È­ÀÏ¿¡¼­ ã¾Æº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.

/*
 * per character font metric information.
 */
typedef struct {
    short       lbearing;       /* origin to left edge of raster */
    short       rbearing;       /* origin to right edge of raster */
    short       width;          /* advance to next char's origin */
    short       ascent;         /* baseline to top edge of raster */
    short       descent;        /* baseline to bottom edge of raster */
    unsigned short attributes;  /* per char flags (not predefined) */
} XCharStruct;

ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â °ú¿¬ Áö±Ý Ãâ·ÂÇÏ·Á°í ÇÏ´Â ¹®ÀÚ¿­ÀÌ ¾î´À ¸¸Å­ÀÇ ¿µ¿ªÀ» Â÷ÁöÇÒ °ÍÀΰ¡¸¦ °¡´ÆÇÏ´Â °ÍÀÔ´Ï´Ù. ¹®ÀÚ¿­ÀÇ ³ôÀÌ(height)´Â ´ÙÀ½°ú °°½À´Ï´Ù.

        ascent ¸Ø¹ö + descent ¸â¹ö

À§·Î ¾ó¸¶¸¸Å­À̸ç, ¾Æ·¡·Î ¾ó¸¶¸¸Å­ÀÎÁö¸¦ ´õÇÏ¸é µË´Ï´Ù. ÇѱÛÀº descent = 0 :) ±×·¡µµ ÀÏ°ü¼ºÀ» À§Çؼ­ Ç×»ó ÀÌ·¸°Ô ½áÁֽʽÿä.

´ÙÀ½À¸·Î ¹®ÀÚ¿­ÀÇ Æø(width)Àº ¾î¶»°Ô °è»êÇÒ±î¿ä?

        rbearing ¸â¹ö - lbearing ¸â¹ö   ¶Ç´Â ±×³É width ¸â¹ö¸¦ »ç¿ë

1 ¹ÙÀÌÆ®±Ç ¹®ÀÚ¿¡ ´ëÇؼ­´Â XQueryTextExtents ¸¦ ¾¹´Ï´Ù.

´õ ÁÁÀº ¹æ¹ý

À§ÀÇ ¹æ¹ýÀº ¾î¶² Á¤º¸¸¦ ¾Ë°íÀÚ ÇÒ ¶§ Ç×»ó X ¼­¹ö¿¡°Ô ¿äûÀ» ÇØ¾ß ÇϹǷΠ³×Æ®¿öÅ© ·Îµå°¡ ¸¹ÀÌ °Å¸®°Ô µÇ¸ç, ÇÁ·Î±×·¥ÀÌ ´À·ÁÁö´Â ÁÖ¹üÀÌ µË´Ï´Ù. ±×·¡¼­ ÇÁ·Î±×·¥´Ù¿î ÇÁ·Î±×·¥À» Â¥´Â °æ¿ì¿¡´Â ´ëºÎºÐ XLoadFont ·Î ÆùÆ®·ÎµùÇÏ°í, XQueryTextExtents(16) °°Àº ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í ´Ù¸¥ ¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù.

XLoadFont ´ë½Å¿¡ XLoadQuerFont ÇÔ¼ö¸¦ ¾¹½Ã´Ù.

XLoadQueryFont ´Â ÆùÆ®¸¦ ·ÎµùÇϸ鼭 Query ÇÑ´Ù´Â ÀǹÌÀÔ´Ï´Ù.

        XFontStruct *XLoadQueryFont(display, name)
                     Display *display;
                     char *name;

XLoadFont¿¡¼­Ã³·³ ÆùÆ®¸íÀ» Àü´ÞÇØÁÖ´Â °ÍÀº °°Áö¸¸, º¸½Ã´Â ¹Ù¿Í °°ÀÌ ¹ÝȯµÇ´Â °ªÀÌ Font ÇüÀÌ ¾Æ´Ï¶ó XFontStruct ¶ó´Â ÀÚ·áÇüÀÔ´Ï´Ù.

typedef struct   
  XExtData    *ext_data;      /* hook for extension to hang data */
  Font        fid;            /* Font id for this font */ /* ÁÖ¸ñ! */
  unsigned    direction;      /* hint about direction the font is painted */
  unsigned    min_char_or_byte2;/* first character */
  unsigned    max_char_or_byte2;/* last character */
  unsigned    min_byte1;      /* first row that exists */
  unsigned    max_byte1;      /* last row that exists */
  Bool        all_chars_exist;/* flag if all characters have non-zero size*/
  unsigned    default_char;   /* char to print for undefined character */
  int         n_properties;   /* how many properties there are */
  XFontProp   *properties;    /* pointer to array of additional properties*/
  XCharStruct min_bounds;     /* minimum bounds over all existing char*/
  XCharStruct max_bounds;     /* maximum bounds over all existing char*/
  XCharStruct *per_char;      /* first_char to last_char information */
  int         ascent;         /* log. extent above baseline for spacing */
  int         descent;        /* log. descent below baseline for spacing */
} XFontStruct;

ÀÚ·áÇüÀÌ ²Ï º¹ÀâÇÑ Æí¿¡ ¼ÓÇϴ±º¿ä. :) ÁÖ¸ñÇÏ½Ç °ÍÀº ÆùÆ® ID °¡ XFontStruct ÀÚ·áÇüÀÇ fid ¸â¹ö¿¡ ÀúÀåµÇ¾î ÀÖ´Ù´Â »ç½ÇÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ÆùÆ® ID ¸¦ ¾²°í ½ÍÀ¸½Ç ¶§´Â fid ¸â¹ö°ªÀ» »ç¿ëÇϼ¼¿ä.

XSetFont ÇÔ¼ö¸¦ »ç¿ëÇÏ½Ç ¶§´Â ¹Ù·Î ÆùÆ® ID ¸¦ »ç¿ëÇϼž߰ÚÁÒ?

ÀÏ´Ü ±¸Á¶Ã¼¿¡´Ù°¡ ¸ù¶¥ ÆùÆ® °ü·Ã Á¤º¸¸¦ °¡Á®¿ÔÀ¸¹Ç·Î ÀÌÁ¦´Â ¾î¶² Á¤º¸¸¦ ¾Ë¾Æ ³»±â À§ÇØ X ¼­¹ö¿Í Åë½ÅÇÒ ÇÊ¿ä°¡ ¾ø´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.

¿©·¯ºÐÀÌ XFontStruct ±¸Á¶Ã¼¸¦ °¡Áö°í °è½Ã¸é ´ÙÀ½°ú °°Àº ÇÔ¼öµéÀ» ÅëÇؼ­ ¿©·¯°¡Áö Á¤º¸¸¦ ij³»½Ç ¼ö ÀÖ½À´Ï´Ù.

¿À´ÃÀÇ ¼³¸íÀº ¿©±â¼­ ¸¶Ä¡±â·Î ÇÏ°Ú½À´Ï´Ù. »ç½Ç ÆùÆ®¿¡ ´ëÇÑ ¼³¸íÀº ±×¸²À» º¸¿© µå¸®¸é¼­ ÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù´Â »ý°¢ÀÌ µå´Â±º¿ä. ¼­Á¡¿¡ °¡º¸½Ã¸é ¸¹Àº Âü°í ¼­ÀûÀÌ ÀÖÀ¸¹Ç·Î ±×³É ½½Â½ ÆùÆ® Property ¿¡ °üÇÑ ºÎºÐÀ» Àß »ìÆ캸½Ã±â ¹Ù¶ø´Ï´Ù.

±×¸®°í ÇÑ±Û ÇÁ¸°ÆÃÀ» À§Çؼ­´Â ÇÑÅÒ ¼Ò½ºÀÇ hangul.c ºÎºÐÀ» Àß ÈȾ½Ã±â ¹Ù¶ø´Ï´Ù. ¶Ç´Â ÇÑ±Û fvwm 2.0.42 ¼Ò½º¿¡¼­ libs µð·ºÅ丮¿¡ °¡º¸½Ã¸é HangulSupport.c ¶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ±×°ÍÀ» »ìÆ캸½Ã´øÁö¿ä...


Previous Next Table of Contents