# dont perform the libgen and libsocket test in configure for AROS.
[AROS-Contrib.git] / fish / surf / mouse.c
blob3091d8ee518a69f56ca6fc1dea9953da4539a2a3
1 #include "scrnio.ih"
2 #ifdef MANX
3 #include <functions.h>
4 #endif
5 #include "scrnio.h"
6 #include "mytypes.h"
8 #include "bezpt.h"
9 #include "control.h"
12 static bool buttondown; /* is left button down */
13 static short mousex, mousey;
14 static enum BezPtEnum selbezpt; /* selected bez pt */
16 void DrawBox( int, int, int);
17 void DrawSqr( int, int, int);
18 void EditStartPt(int, int);
19 void EditEndPt(int, int);
21 void HandleTicks(mesg)
22 struct IntuiMessage *mesg;
24 int x, y;
26 x = CntrX(mesg->MouseX);
27 y = CntrY(mesg->MouseY);
29 if(!buttondown || (mousex == x && mousey == y )){
30 return;
33 mousex = x;
34 mousey = y;
36 switch( CurMode ) {
38 case DRAWPOLY:
39 EditBezPt( mousex, mousey);
40 break;
42 case FITBEZIER:
43 switch(selbezpt) {
44 case BPEStartPt:
45 EditStartPt(mousex, mousey);
46 break;
48 case BPEEndPt:
49 EditEndPt(mousex, mousey);
50 break;
52 case BPECntrlPt1:
53 EditControl0(mousex, mousey);
54 break;
56 case BPECntrlPt2:
57 EditControl1(mousex, mousey);
58 break;
60 break;
62 default:
63 break;
69 void HandleMButtons(mesg)
70 struct IntuiMessage *mesg;
73 long startdist, enddist, leftdist, rightdist;
74 long tx, ty;
76 mousex = CntrX(mesg->MouseX);
77 mousey = CntrY(mesg->MouseY);
79 switch( mesg->Code) {
80 case SELECTDOWN:
81 buttondown = true; /* down */
83 switch( CurMode ) {
84 case DRAWPOLY:
85 InitBezPt( mousex, mousey);
86 if( GetNumSegs() == 0 ) {
87 InitBezPt( mousex, mousey );
89 break;
91 case FITBEZIER:
92 tx = mousex - StartPtX(GetCurSeg());
93 ty = mousey - StartPtY(GetCurSeg());
94 startdist = tx * tx + ty * ty;
96 tx = mousex - EndPtX(GetCurSeg());
97 ty = mousey - EndPtY(GetCurSeg());
98 enddist = tx * tx + ty * ty;
100 tx = mousex - Cntrl1X(GetCurSeg());
101 ty = mousey - Cntrl1Y(GetCurSeg());
102 leftdist = tx * tx + ty * ty;
104 tx = mousex - Cntrl2X(GetCurSeg());
105 ty = mousey - Cntrl2Y(GetCurSeg());
106 rightdist = tx *tx + ty * ty;
108 if( leftdist <= rightdist &&
109 leftdist <= startdist &&
110 leftdist <= enddist ) {
111 selbezpt = BPECntrlPt1;
112 EditControl0( mousex, mousey );
114 else if ( rightdist <= startdist &&
115 rightdist <= enddist ) {
116 selbezpt = BPECntrlPt2;
117 EditControl1( mousex, mousey );
119 else if ( startdist <= enddist ) {
120 selbezpt = BPEStartPt;
121 EditStartPt(mousex, mousey);
123 else {
124 selbezpt = BPEEndPt;
125 EditEndPt(mousex, mousey);
127 break;
129 default:
130 break;
132 break;
135 case SELECTUP:
136 buttondown = false; /* up */
137 break;
139 case MENUUP:
140 if( CurMode == FITBEZIER ) {
141 DrawStartPt();
142 DrawEndPt();
143 DrawControl0();
144 DrawControl1();
145 NextSeg();
146 DrawStartPt();
147 DrawEndPt();
148 DrawControl0();
149 DrawControl1();
151 break;
153 default:
154 break;