GWINC2M.HPP 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /* A simple interface to parts of the graph module.
  2. Note that a major aim is to provide a device independant co-ord system.
  3. Therefore all windows are from (0,0) Top-Left to (1024,1024) bottom right
  4. This version produces objects compatible with the TopSpeed Modula2 compiler
  5. */
  6. #include <graph.h>
  7. #pragma link(gwinc2m)
  8. #define ErrUnknownAdapter 1
  9. #define ErrFewerColors 2
  10. #define ErrUnknownMode 3
  11. extern int GraphErr;
  12. typedef short GCoord;
  13. #pragma save
  14. #pragma data(compatible_class=>on)
  15. extern "Modula2.GWinC2M"
  16. {
  17. class GWindow
  18. { private:
  19. GCoord XScale,YScale;
  20. int NumColors;
  21. char ok;
  22. GCoord XL,YT,XR,YB; //Physical position of window
  23. short PreviousMode;
  24. int CurrentColor,CurrentBackColor;
  25. GCoord XReal(GCoord x)
  26. { return GCoord((long)x*XScale>>10);
  27. }
  28. GCoord YReal(GCoord y)
  29. { return GCoord((long)y*YScale>>10);
  30. }
  31. GCoord XPhys(GCoord x)
  32. { return XReal(x)+XL;
  33. }
  34. GCoord YPhys(GCoord y)
  35. { return YReal(y)+YT;
  36. }
  37. void AffixColor(int Col,int BkCol);
  38. void VectorFromAngle(int Angle,GCoord &X,GCoord &Y);
  39. void ArcServer(GCoord X,GCoord Y,GCoord Major,GCoord Minor,int StartAngle,int EndAngle,char pie,int Fill);
  40. public:
  41. GWindow(GCoord X1,GCoord Y1,GCoord X2,GCoord Y2,int ColsReq); //Top left-Bottom right
  42. ~GWindow();
  43. GWindow(); // For the benefit of pascal
  44. void ReSize(GCoord X1,GCoord Y1,GCoord X2,GCoord Y2);
  45. void SetColor(int Col,int BkCol=-1);
  46. void Clear(int BkCol=-1);
  47. void Plot(GCoord x,GCoord y,int Col=-1);
  48. int Point(GCoord x,GCoord y); //-1 for error else logical color
  49. void Fill(GCoord x,GCoord y,int Bound=-1,char Flood=0);
  50. void Line(GCoord X1,GCoord Y1,GCoord X2,GCoord Y2,int Col=-1);
  51. void Rectangle(GCoord Left,GCoord Top,GCoord Width,GCoord Height,int Fill=0);
  52. void Square(GCoord Left,GCoord Top,GCoord Side,int Fill=0)
  53. { Rectangle(Left,Top,Side,Side,Fill);
  54. }
  55. void Polygon(short nsides,GCoord px[],GCoord py[],int Fill=0);
  56. void Ellipse(GCoord X,GCoord Y,GCoord Major,GCoord Minor,int Fill=0);
  57. void Circle(GCoord X,GCoord Y,GCoord Radius,int Fill=0)
  58. { Ellipse(X,Y,Radius,Radius,Fill);
  59. }
  60. void EllipticArc(GCoord X,GCoord Y,GCoord Major,GCoord Minor,int StartAngle,
  61. int EndAngle);
  62. void Arc(GCoord X,GCoord Y,GCoord Radius,int StartAngle,int EndAngle)
  63. { EllipticArc(X,Y,Radius,Radius,StartAngle,EndAngle);
  64. }
  65. void EllipticPie(GCoord X,GCoord Y,GCoord Major,GCoord Minor,int StartAngle,
  66. int EndAngle,int Fill=1);
  67. void Pie(GCoord X,GCoord Y,GCoord Radius,int StartAngle,int EndAngle,int Fill=0)
  68. { EllipticPie(X,Y,Radius,Radius,StartAngle,EndAngle,Fill);
  69. }
  70. void Cuboid(GCoord X,GCoord Y,GCoord Width,GCoord Height,GCoord Depth,
  71. int Top=1,int Fill=0);
  72. void Cube(GCoord X,GCoord Y,GCoord Side,int Top=1,int Fill=0)
  73. { Cuboid(X,Y,Side,Side,Side,Top,Fill);
  74. }
  75. void CursorPosition(GCoord x,GCoord y);
  76. int CharHeight();
  77. int CharWidth();
  78. static short CurrentMode;
  79. static GWindow *activewindow;
  80. };
  81. }
  82. #pragma restore