#include <textoverlay.h>

textoverlay::textoverlay
(
  doublec left_,
  doublec right_,
  doublec bottom_,
  doublec top_ 
)
  : left(left_), right(right_), bottom(bottom_), 
    top(top_), drawpre(true), drawpost(true)
{
  init();
}

textoverlay::textoverlay()
  : left(-0.5), right(639.5), bottom(479.5), 
    top(-1.0), drawpre(true), drawpost(true)
{
  init();
}

void textoverlay::printstring
(
  void *font, 
  string const & s
) const
{
//cout << "*" << s << "*" << endl;
  uint len = s.size();
  for (uint i=0; i<len; ++i)
    glutBitmapCharacter(font,s[i]);
}

void textoverlay::lightingdisable()
{
  drawpre.push_back(new gobjglPushAttrib(GL_CURRENT_BIT));
  drawpre.push_back(new gobjglPushAttrib(GL_LIGHTING));

  drawpre.push_back(new gobjglDisable(GL_LIGHTING));

  drawpost.push_front(new gobjglPopAttrib());
  drawpost.push_front(new gobjglPopAttrib());
}
  

void textoverlay::init()
{
  drawpre.nuke();
  drawpost.nuke();

  // assuming GL_MODELVIEW mode
  drawpre.push_back(new gobjglPushMatrix());  // save
  drawpre.push_back(new gobjglLoadIdentity());  // clear

  drawpre.push_back(new gobjglMatrixMode(GL_PROJECTION));
  drawpre.push_back(new gobjglPushMatrix()); // save
  drawpre.push_back(new gobjglLoadIdentity());  // clear

  drawpre.push_back(new gobjgluOrtho2D(left,right,bottom,top));
  drawpre.push_back(new gobjglMatrixMode(GL_MODELVIEW));


  drawpost.push_back(new gobjglMatrixMode(GL_PROJECTION));
  drawpost.push_back(new gobjglPopMatrix());  // restore
  drawpost.push_back(new gobjglMatrixMode(GL_MODELVIEW));
  drawpost.push_back(new gobjglPopMatrix());  // restore
}


