#include "scrnio.ih"
#ifdef MANX
#include <functions.h>
#endif
#include "scrnio.h"
#include "mytypes.h"

#include "bezpt.h"
#include "control.h"


static bool buttondown;  /* is left button down */
static short mousex, mousey;
static bool isleftbut;  /* left button or pseudo middle button */

void HandleTicks(mesg)
struct IntuiMessage *mesg;
{
    int x, y;

    x = CntrX(mesg->MouseX);
    y = CntrY(mesg->MouseY);

    if(!buttondown || (mousex == x && mousey == y )){
        return;
    }

    mousex = x;
    mousey = y;

    switch( CurMode ) {

    case DRAWPOLY:
         EditBezPt( mousex, mousey);
         break;

    case FITBEZIER:
        /*
         * need to select between the two
         */
        if( isleftbut ) {
            EditControl0(mousex, mousey);
        }
        else {
            EditControl1(mousex, mousey);
        }
        break;

    default:
        break;
    }
}



void HandleMButtons(mesg)
struct IntuiMessage *mesg;
{

    long leftdist, rightdist;
    long tx, ty;

    mousex = CntrX(mesg->MouseX);
    mousey = CntrY(mesg->MouseY);

    switch( mesg->Code) {
    case SELECTDOWN:
        buttondown = true;  /* down */

        switch( CurMode ) {
        case DRAWPOLY:
            InitBezPt( mousex, mousey);
            if( GetNumSegs() == 0 ) {
                InitBezPt( mousex, mousey );
            }
            break;

        case FITBEZIER:
            tx = mousex - Cntrl1X(GetCurSeg());
            ty = mousey - Cntrl1Y(GetCurSeg());
            leftdist = tx *tx + ty * ty;

            tx = mousex - Cntrl2X(GetCurSeg());
            ty = mousey - Cntrl2Y(GetCurSeg());
            rightdist = tx *tx + ty * ty;

            if( isleftbut = (leftdist <= rightdist) ) {
                EditControl0( mousex, mousey );
            }
            else {
                EditControl1( mousex, mousey );
            }
            break;

        default:
            break;
        }
        break;


    case SELECTUP:
        buttondown = false; /* up */
        break;

    case MENUUP:
        if( CurMode == FITBEZIER ) {
            DrawControl0();
            DrawControl1();
            NextSeg();
            DrawControl0();
            DrawControl1();
        }
        break;

    default:
        break;
    }
}
