/* A simple interface to parts of the graph module. Note that a major aim is to provide a device independant co-ord system. Therefore all windows are from (0,0) Top-Left to (1024,1024) bottom right This version produces objects compatible with the TopSpeed Modula2 compiler */ #include #pragma link(gwinc2m) #define ErrUnknownAdapter 1 #define ErrFewerColors 2 #define ErrUnknownMode 3 extern int GraphErr; typedef short GCoord; #pragma save #pragma data(compatible_class=>on) extern "Modula2.GWinC2M" { class GWindow { private: GCoord XScale,YScale; int NumColors; char ok; GCoord XL,YT,XR,YB; //Physical position of window short PreviousMode; int CurrentColor,CurrentBackColor; GCoord XReal(GCoord x) { return GCoord((long)x*XScale>>10); } GCoord YReal(GCoord y) { return GCoord((long)y*YScale>>10); } GCoord XPhys(GCoord x) { return XReal(x)+XL; } GCoord YPhys(GCoord y) { return YReal(y)+YT; } void AffixColor(int Col,int BkCol); void VectorFromAngle(int Angle,GCoord &X,GCoord &Y); void ArcServer(GCoord X,GCoord Y,GCoord Major,GCoord Minor,int StartAngle,int EndAngle,char pie,int Fill); public: GWindow(GCoord X1,GCoord Y1,GCoord X2,GCoord Y2,int ColsReq); //Top left-Bottom right ~GWindow(); GWindow(); // For the benefit of pascal void ReSize(GCoord X1,GCoord Y1,GCoord X2,GCoord Y2); void SetColor(int Col,int BkCol=-1); void Clear(int BkCol=-1); void Plot(GCoord x,GCoord y,int Col=-1); int Point(GCoord x,GCoord y); //-1 for error else logical color void Fill(GCoord x,GCoord y,int Bound=-1,char Flood=0); void Line(GCoord X1,GCoord Y1,GCoord X2,GCoord Y2,int Col=-1); void Rectangle(GCoord Left,GCoord Top,GCoord Width,GCoord Height,int Fill=0); void Square(GCoord Left,GCoord Top,GCoord Side,int Fill=0) { Rectangle(Left,Top,Side,Side,Fill); } void Polygon(short nsides,GCoord px[],GCoord py[],int Fill=0); void Ellipse(GCoord X,GCoord Y,GCoord Major,GCoord Minor,int Fill=0); void Circle(GCoord X,GCoord Y,GCoord Radius,int Fill=0) { Ellipse(X,Y,Radius,Radius,Fill); } void EllipticArc(GCoord X,GCoord Y,GCoord Major,GCoord Minor,int StartAngle, int EndAngle); void Arc(GCoord X,GCoord Y,GCoord Radius,int StartAngle,int EndAngle) { EllipticArc(X,Y,Radius,Radius,StartAngle,EndAngle); } void EllipticPie(GCoord X,GCoord Y,GCoord Major,GCoord Minor,int StartAngle, int EndAngle,int Fill=1); void Pie(GCoord X,GCoord Y,GCoord Radius,int StartAngle,int EndAngle,int Fill=0) { EllipticPie(X,Y,Radius,Radius,StartAngle,EndAngle,Fill); } void Cuboid(GCoord X,GCoord Y,GCoord Width,GCoord Height,GCoord Depth, int Top=1,int Fill=0); void Cube(GCoord X,GCoord Y,GCoord Side,int Top=1,int Fill=0) { Cuboid(X,Y,Side,Side,Side,Top,Fill); } void CursorPosition(GCoord x,GCoord y); int CharHeight(); int CharWidth(); static short CurrentMode; static GWindow *activewindow; }; } #pragma restore