80ed66cb32db558804bf0bb2269efdcdf2295a7d
[mono.git] / mcs / class / System.Drawing / Test / System.Drawing.Drawing2D / TestHatchBrush.cs
1 //
2 // System.Drawing.Drawing2D.TestHatchBrush.cs 
3 //
4 // Author:
5 //      Ravindra (rkumar@novell.com)
6 //
7 // Copyright (C) 2004 Novell, Inc. http://www.novell.com
8 //
9
10 using System;
11 using System.Drawing;
12 using System.Drawing.Imaging;
13 using System.Drawing.Drawing2D;
14 using NUnit.Framework;
15
16 namespace MonoTests.System.Drawing.Drawing2D
17 {
18         [TestFixture]   
19         public class HatchBrushTest : Assertion
20         {
21                 Graphics gr;
22                 Bitmap bmp;
23                 Font font;
24                 Color bgColor;  // background color
25                 Color fgColor;  // foreground color
26                 int currentTop; // the location for next drawing operation
27                 int spacing;    // space between two consecutive drawing operations
28                 int fontSize;   // text size
29                 int textStart;  // text starting location
30                 int lineStart;  // line starting location
31                 int length;     // length of the line
32                 int penWidth;   // width of the Pen used to draw lines
33
34                 [SetUp]
35                 public void GetReady () { }
36                 
37                 [TearDown]
38                 public void Clear () { }
39
40                 public HatchBrushTest ()
41                 {
42                         fontSize = 16;
43                         textStart = 10;
44                         lineStart = 200;
45                         length = 400;
46                         penWidth = 50;
47                         currentTop = 0;
48                         spacing = 50;
49
50                         bgColor = Color.Yellow;
51                         fgColor = Color.Red;
52                 }
53                         
54                 [Test]
55                 public void TestProperties () 
56                 {
57                         HatchBrush hbr = new HatchBrush(HatchStyle.SolidDiamond, fgColor);
58
59                         AssertEquals ("Props#1", hbr.HatchStyle, HatchStyle.SolidDiamond);
60                         AssertEquals ("Props#2", hbr.ForegroundColor.ToArgb(), fgColor.ToArgb());
61                         AssertEquals ("Props#3", hbr.BackgroundColor.ToArgb(), Color.Black.ToArgb());
62
63                         hbr = new HatchBrush(HatchStyle.Cross, fgColor, bgColor);
64
65                         AssertEquals ("Props#4", hbr.HatchStyle, HatchStyle.Cross);
66                         AssertEquals ("Props#5", hbr.ForegroundColor.ToArgb(), fgColor.ToArgb());
67                         AssertEquals ("Props#6", hbr.BackgroundColor.ToArgb(), bgColor.ToArgb());
68                 }
69                 
70                 [Test]
71                 public void TestClone ()
72                 {
73                         HatchBrush hbr = new HatchBrush(HatchStyle.Cross, fgColor, bgColor);
74
75                         HatchBrush clone = (HatchBrush) hbr.Clone ();
76
77                         AssertEquals ("Clone#1", hbr.HatchStyle, clone.HatchStyle);
78                         AssertEquals ("Clone#2", hbr.ForegroundColor, clone.ForegroundColor);
79                         AssertEquals ("Clone#3", hbr.BackgroundColor, clone.BackgroundColor);
80                 }
81
82                 [Test]
83                 public void TestDrawing ()
84                 {
85                         // create a bitmap with big enough dimensions 
86                         // to accomodate all the tests
87                         bmp = new Bitmap (700, 4000); // width, height
88                         gr = Graphics.FromImage (bmp);
89                         font = new Font (new FontFamily ("Arial"), fontSize);
90
91                         // make the background white
92                         gr.Clear (Color.White);
93
94                         // draw figures using hatch brush constructed
95                         // using different constructors
96                         Constructors ();
97
98                         // draw figures using different hatchstyles
99                         HatchStyles ();
100
101                         // save the drawing
102                         string file = getDir () + "TestHatchBrush.png";
103                         bmp.Save (file, ImageFormat.Png);
104                 }
105
106                 private void Constructors ()
107                 {
108                         int top = currentTop;
109                         SolidBrush br = new SolidBrush (Color.Black);
110
111                         top += spacing;
112
113                         gr.DrawString ("Test Constructors", font, br, textStart, top);
114
115                         // #1
116                         top += spacing;
117                         gr.DrawString ("Test #1 Horizontal, BackgroundColor=Black, ForegroundColor=White", font, br, textStart, top);
118
119                         top += spacing;
120                         Pen pen = new Pen (new HatchBrush (HatchStyle.Horizontal, Color.White), penWidth);
121                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
122
123                         // #2
124                         top += spacing;
125                         gr.DrawString ("Test #2 Vertical, BackgroundColor=Blue, ForegroundColor=Red", font, br, textStart, top);
126                         
127                         top += spacing;
128                         pen = new Pen (new HatchBrush (HatchStyle.Vertical, Color.Red, Color.Blue), penWidth);
129                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
130
131                         currentTop = top;
132                 }
133
134                 private void HatchStyles ()
135                 {
136                         int top = currentTop;
137                         HatchBrush hbr;
138                         Pen pen;
139                         SolidBrush br = new SolidBrush (Color.Black);
140
141                         top += spacing;
142
143                         gr.DrawString ("Test HatchStyles", font, br, textStart, top);
144
145                         // #1
146                         top += spacing;
147                         gr.DrawString ("Test #1 Horizontal", font, br, textStart, top);
148
149                         top += spacing;
150                         hbr = new HatchBrush (HatchStyle.Horizontal, fgColor, bgColor);
151                         pen = new Pen (hbr, penWidth);
152                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
153
154                         // #2
155                         top += spacing;
156                         gr.DrawString ("Test #2 Min", font, br, textStart, top);
157                         
158                         top += spacing;
159                         pen.Brush = new HatchBrush (HatchStyle.Min, fgColor, bgColor);
160                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
161
162                         // #3
163                         top += spacing;
164                         gr.DrawString ("Test #3 DarkHorizontal", font, br, textStart, top);
165
166                         top += spacing;
167                         pen.Brush = new HatchBrush (HatchStyle.DarkHorizontal, fgColor, bgColor);
168                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
169
170                         // #4
171                         top += spacing;
172                         gr.DrawString ("Test #4 LightHorizontal", font, br, textStart, top);
173
174                         top += spacing;
175                         pen.Brush = new HatchBrush (HatchStyle.LightHorizontal, fgColor, bgColor);
176                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
177
178                         // #5
179                         top += spacing;
180                         gr.DrawString ("Test #5 NarrowHorizontal", font, br, textStart, top);
181
182                         top += spacing;
183                         pen.Brush = new HatchBrush (HatchStyle.NarrowHorizontal, fgColor, bgColor);
184                         gr.DrawLine (pen, lineStart,top, lineStart + length,top);
185
186                         // #6
187                         top += spacing;
188                         gr.DrawString ("Test #6 Vertical", font, br, textStart, top);
189
190                         top += spacing;
191                         pen.Brush = new HatchBrush (HatchStyle.Vertical, fgColor, bgColor);
192                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
193
194                         // #7
195                         top += spacing;
196                         gr.DrawString ("Test #7 DarkVertical", font, br, textStart, top);
197
198                         top += spacing;
199                         pen.Brush = new HatchBrush (HatchStyle.DarkVertical, fgColor, bgColor);
200                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
201
202                         // #8
203                         top += spacing;
204                         gr.DrawString ("Test #8 LightVertical", font, br, textStart, top);
205
206                         top += spacing;
207                         pen.Brush = new HatchBrush (HatchStyle.LightVertical, fgColor, bgColor);
208                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
209
210                         // #9
211                         top += spacing;
212                         gr.DrawString ("Test #9 NarrowVertical", font, br, textStart, top);
213
214                         top += spacing;
215                         pen.Brush = new HatchBrush (HatchStyle.NarrowVertical, fgColor, bgColor);
216                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
217
218                         // #10
219                         top += spacing;
220                         gr.DrawString ("Test #10 Cross", font, br, textStart, top);
221
222                         top += spacing;
223                         pen.Brush = new HatchBrush (HatchStyle.Cross, fgColor, bgColor);
224                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
225
226                         // #11
227                         top += spacing;
228                         gr.DrawString ("Test #11 LargeGrid", font, br, textStart, top);
229
230                         top += spacing;
231                         pen.Brush = new HatchBrush (HatchStyle.LargeGrid, fgColor, bgColor);
232                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
233
234                         // #12
235                         top += spacing;
236                         gr.DrawString ("Test #12 SmallGrid", font, br, textStart, top);
237                         
238                         top += spacing;
239                         pen.Brush = new HatchBrush (HatchStyle.SmallGrid, fgColor, bgColor);
240                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
241
242                         // #13
243                         top += spacing;
244                         gr.DrawString ("Test #13 DottedGrid", font, br, textStart, top);
245                         
246                         top += spacing;
247                         pen.Brush = new HatchBrush (HatchStyle.DottedGrid, fgColor, bgColor);
248                         gr.DrawLine (pen, lineStart,top, lineStart + length,top);
249
250                         // #14
251                         top += spacing;
252                         gr.DrawString ("Test #14 DiagonalCross", font, br, textStart, top);
253
254                         top += spacing;
255                         pen.Brush = new HatchBrush (HatchStyle.DiagonalCross, fgColor, bgColor);
256                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
257
258                         // #15
259                         top += spacing;
260                         gr.DrawString ("Test #15 BackwardDiagonal", font, br, textStart, top);
261
262                         top += spacing;
263                         pen.Brush = new HatchBrush (HatchStyle.BackwardDiagonal, fgColor, bgColor);
264                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
265
266                         // #16
267                         top += spacing;
268                         gr.DrawString ("Test #16 ForwardDiagonal", font, br, textStart, top);
269
270                         top += spacing;
271                         pen.Brush = new HatchBrush (HatchStyle.ForwardDiagonal, fgColor, bgColor);
272                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
273
274                         // #17
275                         top += spacing;
276                         gr.DrawString ("Test #17 LightDownwardDiagonal", font, br, textStart, top);
277
278                         top += spacing;
279                         pen.Brush = new HatchBrush (HatchStyle.LightDownwardDiagonal, fgColor, bgColor);
280                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
281
282                         // #18
283                         top += spacing;
284                         gr.DrawString ("Test #18 DarkDownwardDiagonal", font, br, textStart, top);
285
286                         top += spacing;
287                         pen.Brush = new HatchBrush (HatchStyle.DarkDownwardDiagonal, fgColor, bgColor);
288                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
289
290                         // #19
291                         top += spacing;
292                         gr.DrawString ("Test #19 WideDownwardDiagonal", font, br, textStart, top);
293
294                         top += spacing;
295                         pen.Brush = new HatchBrush (HatchStyle.WideDownwardDiagonal, fgColor, bgColor);
296                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
297
298                         // #20
299                         top += spacing;
300                         gr.DrawString ("Test #20 LightUpwardDiagonal", font, br, textStart, top);
301
302                         top += spacing;
303                         pen.Brush = new HatchBrush (HatchStyle.LightUpwardDiagonal, fgColor, bgColor);
304                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
305
306                         // #21
307                         top += spacing;
308                         gr.DrawString ("Test #21 DarkUpwardDiagonal", font, br, textStart, top);
309
310                         top += spacing;
311                         pen.Brush = new HatchBrush (HatchStyle.DarkUpwardDiagonal, fgColor, bgColor);
312                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
313
314                         // #22
315                         top += spacing;
316                         gr.DrawString ("Test #22 WideUpwardDiagonal", font, br, textStart, top);
317
318                         top += spacing;
319                         pen.Brush = new HatchBrush (HatchStyle.WideUpwardDiagonal, fgColor, bgColor);
320                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
321
322                         // #23
323                         top += spacing;
324                         gr.DrawString ("Test #23 DashedHorizontal", font, br, textStart, top);
325                         
326                         top += spacing;
327                         pen.Brush = new HatchBrush (HatchStyle.DashedHorizontal, fgColor, bgColor);
328                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
329
330                         // #24
331                         top += spacing;
332                         gr.DrawString ("Test #24 DashedVertical", font, br, textStart, top);
333                         
334                         top += spacing;
335                         hbr = new HatchBrush (HatchStyle.DashedVertical, fgColor, bgColor);
336                         gr.FillRectangle (hbr, lineStart, top, length, penWidth);
337
338                         // #25
339                         top += spacing;
340                         gr.DrawString ("Test #25 DashedDownwardDiagonal", font, br, textStart, top);
341                         
342                         top += spacing;
343                         hbr = new HatchBrush (HatchStyle.DashedDownwardDiagonal, fgColor, bgColor);
344                         gr.FillRectangle (hbr, lineStart, top, length, penWidth);
345
346                         // #26
347                         top += spacing;
348                         gr.DrawString ("Test #26 DashedUpwardDiagonal", font, br, textStart, top);
349                         
350                         top += spacing;
351                         pen = new Pen (new HatchBrush (HatchStyle.DashedUpwardDiagonal, fgColor, bgColor), penWidth);
352                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
353
354                         // #27
355                         top += spacing;
356                         gr.DrawString ("Test #27 HorizontalBrick", font, br, textStart, top);
357                         
358                         top += spacing;
359                         pen = new Pen (new HatchBrush (HatchStyle.HorizontalBrick, fgColor, bgColor), penWidth);
360                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
361
362                         // #28
363                         top += spacing;
364                         gr.DrawString ("Test #28 DiagonalBrick", font, br, textStart, top);
365                         
366                         top += spacing;
367                         pen = new Pen (new HatchBrush (HatchStyle.DiagonalBrick, fgColor, bgColor), penWidth);
368                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
369
370                         // #29
371                         top += spacing;
372                         gr.DrawString ("Test #29 LargeCheckerBoard", font, br, textStart, top);
373                         
374                         top += spacing;
375                         pen.Brush = new HatchBrush (HatchStyle.LargeCheckerBoard, fgColor, bgColor);
376                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
377
378                         // #30
379                         top += spacing;
380                         gr.DrawString ("Test #30 SmallCheckerBoard", font, br, textStart, top);
381                         
382                         top += spacing;
383                         pen.Brush = new HatchBrush (HatchStyle.SmallCheckerBoard, fgColor, bgColor);
384                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
385
386                         // #31
387                         top += spacing;
388                         gr.DrawString ("Test #31 OutlinedDiamond", font, br, textStart, top);
389                         
390                         top += spacing;
391                         pen.Brush = new HatchBrush (HatchStyle.OutlinedDiamond, fgColor, bgColor);
392                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
393
394                         // #32
395                         top += spacing;
396                         gr.DrawString ("Test #32 SolidDiamond", font, br, textStart, top);
397                         
398                         top += spacing;
399                         pen.Brush = new HatchBrush (HatchStyle.SolidDiamond, fgColor, bgColor);
400                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
401
402                         // #33
403                         top += spacing;
404                         gr.DrawString ("Test #33 DottedDiamond", font, br, textStart, top);
405                         
406                         top += spacing;
407                         pen.Brush = new HatchBrush (HatchStyle.DottedDiamond, fgColor, bgColor);
408                         gr.DrawLine (pen, lineStart, top, lineStart + length, top);
409
410                         currentTop = top;
411                 }
412
413                 /* Get the right directory depending on the runtime */
414                 private string getDir ()
415                 {
416                         string dir;
417
418                         if (Environment.GetEnvironmentVariable ("MSNet") == null)
419                                 dir = "mono/";
420                         else
421                                 dir = "MSNet/";
422
423                         return dir;
424                 }
425         }
426 }