** Date Started: 1984
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: sgp.h,v 1.11 2000/07/28 08:28:08 kevin Exp $
+** $Id: sgp.h,v 1.26 2001/01/28 19:10:18 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
#ifdef HAVE_WXWINDOWS
#include <wx/wx.h>
+#include <wx/font.h>
#endif
#if HAVE_G2_H
#include <string>
-
class SGPDriver {
private:
int m_iPhysicalXSize;
int m_iPhysicalYSize;
- string m_sWindowTitle;
+ std::string m_sWindowTitle;
int m_idDriver;
#ifdef HAVE_WXWINDOWS
};
#ifdef HAVE_WXWINDOWS
- SGPDriver (wxDC* pDC, const char* szWinTitle = "", int xsize = 640, int ysize = 480);
+ SGPDriver (wxDC* pDC, int xsize = 640, int ysize = 480);
#endif
SGPDriver (const char* szWinTitle = "", int xsize = 640, int ysize = 480);
-
+
~SGPDriver ();
int getPhysicalXSize () const
int getPhysicalYSize () const
{ return m_iPhysicalYSize; }
- const string& getWindowTitle () const
+ const std::string& getWindowTitle () const
{ return m_sWindowTitle; }
bool isWX () const
- { return (m_idDriver & SGPDRIVER_WXWINDOWS); }
+ { return (m_idDriver & SGPDRIVER_WXWINDOWS ? true : false); }
bool isG2 () const
- { return (m_idDriver & SGPDRIVER_G2); }
+ { return (m_idDriver & SGPDRIVER_G2 ? true : false); }
int idG2 () const
{ return m_idG2; }
#ifdef HAVE_WXWINDOWS
wxDC* idWX () const
{ return m_pDC; }
+
+ void setDC (wxDC* dc)
+ { m_pDC = dc; }
#endif
};
+class RGBColor;
class SGP {
private:
int m_iPhysicalXSize; // Physical Window size
int m_iPhysicalYSize;
- const SGPDriver m_driver;
+ SGPDriver m_driver;
double xw_min; // Window extents
double yw_min;
double m_dCurrentWorldX;
double m_dCurrentWorldY;
double m_dTextAngle;
+ int m_iTextPointSize;
bool m_bRecalcTransform;
+ double m_dPointsPerPixel; // points (72pt/in) per screen pixel;
+ int m_iLinestyle;
// Master coordinates are coordinates before CTM transformation
// World coordinates are coordinates defined by setWindow()
void calc_transform ();
+ static RGBColor s_aRGBColor[];
+ static int s_iRGBColorCount;
+
+#if HAVE_WXWINDOWS
+ wxPen m_pen;
+ wxFont* m_pFont;
+
+ void initFromDC (wxDC* pDC);
+#endif
+
public:
enum { // linestyles
LS_NOLINE = 0,
MARK_BSQUARE = 9, // big open square
MARK_BDIAMOND = 10, // big open diamond
};
- static const int MARK_COUNT = 11;
+ enum { MARK_COUNT = 11, };
static const unsigned char MARKER_BITMAP[MARK_COUNT][5];
SGP (const SGPDriver& driver);
+ ~SGP();
void drawCircle (const double r);
- void drawArc (double start, double stop, const double r);
+ void drawArc (const double r, double start, double stop);
void drawRect (double xmin, double ymin, double xmax, double ymax);
void lineAbs(double x, double y);
void moveAbs(double x, double y);
void lineRel(double x, double y);
void moveRel(double x, double y);
void drawText(const char *szMessage);
- void drawText(const string& rsMessage);
+ void drawText(const std::string& rsMessage);
void polylineAbs(double x[], double y[], int n);
void markerAbs (double x, double y);
void markerRel(double x, double y);
void setColor (int icol);
void setLineStyle (int style);
void setTextSize (double height);
+ void setTextNDCSize (double height);
+ void setTextPointSize (double height);
void setTextAngle (double angle);
void setTextColor (int iFGcolor, int iBGcolor);
+ void setPenWidth (int width);
void setMarker (int idMarker, int color);
+ void setRasterOp (int ro);
+
+ void getWindow (double& xmin, double& ymin, double& xmax, double& ymax);
+ void getViewport (double& xmin, double& ymin, double& xmax, double& ymax);
+ void getTextExtent (const char *szText, double* x, double* y);
+ double getCharHeight ();
+ double getCharWidth ();
+ SGPDriver& getDriver() {return m_driver;}
+ const SGPDriver& getDriver() const {return m_driver;}
void ctmClear ();
void ctmSet (const TransformationMatrix2D& m);
void stylusNDC (double x, double y, bool beam);
void pointNDC (double x, double y);
void markerNDC (double x, double y);
+
+#if HAVE_WXWINDOWS
+ void setDC (wxDC* pDC);
+#endif
};
+enum {
+ C_BLACK = 0, // color codes
+ C_BLUE = 1,
+ C_GREEN = 2,
+ C_CYAN = 3,
+ C_RED = 4,
+ C_MAGENTA = 5,
+ C_BROWN = 6,
+ C_GRAY = 7,
+ C_LTGRAY = 8,
+ C_LTBLUE = 9,
+ C_LTGREEN = 10,
+ C_LTCYAN = 11,
+ C_LTRED = 12,
+ C_LTMAGENTA = 13,
+ C_YELLOW = 14,
+ C_WHITE = 15,
+};
+
+enum RasterOp {
+ RO_AND = 1,
+ RO_AND_INVERT,
+ RO_AND_REVERSE,
+ RO_CLEAR,
+ RO_COPY,
+ RO_EQUIV,
+ RO_INVERT,
+ RO_NAND,
+ RO_NOR,
+ RO_NO_OP,
+ RO_OR,
+ RO_OR_INVERT,
+ RO_OR_REVERSE,
+ RO_SET,
+ RO_SRC_INVERT,
+ RO_XOR,
+};
+
+
+class RGBColor {
+ private:
+ short int r;
+ short int g;
+ short int b;
+
+ public:
+ RGBColor (int r, int g, int b)
+ : r(r), g(g), b(b)
+ {}
+
+ int getRed () const
+ { return r; }
+
+ int getGreen () const
+ { return g; }
+
+ int getBlue () const
+ { return b; }
+
+};
+
#endif