text: /////////////////////////////////////////////////////////////////////////////
  // Name:        drawnp.h
  // Purpose:     Private header for wxDrawnShape
  // Author:      Julian Smart
  // Modified by:
  // Created:     12/07/98
  // RCS-ID:      $Id: drawnp.h,v 1.3.2.1 2002/11/19 02:13:32 RD Exp $
  // Copyright:   (c) Julian Smart
  // Licence:   	wxWindows licence
  /////////////////////////////////////////////////////////////////////////////
  
  #ifndef _OGL_DRAWNP_H_
  #define _OGL_DRAWNP_H_
  
  #if defined(__GNUG__) && !defined(__APPLE__)
  #pragma interface "drawnp.h"
  #endif
  
  #include <wx/ogl/drawn.h>
  
  /*
   * Drawing operations
   *
   */
  
  #define  DRAWOP_SET_PEN             1
  #define  DRAWOP_SET_BRUSH           2
  #define  DRAWOP_SET_FONT            3
  #define  DRAWOP_SET_TEXT_COLOUR     4
  #define  DRAWOP_SET_BK_COLOUR       5
  #define  DRAWOP_SET_BK_MODE         6
  #define  DRAWOP_SET_CLIPPING_RECT   7
  #define  DRAWOP_DESTROY_CLIPPING_RECT 8
  
  /*
  #define  DRAWOP_CREATE_PEN          10
  #define  DRAWOP_CREATE_BRUSH        11
  #define  DRAWOP_CREATE_FONT         12
  */
  
  #define  DRAWOP_DRAW_LINE           20
  #define  DRAWOP_DRAW_POLYLINE       21
  #define  DRAWOP_DRAW_POLYGON        22
  #define  DRAWOP_DRAW_RECT           23
  #define  DRAWOP_DRAW_ROUNDED_RECT   24
  #define  DRAWOP_DRAW_ELLIPSE        25
  #define  DRAWOP_DRAW_POINT          26
  #define  DRAWOP_DRAW_ARC            27
  #define  DRAWOP_DRAW_TEXT           28
  #define  DRAWOP_DRAW_SPLINE         29
  #define  DRAWOP_DRAW_ELLIPTIC_ARC   30
  
  /*
   * Base, virtual class
   *
   */
  
  class wxDrawOp: public wxObject
  {
  public:
    inline wxDrawOp(int theOp) { m_op = theOp; }
    inline ~wxDrawOp() {}
    inline virtual void Scale(double xScale, double yScale) {};
    inline virtual void Translate(double x, double y) {};
    inline virtual void Rotate(double x, double y, double theta, double sinTheta, double cosTheta) {};
    virtual void Do(wxDC& dc, double xoffset, double yoffset) = 0;
    virtual wxDrawOp *Copy(wxPseudoMetaFile *newImage) = 0;
  #if wxUSE_PROLOGIO
    virtual wxExpr *WriteExpr(wxPseudoMetaFile *image) = 0;
    virtual void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr) = 0;
  #endif
    inline int GetOp() const { return m_op; }
  
    // Draw an outline using the current operation. By default, return FALSE (not drawn)
    virtual bool OnDrawOutline(wxDC& dc, double x, double y, double w, double h,
      double oldW, double oldH) { return FALSE; }
  
    // Get the perimeter point using this data
    virtual bool GetPerimeterPoint(double x1, double y1,
                                       double x2, double y2,
                                       double *x3, double *y3,
                                       double xOffset, double yOffset,
                                       int attachmentMode)
    { return FALSE; }
  
  protected:
    int           m_op;
  
  };
  
  /*
   * Set font, brush, text colour
   *
   */
  
  class wxOpSetGDI: public wxDrawOp
  {
   public:
    wxOpSetGDI(int theOp, wxPseudoMetaFile *theImage, int theGdiIndex, int theMode = 0);
    void Do(wxDC& dc, double xoffset, double yoffset);
    wxDrawOp *Copy(wxPseudoMetaFile *newImage);
  #if wxUSE_PROLOGIO
    wxExpr *WriteExpr(wxPseudoMetaFile *image);
    void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr);
  #endif
  
  public:
    int               m_mode;
    int               m_gdiIndex;
    wxPseudoMetaFile* m_image;
    unsigned char     m_r;
    unsigned char     m_g;
    unsigned char     m_b;
  };
  
  /*
   * Set/destroy clipping
   *
   */
  
  class wxOpSetClipping: public wxDrawOp
  {
  public:
    wxOpSetClipping(int theOp, double theX1, double theY1, double theX2, double theY2);
    void Do(wxDC& dc, double xoffset, double yoffset);
    void Scale(double xScale, double yScale);
    void Translate(double x, double y);
    wxDrawOp *Copy(wxPseudoMetaFile *newImage);
  #if wxUSE_PROLOGIO
    wxExpr *WriteExpr(wxPseudoMetaFile *image);
    void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr);
  #endif
  
  public:
    double     m_x1;
    double     m_y1;
    double     m_x2;
    double     m_y2;
  };
  
  /*
   * Draw line, rectangle, rounded rectangle, ellipse, point, arc, text
   *
   */
  
  class wxOpDraw: public wxDrawOp
  {
   public:
    wxOpDraw(int theOp, double theX1, double theY1, double theX2, double theY2,
           double radius = 0.0, wxChar *s = NULL);
    ~wxOpDraw();
    void Do(wxDC& dc, double xoffset, double yoffset);
    void Scale(double scaleX, double scaleY);
    void Translate(double x, double y);
    void Rotate(double x, double y, double theta, double sinTheta, double cosTheta);
    wxDrawOp *Copy(wxPseudoMetaFile *newImage);
  #if wxUSE_PROLOGIO
    wxExpr *WriteExpr(wxPseudoMetaFile *image);
    void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr);
  #endif
  
  public:
    double     m_x1;
    double     m_y1;
    double     m_x2;
    double     m_y2;
    double     m_x3;
    double     m_y3;
    double     m_radius;
    wxChar*    m_textString;
  
  };
  
  /*
   * Draw polyline, spline, polygon
   *
   */
  
  class wxOpPolyDraw: public wxDrawOp
  {
  public:
    wxOpPolyDraw(int theOp, int n, wxRealPoint *thePoints);
    ~wxOpPolyDraw();
    void Do(wxDC& dc, double xoffset, double yoffset);
    void Scale(double scaleX, double scaleY);
    void Translate(double x, double y);
    void Rotate(double x, double y, double theta, double sinTheta, double cosTheta);
    wxDrawOp *Copy(wxPseudoMetaFile *newImage);
  #if wxUSE_PROLOGIO
    wxExpr *WriteExpr(wxPseudoMetaFile *image);
    void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr);
  #endif
  
    // Draw an outline using the current operation.
    virtual bool OnDrawOutline(wxDC& dc, double x, double y, double w, double h,
      double oldW, double oldH);
  
    // Get the perimeter point using this data
    bool GetPerimeterPoint(double x1, double y1,
                                       double x2, double y2,
                                       double *x3, double *y3,
                                       double xOffset, double yOffset,
                                       int attachmentMode);
  
  public:
    wxRealPoint*  m_points;
    int           m_noPoints;
  
  };
  
  #endif
   // _OGL_DRAWNP_H_
  
  
  