# dont perform the libgen and libsocket test in configure for AROS.
[AROS-Contrib.git] / fish / surf / bezpt.h
blob41b049c225cb3b9af2c354d9bdb0b6512e5319d7
1 #include "fasttrig.h"
2 /*
3 * structures and such for manipulating bezier curves
4 */
6 #define MaxSegs 50 /* max number of bezier segments */
8 typedef struct {
9 int prev2; /* second control point of segment n-1 */
10 int cur0; /* begin of segment n, end of segment n-1 */
11 int cur1; /* first control point of segment n */
12 } BezVal;
15 typedef struct {
16 BezVal x, y;
17 } BezCoord;
19 #define DefBezMeshVal 10
21 extern BezCoord Bezpt[MaxSegs+1];
22 extern void SetBezMesh( /* Panel_item, int, struct input_event */);
23 extern int BezMesh;
24 extern float BezStepSize;
26 extern void InitCalcBez( /* void */ );
27 extern void CalcBezPt(/* float, float *, float * */);
28 extern void XdrawAllBezSegs(/* void */);
29 extern void XdrawBezSeg(/* void */);
30 extern void InitBezPt( /* int, int */);
31 extern void EditBezPt( /* int, int */);
32 extern void ResetCurve( /* void */ );
34 extern int NumBezPts;
35 extern int ActSeg;
36 #define BezRings() (GetNumSegs() * BezMesh + 1)
37 #define GetFirstSeg() (0)
38 #define GetNumSegs() (NumBezPts-1)
39 #define ResetActSeg() { ActSeg = GetFirstSeg(); }
40 #define GetCurSeg() (ActSeg)
41 #define PrevSegNo() (ActSeg -1 < 0 ? GetNumSegs(): ActSeg -1 )
42 #define PrevSeg() { ActSeg = PrevSegNo(); }
43 #define NextSegNo() ((ActSeg+1) % GetNumSegs())
44 #define NextSeg() { ActSeg = NextSegNo(); }
46 enum BezPtEnum { BPEStartPt, BPEEndPt, BPECntrlPt1, BPECntrlPt2 };
48 #define StartPtX(XSegNo) Bezpt[XSegNo].x.cur0
49 #define StartPtY(XSegNo) Bezpt[XSegNo].y.cur0
51 #define Cntrl1X(XSegNo) Bezpt[XSegNo].x.cur1
52 #define Cntrl1Y(XSegNo) Bezpt[XSegNo].y.cur1
54 #define Cntrl2X(XSegNo) Bezpt[XSegNo+1].x.prev2
55 #define Cntrl2Y(XSegNo) Bezpt[XSegNo+1].y.prev2
57 #define EndPtX(XSegNo) Bezpt[XSegNo+1].x.cur0
58 #define EndPtY(XSegNo) Bezpt[XSegNo+1].y.cur0
60 #define DrawStartPt() DrawBox( Bezpt[ActSeg].x.cur0, \
61 Bezpt[ActSeg].y.cur0, XOR )
63 #define DrawEndPt() DrawBox( Bezpt[ActSeg+1].x.cur0, \
64 Bezpt[ActSeg+1].y.cur0, XOR )
66 #define DrawControl0() DrawSqr( Bezpt[ActSeg].x.cur1,\
67 Bezpt[ActSeg].y.cur1, XOR )
69 #define DrawControl1() DrawSqr( Bezpt[ActSeg+1].x.prev2,\
70 Bezpt[ActSeg+1].y.prev2, XOR )