1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        drawnp.h
3 // Purpose:     Private header for wxDrawnShape
4 // Author:      Julian Smart
5 // Modified by:
6 // Created:     12/07/98
7 // RCS-ID:      $Id: drawnp.h 35650 2005-09-23 12:56:45Z MR $
8 // Copyright:   (c) Julian Smart
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _OGL_DRAWNP_H_
13 #define _OGL_DRAWNP_H_
14 
15 
16 /*
17  * Drawing operations
18  *
19  */
20 
21 #define  DRAWOP_SET_PEN             1
22 #define  DRAWOP_SET_BRUSH           2
23 #define  DRAWOP_SET_FONT            3
24 #define  DRAWOP_SET_TEXT_COLOUR     4
25 #define  DRAWOP_SET_BK_COLOUR       5
26 #define  DRAWOP_SET_BK_MODE         6
27 #define  DRAWOP_SET_CLIPPING_RECT   7
28 #define  DRAWOP_DESTROY_CLIPPING_RECT 8
29 
30 /*
31 #define  DRAWOP_CREATE_PEN          10
32 #define  DRAWOP_CREATE_BRUSH        11
33 #define  DRAWOP_CREATE_FONT         12
34 */
35 
36 #define  DRAWOP_DRAW_LINE           20
37 #define  DRAWOP_DRAW_POLYLINE       21
38 #define  DRAWOP_DRAW_POLYGON        22
39 #define  DRAWOP_DRAW_RECT           23
40 #define  DRAWOP_DRAW_ROUNDED_RECT   24
41 #define  DRAWOP_DRAW_ELLIPSE        25
42 #define  DRAWOP_DRAW_POINT          26
43 #define  DRAWOP_DRAW_ARC            27
44 #define  DRAWOP_DRAW_TEXT           28
45 #define  DRAWOP_DRAW_SPLINE         29
46 #define  DRAWOP_DRAW_ELLIPTIC_ARC   30
47 
48 /*
49  * Base, virtual class
50  *
51  */
52 
53 class WXDLLIMPEXP_OGL wxDrawOp: public wxObject
54 {
55 public:
wxDrawOp(int theOp)56   inline wxDrawOp(int theOp) { m_op = theOp; }
~wxDrawOp()57   inline ~wxDrawOp() {}
Scale(double WXUNUSED (xScale),double WXUNUSED (yScale))58   inline virtual void Scale(double WXUNUSED(xScale), double WXUNUSED(yScale)) {};
Translate(double WXUNUSED (x),double WXUNUSED (y))59   inline virtual void Translate(double WXUNUSED(x), double WXUNUSED(y)) {};
Rotate(double WXUNUSED (x),double WXUNUSED (y),double WXUNUSED (theta),double WXUNUSED (sinTheta),double WXUNUSED (cosTheta))60   inline virtual void Rotate(double WXUNUSED(x), double WXUNUSED(y), double WXUNUSED(theta), double WXUNUSED(sinTheta), double WXUNUSED(cosTheta)) {};
61   virtual void Do(wxDC& dc, double xoffset, double yoffset) = 0;
62   virtual wxDrawOp *Copy(wxPseudoMetaFile *newImage) = 0;
63 #if wxUSE_PROLOGIO
64   virtual wxExpr *WriteExpr(wxPseudoMetaFile *image) = 0;
65   virtual void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr) = 0;
66 #endif
GetOp()67   inline int GetOp() const { return m_op; }
68 
69   // Draw an outline using the current operation. By default, return false (not drawn)
OnDrawOutline(wxDC & WXUNUSED (dc),double WXUNUSED (x),double WXUNUSED (y),double WXUNUSED (w),double WXUNUSED (h),double WXUNUSED (oldW),double WXUNUSED (oldH))70   virtual bool OnDrawOutline(wxDC& WXUNUSED(dc), double WXUNUSED(x), double WXUNUSED(y), double WXUNUSED(w), double WXUNUSED(h),
71     double WXUNUSED(oldW), double WXUNUSED(oldH)) { return false; }
72 
73   // Get the perimeter point using this data
GetPerimeterPoint(double WXUNUSED (x1),double WXUNUSED (y1),double WXUNUSED (x2),double WXUNUSED (y2),double * WXUNUSED (x3),double * WXUNUSED (y3),double WXUNUSED (xOffset),double WXUNUSED (yOffset),int WXUNUSED (attachmentMode))74   virtual bool GetPerimeterPoint(double WXUNUSED(x1), double WXUNUSED(y1),
75                                      double WXUNUSED(x2), double WXUNUSED(y2),
76                                      double *WXUNUSED(x3), double *WXUNUSED(y3),
77                                      double WXUNUSED(xOffset), double WXUNUSED(yOffset),
78                                      int WXUNUSED(attachmentMode))
79   { return false; }
80 
81 protected:
82   int           m_op;
83 
84 };
85 
86 /*
87  * Set font, brush, text colour
88  *
89  */
90 
91 class WXDLLIMPEXP_OGL wxOpSetGDI: public wxDrawOp
92 {
93  public:
94   wxOpSetGDI(int theOp, wxPseudoMetaFile *theImage, int theGdiIndex, int theMode = 0);
95   void Do(wxDC& dc, double xoffset, double yoffset);
96   wxDrawOp *Copy(wxPseudoMetaFile *newImage);
97 #if wxUSE_PROLOGIO
98   wxExpr *WriteExpr(wxPseudoMetaFile *image);
99   void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr);
100 #endif
101 
102 public:
103   int               m_mode;
104   int               m_gdiIndex;
105   wxPseudoMetaFile* m_image;
106   unsigned char     m_r;
107   unsigned char     m_g;
108   unsigned char     m_b;
109 };
110 
111 /*
112  * Set/destroy clipping
113  *
114  */
115 
116 class WXDLLIMPEXP_OGL wxOpSetClipping: public wxDrawOp
117 {
118 public:
119   wxOpSetClipping(int theOp, double theX1, double theY1, double theX2, double theY2);
120   void Do(wxDC& dc, double xoffset, double yoffset);
121   void Scale(double xScale, double yScale);
122   void Translate(double x, double y);
123   wxDrawOp *Copy(wxPseudoMetaFile *newImage);
124 #if wxUSE_PROLOGIO
125   wxExpr *WriteExpr(wxPseudoMetaFile *image);
126   void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr);
127 #endif
128 
129 public:
130   double     m_x1;
131   double     m_y1;
132   double     m_x2;
133   double     m_y2;
134 };
135 
136 /*
137  * Draw line, rectangle, rounded rectangle, ellipse, point, arc, text
138  *
139  */
140 
141 class WXDLLIMPEXP_OGL wxOpDraw: public wxDrawOp
142 {
143  public:
144   wxOpDraw(int theOp, double theX1, double theY1, double theX2, double theY2,
145          double radius = 0.0, const wxString& s = wxEmptyString);
146   ~wxOpDraw();
147   void Do(wxDC& dc, double xoffset, double yoffset);
148   void Scale(double scaleX, double scaleY);
149   void Translate(double x, double y);
150   void Rotate(double x, double y, double theta, double sinTheta, double cosTheta);
151   wxDrawOp *Copy(wxPseudoMetaFile *newImage);
152 #if wxUSE_PROLOGIO
153   wxExpr *WriteExpr(wxPseudoMetaFile *image);
154   void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr);
155 #endif
156 
157 public:
158   double     m_x1;
159   double     m_y1;
160   double     m_x2;
161   double     m_y2;
162   double     m_x3;
163   double     m_y3;
164   double     m_radius;
165   wxString   m_textString;
166 
167 };
168 
169 /*
170  * Draw polyline, spline, polygon
171  *
172  */
173 
174 class WXDLLIMPEXP_OGL wxOpPolyDraw: public wxDrawOp
175 {
176 public:
177   wxOpPolyDraw(int theOp, int n, wxRealPoint *thePoints);
178   ~wxOpPolyDraw();
179   void Do(wxDC& dc, double xoffset, double yoffset);
180   void Scale(double scaleX, double scaleY);
181   void Translate(double x, double y);
182   void Rotate(double x, double y, double theta, double sinTheta, double cosTheta);
183   wxDrawOp *Copy(wxPseudoMetaFile *newImage);
184 #if wxUSE_PROLOGIO
185   wxExpr *WriteExpr(wxPseudoMetaFile *image);
186   void ReadExpr(wxPseudoMetaFile *image, wxExpr *expr);
187 #endif
188 
189   // Draw an outline using the current operation.
190   virtual bool OnDrawOutline(wxDC& dc, double x, double y, double w, double h,
191     double oldW, double oldH);
192 
193   // Get the perimeter point using this data
194   bool GetPerimeterPoint(double x1, double y1,
195                                      double x2, double y2,
196                                      double *x3, double *y3,
197                                      double xOffset, double yOffset,
198                                      int attachmentMode);
199 
200 public:
201   wxRealPoint*  m_points;
202   int           m_noPoints;
203 
204 };
205 
206 #endif
207  // _OGL_DRAWNP_H_
208 
209 
210