#include <cassert>
using namespace std;

#include <menu02.h>

typedef point2<double> pt2;

menu02::menu02(test01 * _test)
  : menusystem(this,0,true,point2<int>(60,30),20), test(_test)
{
  assert(test!=0);

  addfont12("Line Segment and Line Segment Intersection");
  addnewline();
  addnewline();
  addfont10("'j' 'J'  Rotate A anti clockwise and clockwise");
  addnewline();
  addfont10("'k' 'K'  Translate A right and left");
  addnewline();
  addfont10("'l' 'L'  Translate A up and down");
  addnewline();
  addfont10("'u' 'U'  Rotate B anti clockwise and clockwise");
  addnewline();
  addfont10("'i' 'I'  Translate B right and left");
  addnewline();
  addfont10("'o' 'O'  Translate B up and down");

  addnewline();
  addnewline();
  addfont10("ESC      Quit");
}


void menu02::readImmediate(char const key)
{
  static double delta = 0.02;
  static double theta = 0.1;

  switch (key)
  {
    case 27:
      exit(0);
      break;

    case 'j':
      test->A.rotate(theta);
      break;

    case 'J':
      test->A.rotate(-theta);
      break;

    case 'k':
      test->A.translate( pt2(delta,0.0) );
      break;

    case 'K':
      test->A.translate( pt2(-delta,0.0) );
      break;


    case 'l':
      test->A.translate( pt2(0.0,delta) );
      break;

    case 'L':
      test->A.translate( pt2(0.0,-delta) );
      break;

    case 'u':
      test->B.rotate(theta);
      break;

    case 'U':
      test->B.rotate(-theta);
      break;

    case 'i':
      test->B.translate( pt2(delta,0.0) );
      break;

    case 'I':
      test->B.translate( pt2(-delta,0.0) );
      break;


    case 'o':
      test->B.translate( pt2(0.0,delta) );
      break;

    case 'O':
      test->B.translate( pt2(0.0,-delta) );
      break;

  }

  test->intersection();

  glutPostRedisplay();
}




