home *** CD-ROM | disk | FTP | other *** search
/ Geek 6 / Geek-006.iso / linux / video / xmovie-1.5.3.tar.gz / xmovie-1.5.3.tar / xmovie-1.5.3 / guicast / bctitle.C < prev    next >
C/C++ Source or Header  |  2000-11-29  |  2KB  |  132 lines

  1. #include "bctitle.h"
  2. #include <string.h>
  3.  
  4. BC_Title::BC_Title(int x, int y, char *text, int font, int color, int centered)
  5.  : BC_SubWindow(x, y, -1, -1, -1)
  6. {
  7.     this->font = font;
  8.     this->color = color;
  9.     this->centered = centered;
  10.     strcpy(this->text, text);
  11. }
  12.  
  13. BC_Title::~BC_Title()
  14. {
  15. }
  16.  
  17.  
  18. int BC_Title::initialize()
  19. {
  20.     if(w <= 0 || h <= 0)
  21.         get_size(w, h);
  22.  
  23.     if(centered) x -= w / 2;
  24.  
  25.     BC_SubWindow::initialize();
  26.     draw();
  27.     return 0;
  28. }
  29.  
  30. int BC_Title::set_color(int color)
  31. {
  32.     this->color = color;
  33.     draw();
  34.     return 0;
  35. }
  36.  
  37. int BC_Title::resize(int w, int h)
  38. {
  39.     resize_window(w, h);
  40.     draw();
  41.     return 0;
  42. }
  43.  
  44. int BC_Title::reposition(int x, int y)
  45. {
  46.     reposition_window(x, y, w, h);
  47.     draw();
  48.     return 0;
  49. }
  50.  
  51.  
  52. int BC_Title::update(char *text)
  53. {
  54.     int new_w, new_h;
  55.  
  56.     strcpy(this->text, text);
  57.     get_size(new_w, new_h);
  58.     if(new_w > w || new_h > h)
  59.     {
  60.         resize_window(new_w, new_h);
  61.     }
  62.  
  63.     draw();
  64.     return 0;
  65. }
  66.  
  67. int BC_Title::draw()
  68. {
  69.     int i, j, x, y;
  70.  
  71.     draw_top_background(parent_window, 0, 0, w, h);
  72.     set_font(font);
  73.     BC_WindowBase::set_color(color);
  74.     for(i = 0, j = 0, x = 0, y = get_text_ascent(font); 
  75.         i <= strlen(text); 
  76.         i++)
  77.     {
  78.         if(text[i] == '\n' || text[i] == 0)
  79.         {
  80.             if(centered)
  81.             {
  82.                 draw_center_text(get_w() / 2, 
  83.                     y,
  84.                     &text[j],
  85.                     i - j);
  86.                 j = i + 1;
  87.             }
  88.             else
  89.             {
  90.                 draw_text(x, 
  91.                     y,
  92.                     &text[j],
  93.                     i - j);
  94.                 j = i + 1;
  95.             }
  96.             y += get_text_height(font);
  97.         }
  98.     }
  99.     set_font(MEDIUMFONT);    // reset
  100.     flash();
  101.     return 0;
  102. }
  103.  
  104. int BC_Title::get_size(int &w, int &h)
  105. {
  106.     int i, j, x, y, line_w = 0;
  107.     w = 0;
  108.     h = 0;
  109.  
  110.     for(i = 0, j = 0; i <= strlen(text); i++)
  111.     {
  112.         line_w = 0;
  113.         if(text[i] == '\n')
  114.         {
  115.             h++;
  116.             line_w = get_text_width(font, &text[j], i - j);
  117.             j = i + 1;
  118.         }
  119.         else
  120.         if(text[i] == 0)
  121.         {
  122.             h++;
  123.             line_w = get_text_width(font, &text[j]);
  124.         }
  125.         if(line_w > w) w = line_w;
  126.     }
  127.  
  128.     h *= get_text_height(font);
  129.     w += 5;
  130.     return 0;
  131. }
  132.