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

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   X-Windows Programming #9 1998/07/04 (16:33)
À̸§ ±èÈ¿¿ø
¹øÈ£ 49
Á¶È¸ 557
º»¹®
¡º¸®´ª½º Çдç-¸®´ª½º °­Á / ¿¬Àç (go LINUX)¡» 307¹ø
Á¦  ¸ñ:[°­Á 09] X ÇÁ·Î±×·¡¹Ö ±âÃÊ : ÇѱÛÆùÆ®                      
¿Ã¸°ÀÌ:geoman  (À̸¸¿ë  )    96/07/14 17:27    ÀÐÀ½:2387 °ü·ÃÀÚ·á ¾øÀ½
-----------------------------------------------------------------------------


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

(1) ÀÚ½ÅÀÌ ¿øÇÏ´Â ÆùÆ®¸í( XLFD ¹æ½ÄÀÌµç º°¸íÀÌµç °£¿¡... )À» ¾Ë°í XLoadFont
    ÇÔ¼ö·Î X À©µµ¿ìÀÇ ÆùÆ®¼­¹ö(xfs)·ÎºÎÅÍ Font ID¸¦ ¹Þ¾Æ¿É´Ï´Ù.

(2) ±× ID ¸¦ °¡Áö°í ±×·¡ÇÈ ÄÜÅؽºÆ®(GC)¿¡ µî·ÏÇÕ´Ï´Ù.

(3) ÀÌÁ¦ ¸¶Áö¸·À¸·Î XDrawString ÇÔ¼ö¸¦ ½á¼­ ¿øÇϴ âÀÇ ¿øÇÏ´Â À§Ä¡¿¡´Ù
    ¹®ÀÚ¿­À» »Ñ·ÁÁÝ´Ï´Ù.

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

===============================================================================

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

===============================================================================

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

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

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


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

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

- XDrawString ÇÔ¼ö ´ë½Å¿¡ XDrawString16 À̶ó´Â ÇÔ¼ö »ç¿ë

- º¸ÅëÀÇ ¹®ÀÚ¿­À» ±×´ë·Î »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç, XChar2b ¶ó´Â ±¸Á¶Ã¼ ÀÚ·áÇüÀ» »ç¿ë
  ÇØ¾ß ÇÑ´Ù. µû¶ó¼­ º¸Åë ¹®ÀÚ¿­ --> XChar2bÇü ¹è¿­·Î ¹Ù²ãÁÖ´Â Áö·çÇÑ °úÁ¤ÀÌ
  ÇÊ¿ä

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

- ¿µ¹®°ú ÇѱÛÀ» °°ÀÌ Ãâ·ÂÇØ¾ß ÇϹǷΠ¿µ¹®Àº XDrawString À¸·Î, ÇѱÛÀº XDrawSt-
  ring16 ÇÔ¼ö¸¦ µû·Î ¾¹´Ï´Ù. ±×·¸´Ù¸é ¿ì¸®´Â º¸ÅëÀÇ C ¹®ÀÚ¿­¿¡¼­ ¿µ¹®Àº ¿µ¹®
  ´ë·Î, ÇѱÛÀº Çѱ۴ë·Î ÃßÃâÇس»´Â ±×·± ÀÛ¾÷ÀÌ ÇÊ¿ä


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

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

- °¡Àå ±ÍÂúÀº ¹æ¹ý, ±×¸®°í °¡Àå ¶È¶ÈÄ¡ ¸øÇÑ ¹æ¹ý, ÇÏÁö¸¸ °ÅÀÇ ´ëºÎºÐÀÇ ÇѱÛ
  ¾îÇõéÀÌ Ã¤¿ëÇÏ°í ÀÖ´Â ¹æ½Ä, À߸¸ ÇÏ¸é °¡Àå ¿Ïº®ÇÑ ÇÑ±Û ±¸Çö ¹æ¹ý :
  ¹Ù·Î °¢°¢ÀÇ ÇÁ·Î±×·¥ÀÌ ÇÑ±Û ±â´ÉÀ» ³»ÀåÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. º¸Åë À¯¸íÇÑ ¿µ¹®
  ÇÁ·Î±×·¥ÀÇ ¼Ò½º¿¡¼­ ÀÔ·Â/Ãâ·Â¿¡ °üÇÑ ºÎºÐÀ» ÇØÅ·ÇÏ´Â ¹æ½Ä¿¡¼­ ¸¹ÀÌ ¾ºÀÌ°í
  ÀÖ½À´Ï´Ù.

  ¿¹) ÇÑÅÒ, ÇÑEmacs, ÇÑ±Û fvwm 2.* µî Àý´ë ´Ù¼öÀÇ ÇÁ·Î±×·¥µé

- ¸¹Àº ÇÁ·Î±×·¡¸ÓÀÇ °øµ¿³ë·ÂÀÌ ÇÊ¿äÇÑ ¹æ¹ý, º¸Åë ¿ì¸®°¡ À©µµ±× 3.1 °ú °°Àº
  °÷¿¡¼­ ÈçÈ÷ º¸´Â ¹æ¹ý : Áï! X À©µµ¿ì¿¡¼­ÀÇ Çϳª·Î ÅëÀÏµÈ ÀÔ·Â/Ãâ·Â ¹æ½ÄÀ»
  ( Input/Output Method ) ¸¸µé¾î ³õ°í ±× ±â´ÉÀ» ¾îÇõ鿡¼­ »ç¿ëÇÏ´Â ¹æ½Ä.
  Áï, ÇÑ±Û ±â´ÉÀ» ³»ÀåÇÏÁö ¾Ê°í, ÀÔÃâ·Â¿¡ ´ëÇÑ ±âº»ÀûÀÎ ±ÔÄ¢¸¸ ÁöÄÑÁÖ¸é µÇ´Â
  ¹æ½ÄÀÔ´Ï´Ù.
  ¾ÈŸ±õ°Ôµµ »ó¿ë X À©µµ¿ì¿¡¼­´Â ÀÌ·± ÇÑ±Û ±â´ÉÀ» ±â¼úÁøµé¿¡ ÀÇÇØ ¸¸µé¾ú´ÂÁö
  ¸ð¸£Áö¸¸ ¿ì¸®°¡ ¾²°í ÀÖ´Â XFree86 ¿¡´Â ¾ÆÁ÷ ÀÌ·± ±â´ÉÀÌ ¾ø½À´Ï´Ù. ÀÌ°ÍÀº
  Àü¹® ¿ë¾î·Î ¸»ÇÏÀÚ¸é X À©µµ¿ìÀÇ Internationalization ±â´É Áï I18N °ú L10N
  À» ÀÌ¿ëÇÑ´Ù°í ¸»ÇÕ´Ï´Ù. ( Âü°í·Î I18N Àº Internationalization À̶ó´Â ´Ü¾î
  ¿¡¼­ óÀ½ I ¿Í ¸Ç³¡ N »çÀÌ¿¡ 18 °³ÀÇ ¿µ¹®ÀÚ°¡ µé¾îÀֱ⠶§¹®¿¡ ±×·¸°Ô ¸í¸í
  ÇÑ °ÍÀÌ°í, L10NÀº Localization À̶ó´Â ±ÛÀÚ¿¡¼­ À¯·¡ÇÕ´Ï´Ù )
  ¿©·¯ºÐÀÌ IBM AIX °°Àº °ÍÀ» ½áº¸¼Ì´ÂÁö ¸ð¸£°Ú±º¿ä. ÀÌ ¹æ¹ýÀº °øÅëµÈ ¾î¶² ÀÏ
  °ü¼ºÀ» Áشٴ ÀÕÁ¡ÀÌ ÀÖÁö¸¸ ÀÚÄ© À߸ø ¸¸µé¸é °ÅÀÇ ¾ûÅ͸® ÇѱÛÀÌ µÇ°í ¸¿´Ï´Ù
  :) ÇöÀç X11 R6 ¿¡¼­´Â ÃæºÐÇÑ °³¹ßȯ°æÀÌ ÁÖ¾îÁ® ÀÖ½À´Ï´Ù. ´ÜÁö...

  ¿¹) ?

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

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

ÀÌÁ¦ºÎÅÍ º»°ÝÀûÀ¸·Î ¾Ë¾Æ º¸µµ·Ï ÇÏÁÒ. :)

½Ã·ÃÀÇ ½ÃÀÛÀÔ´Ï´Ù. ¸¶À½ÀÇ Áغñ¸¦ ÇصνÃÁÒ.

===============================================================================

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

===============================================================================

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

- ÇöÀç 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 °ªÀº °ªÀ» »©ÁÖÁö ¾Ê°í ±×³É ÀÏ´ëÀÏ ´ëÀÀ½Ãŵ´Ï´Ù. )

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

/* --------------------------- C U T -- H E R E ----------------------------*/
#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;
}

/* -------------------------------- E N D ---------------------------------- */

ÄÄÆÄÀÏ ¹æ¹ýÀº ¶È°°½À´Ï´Ù. ÀÌ»ó ¾øÀÌ ½ÇÇàµÇ·Á¸é ¿©·¯ºÐÀº /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 ¸¦ ¾ò¾î¿É
´Ï´Ù.

-------------------------------------------------------------------------------
(1) °¡Àå °£´ÜÇÑ ¹æ¹ý
-------------------------------------------------------------------------------

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

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

-------------------------------------------------------------------------------
(2) ´õ ÁÁÀº ¹æ¹ý
-------------------------------------------------------------------------------

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

XTextWidth16
============

      int XTextWidth(font_struct, string, count)
            XFontStruct *font_struct;
            char *string;
            int count;

      int XTextWidth16(font_struct, string, count)
            XFontStruct *font_struct;
            XChar2b *string;
            int count;

ÁÖ¾îÁø ¹®ÀÚ¿­( string )ÀÌ Â÷ÁöÇÒ Çȼ¿ ÆøÀ» ¾Ë¾Æ³À´Ï´Ù.

XTextExtents16
==============

      XTextExtents(font_struct, string, nchars, direction_return,
    font_ascent_return,
                    font_descent_return, overall_return)
            XFontStruct *font_struct;
            char *string;
            int nchars;
            int *direction_return;
            int *font_ascent_return, *font_descent_return;
            XCharStruct *overall_return;

      XTextExtents16(font_struct, string, nchars, direction_return,
      font_ascent_return,
                      font_descent_return, overall_return)
            XFontStruct *font_struct;
            XChar2b *string;
            int nchars;
            int *direction_return;
            int *font_ascent_return, *font_descent_return;
            XCharStruct *overall_return;

³»¿ëÀº XQueryTextExtents16 °ú °°½À´Ï´Ù.

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

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

¾ÏÆ° ¿©·¯ºÐ²² ¾à°£ÀÇ µµ¿òÀÌ µÇ¾úÀ¸¸é ÇÕ´Ï´Ù. ³ªÁß¿¡ ±âȸ°¡ µÇ¸é ÇÑÅÒ¿¡¼­ ±âº»
À¸·Î ¾²°í ÀÖ´Â ¿¹»Û Á¶ÇÕ ÆùÆ®¸¦ »ç¿ëÇÏ´Â ¹ý¿¡ ´ëÇؼ­ µû·Î °­ÀǸ¦ Çص帮°Ú½À´Ï
´Ù.

HomePage Backward Forward Post Reply List
1998 by swindler