home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / gamesystem / source / gs_font.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-10  |  3.2 KB  |  159 lines

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    gsCFont
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    12/03/00
  8. //
  9. // Base:    gsCVisual
  10. //
  11. // Derived:    None
  12. //
  13. //-------------------------------------------------------------
  14.  
  15. #include "gamesystem.h"
  16.  
  17. //-------------------------------------------------------------
  18.  
  19. gsCFont::gsCFont()
  20. {
  21.     m_text_cursor = gsCPoint(0,0);
  22.     m_use_tint = false;
  23. }
  24.  
  25. //-------------------------------------------------------------
  26.  
  27. gsCFont::~gsCFont()
  28. {
  29. }
  30.  
  31. //-------------------------------------------------------------
  32.  
  33. void gsCFont::setTextCursor(const gsCPoint& position)
  34. {
  35.     m_text_cursor = position;
  36. }
  37.  
  38. //-------------------------------------------------------------
  39.  
  40. void gsCFont::enableTint(const gsCColour& colour)
  41. {
  42.     m_tint = colour;
  43.     m_use_tint = true;
  44. }
  45.  
  46. //-------------------------------------------------------------
  47.  
  48. void gsCFont::disableTint()
  49. {
  50.     m_use_tint = false;
  51. }
  52.  
  53. //-------------------------------------------------------------
  54.  
  55. gsCPoint gsCFont::getTextCursor()
  56. {
  57.     return m_text_cursor;
  58. }
  59.  
  60. //-------------------------------------------------------------
  61.  
  62. gsCPoint gsCFont::getStringSize(const char *string)
  63. {
  64.     return gsCPoint(strlen(string) * m_tile_size.getX(),m_tile_size.getY());
  65. }
  66.  
  67. //-------------------------------------------------------------
  68.  
  69. bool _cdecl gsCFont::printString(const char *format,...)
  70. {
  71.     va_list arglist;
  72.     static char message[1000];
  73.  
  74.     va_start(arglist,format);
  75.     vsprintf(message,format,arglist);
  76.     va_end(arglist);
  77.  
  78.     int length = strlen(message);
  79.  
  80.     if (length == 0)
  81.         return false;
  82.  
  83.     gsCScreen *screen = gsCApplication::getScreen();
  84.  
  85.     if (!screen)
  86.         return false;
  87.  
  88.     gsCRect extents(m_text_cursor,m_text_cursor + m_tile_size * gsCPoint(length,1));
  89.  
  90.     gsCRect screen_rect = screen->getRect();
  91.     
  92.     if (screen_rect.contains(extents)) {
  93.         char *str = message;
  94.         while (length-- > 0) {
  95.             gsUBYTE c = *str++;
  96.             if (c >= 0x20 && c <= 0x7F) {
  97.                 c -= 0x20;
  98.                 if (c < m_num_tiles) {
  99.                     if (m_use_tint)
  100.                         drawTinted(c,m_text_cursor,m_tint);
  101.                     else
  102.                         drawFast(c,m_text_cursor);
  103.                     m_text_cursor += gsCPoint(m_tile_size.getX(),0);
  104.                     }
  105.                 }
  106.             }
  107.         }
  108.     else {
  109.         char *str = message;
  110.         while (length-- > 0) {
  111.             gsUBYTE c = *str++;
  112.             if (c >= 0x20 && c <= 0x7F) {
  113.                 c -= 0x20;
  114.                 if (c < m_num_tiles) {
  115.                     if (m_use_tint)
  116.                         drawTinted(c,m_text_cursor,m_tint);
  117.                     else
  118.                         draw(c,m_text_cursor);
  119.                     m_text_cursor += gsCPoint(m_tile_size.getX(),0);
  120.                     }
  121.                 }
  122.             }
  123.         }
  124.  
  125.     return true;
  126. }
  127.  
  128. //-------------------------------------------------------------
  129.  
  130. bool _cdecl gsCFont::justifyString(const char *format,...)
  131. {
  132.     va_list arglist;
  133.     static char message[1000];
  134.  
  135.     va_start(arglist,format);
  136.     vsprintf(message,format,arglist);
  137.     va_end(arglist);
  138.  
  139.     gsCScreen *screen = gsCApplication::getScreen();
  140.  
  141.     if (!screen)
  142.         return false;
  143.  
  144.     gsCPoint size = getStringSize(message);
  145.  
  146.     int old_x = m_text_cursor.getX();
  147.  
  148.     m_text_cursor.setX((screen->getSize().getX() - size.getX()) / 2);
  149.  
  150.     printString(message);
  151.  
  152.     m_text_cursor.setX(old_x);
  153.  
  154.     return true;
  155. }
  156.  
  157. //-------------------------------------------------------------
  158.  
  159.