2004-05-14 Nick Drochak <ndrochak@gol.com>
[mono.git] / mcs / class / System.Drawing / System.Drawing.Drawing2D / GraphicsPath.cs
1 //\r
2 // System.Drawing.Drawing2D.GraphicsPath.cs\r
3 //\r
4 // Authors:\r
5 //\r
6 //   Miguel de Icaza (miguel@ximian.com)\r
7 //   Duncan Mak (duncan@ximian.com)\r
8 //   Jordi Mas i Hernandez (jordi@ximian.com)\r
9 //\r
10 // (C) 2004 Novell, Inc\r
11 //\r
12 \r
13 using System;\r
14 using System.Drawing;\r
15 using System.Runtime.InteropServices;\r
16 \r
17 namespace System.Drawing.Drawing2D\r
18 {\r
19         public sealed class GraphicsPath : MarshalByRefObject, ICloneable, IDisposable {\r
20 \r
21                 internal IntPtr nativePath = IntPtr.Zero;\r
22 \r
23                 GraphicsPath (IntPtr ptr)\r
24                 {\r
25                         nativePath = ptr;\r
26                 }\r
27                                         \r
28                 public GraphicsPath ()\r
29                 {\r
30                         Status status = GDIPlus.GdipCreatePath (FillMode.Alternate, out nativePath);\r
31                         GDIPlus.CheckStatus (status);\r
32                 }\r
33                 \r
34                 public GraphicsPath (FillMode fillMode)\r
35                 {\r
36                         Status status = GDIPlus.GdipCreatePath (fillMode, out nativePath);\r
37                         GDIPlus.CheckStatus (status);\r
38                 }\r
39                 \r
40                 public GraphicsPath (Point[] pts, byte[] types)\r
41                 {\r
42                         Status status = GDIPlus.GdipCreatePath2I (\r
43                                 pts, types, pts.Length, FillMode.Alternate, out nativePath);\r
44                         GDIPlus.CheckStatus (status);\r
45                 }\r
46                 \r
47                 public GraphicsPath (PointF[] pts, byte[] types)\r
48                 {\r
49                         Status status = GDIPlus.GdipCreatePath2 (pts, types, pts.Length, FillMode.Alternate, out nativePath);\r
50                         GDIPlus.CheckStatus (status);\r
51                 }\r
52                 \r
53                 public GraphicsPath (Point[] pts, byte[] types, FillMode fillMode)\r
54                 {\r
55                         Status status = GDIPlus.GdipCreatePath2I (\r
56                                 pts, types, pts.Length, fillMode, out nativePath);\r
57                         GDIPlus.CheckStatus (status);\r
58                 }\r
59 \r
60                 public GraphicsPath (PointF[] pts, byte[] types, FillMode fillMode)\r
61                 {\r
62                         Status status = GDIPlus.GdipCreatePath2 (pts, types, pts.Length, fillMode, out nativePath);\r
63                         GDIPlus.CheckStatus (status);\r
64                 }\r
65         \r
66                 public object Clone ()\r
67                 {\r
68                         IntPtr clone;\r
69 \r
70                         Status status = GDIPlus.GdipClonePath (nativePath, out clone);\r
71                         GDIPlus.CheckStatus (status);                           \r
72 \r
73                         return new GraphicsPath (clone);\r
74                 }\r
75 \r
76                 public void Dispose ()\r
77                 {\r
78                         Dispose (true);\r
79                         System.GC.SuppressFinalize (this);\r
80                 }\r
81 \r
82                 ~GraphicsPath ()\r
83                 {\r
84                         Dispose (false);\r
85                 }\r
86                 \r
87                 void Dispose (bool disposing)\r
88                 {\r
89                 \r
90                 }\r
91 \r
92 \r
93                 public FillMode FillMode {\r
94                         get {\r
95 \r
96                                 FillMode mode;\r
97                                 Status status = GDIPlus.GdipGetPathFillMode (nativePath, out mode);\r
98                                 GDIPlus.CheckStatus (status);                           \r
99                                 \r
100                                 return mode;\r
101                         }\r
102 \r
103                         set {\r
104                                 Status status = GDIPlus.GdipSetPathFillMode (nativePath, value);\r
105                                 GDIPlus.CheckStatus (status);                           \r
106                         }\r
107                 }\r
108 \r
109                 public PathData PathData {\r
110 \r
111                         get {\r
112                                 IntPtr tmp;\r
113                                 Status status = GDIPlus.GdipGetPathData (nativePath, out tmp);\r
114                                 GDIPlus.CheckStatus (status);                           \r
115 \r
116                                 throw new Exception ();\r
117                         }\r
118                 }\r
119 \r
120                 public PointF [] PathPoints {\r
121 \r
122                         get {\r
123                                 int count;\r
124                         \r
125                                 Status status = GDIPlus.GdipGetPointCount (nativePath, out count);\r
126                                 GDIPlus.CheckStatus (status);                           \r
127 \r
128                                 PointF [] points = new PointF [count];\r
129 \r
130                                 status = GDIPlus.GdipGetPathPoints (nativePath, points, count); \r
131                                 GDIPlus.CheckStatus (status);                           \r
132 \r
133                                 return points;\r
134                         }\r
135                 }\r
136 \r
137                 public byte [] PathTypes {\r
138 \r
139                         get {\r
140                                 int count;\r
141                                 Status status = GDIPlus.GdipGetPointCount (nativePath, out count);\r
142                                 GDIPlus.CheckStatus (status);                           \r
143 \r
144                                 byte [] types = new byte [count];\r
145                                 status = GDIPlus.GdipGetPathTypes (nativePath, types, count);\r
146                                 GDIPlus.CheckStatus (status);                           \r
147 \r
148                                 return types;\r
149                         }\r
150                 }\r
151 \r
152                 public int PointCount {\r
153 \r
154                         get {\r
155                                 int count;\r
156 \r
157                                 Status status = GDIPlus.GdipGetPointCount (nativePath, out count);\r
158                                 GDIPlus.CheckStatus (status);                           \r
159 \r
160                                 return count;\r
161                         }\r
162                 }\r
163                 \r
164                 internal IntPtr NativeObject{\r
165                 \r
166                         get {\r
167                                 return nativePath;\r
168                         }\r
169                         set {\r
170                                 nativePath = value;\r
171                         }\r
172                 }\r
173         \r
174                 //\r
175                 // AddArc\r
176                 //\r
177                 public void AddArc (Rectangle rect, float start_angle, float sweep_angle)\r
178                 {\r
179                         Status status = GDIPlus.GdipAddPathArcI (nativePath, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle);\r
180                         GDIPlus.CheckStatus (status);                           \r
181                 }\r
182 \r
183                 public void AddArc (RectangleF rect, float start_angle, float sweep_angle)\r
184                 {\r
185                         Status status = GDIPlus.GdipAddPathArc (nativePath, rect.X, rect.Y, rect.Width, rect.Height, start_angle, sweep_angle);\r
186                         GDIPlus.CheckStatus (status);                           \r
187                 }\r
188 \r
189                 public void AddArc (int x, int y, int width, int height, float start_angle, float sweep_angle)\r
190                 {\r
191                         Status status = GDIPlus.GdipAddPathArcI (nativePath, x, y, width, height, start_angle, sweep_angle);\r
192                         GDIPlus.CheckStatus (status);                           \r
193                 }\r
194 \r
195                 public void AddArc (float x, float y, float width, float height, float start_angle, float sweep_angle)\r
196                 {\r
197                         Status status = GDIPlus.GdipAddPathArc (nativePath, x, y, width, height, start_angle, sweep_angle);\r
198                         GDIPlus.CheckStatus (status);                           \r
199                 }\r
200 \r
201                 //\r
202                 // AddBezier\r
203                 //\r
204                 public void AddBezier (Point pt1, Point pt2, Point pt3, Point pt4)\r
205                 {\r
206                         Status status = GDIPlus.GdipAddPathBezierI (nativePath, pt1.X, pt1.Y,\r
207                                         pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y);\r
208                                         \r
209                         GDIPlus.CheckStatus (status);                                                                         \r
210                 }\r
211 \r
212                 public void AddBezier (PointF pt1, PointF pt2, PointF pt3, PointF pt4)\r
213                 {\r
214                         Status status = GDIPlus.GdipAddPathBezier (nativePath, pt1.X, pt1.Y,\r
215                                         pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y);\r
216                                         \r
217                         GDIPlus.CheckStatus (status);                                                                  \r
218                 }\r
219 \r
220                 public void AddBezier (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)\r
221                 {\r
222                         Status status = GDIPlus.GdipAddPathBezierI (nativePath, x1, y1, x2, y2, x3, y3, x4, y4);\r
223                         GDIPlus.CheckStatus (status);                           \r
224                 }\r
225 \r
226                 public void AddBezier (float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)\r
227                 {\r
228                         Status status = GDIPlus.GdipAddPathBezier (nativePath, x1, y1, x2, y2, x3, y3, x4, y4);\r
229                         GDIPlus.CheckStatus (status);                           \r
230                 }\r
231 \r
232                 //\r
233                 // AddBeziers\r
234                 //\r
235                 public void AddBeziers (Point [] pts)\r
236                 {\r
237                         Status status = GDIPlus.GdipAddPathBeziersI (nativePath, pts, pts.Length);\r
238                         GDIPlus.CheckStatus (status);                           \r
239                 }\r
240 \r
241                 public void AddBeziers (PointF [] pts)\r
242                 {\r
243                         Status status = GDIPlus.GdipAddPathBeziers (nativePath, pts, pts.Length);\r
244                         GDIPlus.CheckStatus (status);                           \r
245                 }\r
246 \r
247                 //\r
248                 // AddEllipse\r
249                 //\r
250                 public void AddEllipse (RectangleF r)\r
251                 {\r
252                         Status status = GDIPlus.GdipAddPathEllipse (nativePath, r.X, r.Y, r.Width, r.Height);\r
253                         GDIPlus.CheckStatus (status);                           \r
254                 }\r
255                 \r
256                 public void AddEllipse (float x, float y, float width, float height)\r
257                 {\r
258                         Status status = GDIPlus.GdipAddPathEllipse (nativePath, x, y, width, height);\r
259                         GDIPlus.CheckStatus (status);                           \r
260                 }\r
261 \r
262                 public void AddEllipse (Rectangle r)\r
263                 {\r
264                         Status status = GDIPlus.GdipAddPathEllipseI (nativePath, r.X, r.Y, r.Width, r.Height);\r
265                         GDIPlus.CheckStatus (status);                           \r
266                 }\r
267                 \r
268                 public void AddEllipse (int x, int y, int width, int height)\r
269                 {\r
270                         Status status = GDIPlus.GdipAddPathEllipseI (nativePath, x, y, width, height);\r
271                         GDIPlus.CheckStatus (status);                           \r
272                 }\r
273                 \r
274 \r
275                 //\r
276                 // AddLine\r
277                 //\r
278                 public void AddLine (Point a, Point b)\r
279                 {\r
280                         Status status = GDIPlus.GdipAddPathLineI (nativePath, a.X, a.Y, b.X, b.Y);\r
281                         GDIPlus.CheckStatus (status);                           \r
282                 }\r
283 \r
284                 public void AddLine (PointF a, PointF b)\r
285                 {\r
286                         Status status = GDIPlus.GdipAddPathLine (nativePath, a.X, a.Y, b.X,\r
287                                         b.Y);\r
288                                         \r
289                         GDIPlus.CheckStatus (status);                                                                  \r
290                 }\r
291 \r
292                 public void AddLine (int x1, int y1, int x2, int y2)\r
293                 {\r
294                         Status status = GDIPlus.GdipAddPathLineI (nativePath, x1, y1, x2, y2);\r
295                         GDIPlus.CheckStatus (status);                           \r
296                 }\r
297 \r
298                 public void AddLine (float x1, float y1, float x2, float y2)\r
299                 {\r
300                         Status status = GDIPlus.GdipAddPathLine (nativePath, x1, y1, x2,\r
301                                         y2);                \r
302                                         \r
303                         GDIPlus.CheckStatus (status);                                                                  \r
304                 }\r
305 \r
306                 //\r
307                 // AddLines\r
308                 //\r
309                 public void AddLines (Point [] points)\r
310                 {\r
311                         int length = points.Length;\r
312 \r
313                         for (int i = 0; i < length - 2; i += 2) {\r
314                                 int j = i + 1;\r
315                                 Status status = GDIPlus.GdipAddPathLineI (\r
316                                         nativePath, points [i].X, points [i].Y, points [j].X, points [j].Y);\r
317                                 GDIPlus.CheckStatus (status);                           \r
318                         }\r
319                 }\r
320 \r
321                 public void AddLines (PointF [] points)\r
322                 {\r
323                         int length = points.Length;\r
324 \r
325                         for (int i = 0; i < length - 2; i += 2) {\r
326                                 int j = i + 1;\r
327                                 Status status = GDIPlus.GdipAddPathLine (\r
328                                         nativePath, points [i].X, points [i].Y, points [j].X, points [j].Y);\r
329                                 GDIPlus.CheckStatus (status);                           \r
330                         }\r
331                 }\r
332         \r
333                 //\r
334                 // AddPie\r
335                 //\r
336                 public void AddPie (Rectangle rect, float startAngle, float sweepAngle)\r
337                 {\r
338                         Status status = GDIPlus.GdipAddPathPie (\r
339                                 nativePath, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle);\r
340                         GDIPlus.CheckStatus (status);                           \r
341                 }\r
342 \r
343                 public void AddPie (int x, int y, int width, int height, float startAngle, float sweepAngle)\r
344                 {\r
345                         Status status = GDIPlus.GdipAddPathPieI (nativePath, x, y, width, height, startAngle, sweepAngle);\r
346                         GDIPlus.CheckStatus (status);                           \r
347                 }\r
348 \r
349                 public void AddPie (float x, float y, float width, float height, float startAngle, float sweepAngle)\r
350                 {\r
351                         Status status = GDIPlus.GdipAddPathPie (nativePath, x, y, width, height, startAngle, sweepAngle);                \r
352                         GDIPlus.CheckStatus (status);                           \r
353                 }\r
354 \r
355                 //\r
356                 // AddPolygon\r
357                 //\r
358                 public void AddPolygon (Point [] points)\r
359                 {\r
360                         Status status = GDIPlus.GdipAddPathPolygonI (nativePath, points, points.Length);\r
361                         GDIPlus.CheckStatus (status);                           \r
362                 }\r
363 \r
364                 public void AddPolygon (PointF [] points)\r
365                 {\r
366                         Status status = GDIPlus.GdipAddPathPolygon (nativePath, points, points.Length);\r
367                         GDIPlus.CheckStatus (status);                           \r
368                 }\r
369 \r
370                 //\r
371                 // AddRectangle\r
372                 //\r
373                 public void AddRectangle (Rectangle rect)\r
374                 {\r
375                         Status status = GDIPlus.GdipAddPathRectangleI (nativePath, rect.X, rect.Y, rect.Width, rect.Height);\r
376                         GDIPlus.CheckStatus (status);                           \r
377                 }\r
378 \r
379                 public void AddRectangle (RectangleF rect)\r
380                 {\r
381                         Status status = GDIPlus.GdipAddPathRectangle (nativePath, rect.X, rect.Y, rect.Width, rect.Height);\r
382                         GDIPlus.CheckStatus (status);                           \r
383                 }\r
384 \r
385                 //\r
386                 // AddRectangles\r
387                 //\r
388                 public void AddRectangles (Rectangle [] rects)\r
389                 {\r
390                         Status status = GDIPlus.GdipAddPathRectanglesI (nativePath, rects, rects.Length);\r
391                         GDIPlus.CheckStatus (status);                           \r
392                 }\r
393 \r
394                 public void AddRectangles (RectangleF [] rects)\r
395                 {\r
396                         Status status = GDIPlus.GdipAddPathRectangles (nativePath, rects, rects.Length);\r
397                         GDIPlus.CheckStatus (status);                           \r
398                 }\r
399 \r
400                 //\r
401                 // AddPath\r
402                 //\r
403                 public void AddPath (GraphicsPath addingPath, bool connect)\r
404                 {\r
405                         Status status = GDIPlus.GdipAddPathPath (nativePath, addingPath.nativePath, connect);\r
406                         GDIPlus.CheckStatus (status);                           \r
407                 }\r
408 \r
409                 public PointF GetLastPoint ()\r
410                 {\r
411                         PointF pt;\r
412                         Status status = GDIPlus.GdipGetPathLastPoint (nativePath, out pt);\r
413                         GDIPlus.CheckStatus (status);                           \r
414 \r
415                         return pt;\r
416                 }\r
417 \r
418                 //\r
419                 // AddClosedCurve\r
420                 //\r
421                 public void AddClosedCurve (Point [] points)\r
422                 {\r
423                         Status status = GDIPlus.GdipAddPathClosedCurveI (nativePath, points, points.Length);\r
424                         GDIPlus.CheckStatus (status);                           \r
425                 }\r
426 \r
427                 public void AddClosedCurve (PointF [] points)\r
428                 {\r
429                         Status status = GDIPlus.GdipAddPathClosedCurve (nativePath, points, points.Length);\r
430                         GDIPlus.CheckStatus (status);                           \r
431                 }\r
432 \r
433                 public void AddClosedCurve (Point [] points, float tension)\r
434                 {\r
435                         Status status = GDIPlus.GdipAddPathClosedCurve2I (nativePath, points, points.Length, tension);\r
436                         GDIPlus.CheckStatus (status);                           \r
437                 }\r
438 \r
439                 public void AddClosedCurve (PointF [] points, float tension)\r
440                 {\r
441                         Status status = GDIPlus.GdipAddPathClosedCurve2 (nativePath, points, points.Length, tension);\r
442                         GDIPlus.CheckStatus (status);                           \r
443                 }\r
444 \r
445                 //\r
446                 // AddCurve\r
447                 //\r
448                 public void AddCurve (Point [] points)\r
449                 {\r
450                         Status status = GDIPlus.GdipAddPathCurveI (nativePath, points, points.Length);\r
451                         GDIPlus.CheckStatus (status);                           \r
452                 }\r
453                 \r
454                 public void AddCurve (PointF [] points)\r
455                 {\r
456                         Status status = GDIPlus.GdipAddPathCurve (nativePath, points, points.Length);\r
457                         GDIPlus.CheckStatus (status);                           \r
458                 }\r
459                 \r
460                 public void AddCurve (Point [] points, float tension)\r
461                 {\r
462                         Status status = GDIPlus.GdipAddPathCurve2I (nativePath, points, points.Length, tension);\r
463                         GDIPlus.CheckStatus (status);                           \r
464                 }\r
465                 \r
466                 public void AddCurve (PointF [] points, float tension)\r
467                 {\r
468                         Status status = GDIPlus.GdipAddPathCurve2 (nativePath, points, points.Length, tension);\r
469                         GDIPlus.CheckStatus (status);                           \r
470                 }\r
471 \r
472                 public void AddCurve (Point [] points, int offset, int numberOfSegments, float tension)\r
473                 {\r
474                         Status status = GDIPlus.GdipAddPathCurve3I (nativePath, points, points.Length,\r
475                                         offset, numberOfSegments, tension);\r
476                                         \r
477                         GDIPlus.CheckStatus (status);                                                                  \r
478                 }\r
479                 \r
480                 public void AddCurve (PointF [] points, int offset, int numberOfSegments, float tension)\r
481                 {\r
482                         Status status = GDIPlus.GdipAddPathCurve3 (nativePath, points, points.Length,\r
483                                         offset, numberOfSegments, tension);\r
484                                         \r
485                         GDIPlus.CheckStatus (status);                                                                  \r
486                 }\r
487                         \r
488                 public void Reset ()\r
489                 {\r
490                         Status status = GDIPlus.GdipResetPath (nativePath);\r
491                         GDIPlus.CheckStatus (status);                           \r
492                 }\r
493 \r
494                 public void Reverse ()\r
495                 {\r
496                         Status status = GDIPlus.GdipReversePath (nativePath);\r
497                         GDIPlus.CheckStatus (status);                           \r
498                 }\r
499 \r
500                 public void Transform (Matrix matrix)\r
501                 {\r
502                         Status status = GDIPlus.GdipTransformPath (nativePath, matrix.nativeMatrix);\r
503                         GDIPlus.CheckStatus (status);                           \r
504                 }\r
505                 \r
506                 [MonoTODO]\r
507                 public void AddString (string s, FontFamily family, int style,  float emSize,  Point origin,   StringFormat format)\r
508                 {\r
509                         throw new NotImplementedException ();\r
510                 }       \r
511                 \r
512                 [MonoTODO]\r
513                 public void AddString (string s,  FontFamily family,  int style,  float emSize,  PointF origin,   StringFormat format)\r
514                 {\r
515                         throw new NotImplementedException ();\r
516                 }       \r
517                 \r
518                 [MonoTODO]\r
519                 public void AddString (string s, FontFamily family, int style, float emSize,  Rectangle layoutRect, StringFormat format)\r
520                 {\r
521                         throw new NotImplementedException ();\r
522                 }       \r
523                 \r
524                 [MonoTODO]\r
525                 public void AddString (string s, FontFamily family, int style, float emSize,  RectangleF layoutRect,   StringFormat format)\r
526                 {\r
527                         throw new NotImplementedException ();\r
528                 }       \r
529                 \r
530                 public void ClearMarkers()               \r
531                 {\r
532                         Status s = GDIPlus.GdipClearPathMarkers (nativePath);\r
533 \r
534                         GDIPlus.CheckStatus (s);\r
535                 }\r
536                 \r
537                 public void CloseAllFigures()\r
538                 {\r
539                         Status s = GDIPlus.GdipClosePathFigures (nativePath);\r
540 \r
541                         GDIPlus.CheckStatus (s);\r
542                 }       \r
543                 \r
544                 public void CloseFigure()\r
545                 {\r
546                         Status s = GDIPlus.GdipClosePathFigure (nativePath);\r
547 \r
548                         GDIPlus.CheckStatus (s);\r
549                 } \r
550 \r
551                 public void Flatten ()\r
552                 {\r
553                         // 1/4 is the FlatnessDefault as defined in GdiPlusEnums.h\r
554                         Flatten (null, 1.0f / 4.0f); \r
555                 }       \r
556   \r
557                 public void Flatten (Matrix matrix)\r
558                 {\r
559                         Flatten (matrix, 1.0f / 4.0f);\r
560                 }\r
561                 \r
562                 public void Flatten (Matrix matrix, float flatness)\r
563                 {\r
564                         Status status = GDIPlus.GdipFlattenPath (nativePath, matrix.nativeMatrix, flatness);\r
565 \r
566                         GDIPlus.CheckStatus (status);\r
567                 }               \r
568                 \r
569                 public RectangleF GetBounds ()\r
570                 {\r
571                         return GetBounds (null, null);\r
572                 }               \r
573 \r
574                 public RectangleF GetBounds (Matrix matrix)\r
575                 {\r
576                         return GetBounds (matrix, null);\r
577                 }\r
578 \r
579                 [MonoTODO]\r
580                 public RectangleF GetBounds (Matrix matrix, Pen pen)\r
581                 {\r
582                         RectangleF retval;\r
583                         IntPtr m = (matrix == null) ? (IntPtr) null : matrix.nativeMatrix;\r
584                         IntPtr p = (pen == null) ? (IntPtr) null : pen.nativeObject;\r
585                         \r
586                         Status s = GDIPlus.GdipGetPathWorldBounds (nativePath, out retval, m, p);\r
587 \r
588                         GDIPlus.CheckStatus (s);\r
589 \r
590                         return retval;\r
591                 }\r
592                                 \r
593                 public bool IsOutlineVisible (Point point, Pen pen)\r
594                 {\r
595                         return IsOutlineVisible (point.X, point.Y, pen, null);\r
596                 }               \r
597                 \r
598                 public bool IsOutlineVisible (PointF point, Pen pen)\r
599                 {\r
600                         return IsOutlineVisible (point.X, point.Y, pen, null);\r
601                 } \r
602                 \r
603                 public bool IsOutlineVisible (int x, int y, Pen pen)\r
604                 {\r
605                         return IsOutlineVisible (x, y, pen, null);\r
606                 }\r
607 \r
608                 public bool IsOutlineVisible (float x, float y, Pen pen)\r
609                 {\r
610                         return IsOutlineVisible (x, y, pen, null);\r
611                 }               \r
612                 \r
613                 public bool IsOutlineVisible (Point pt, Pen pen, Graphics graphics)\r
614                 {\r
615                         return IsOutlineVisible (pt.X, pt.Y, pen, graphics);\r
616                 }               \r
617                 \r
618                 public bool IsOutlineVisible (PointF pt, Pen pen, Graphics graphics)\r
619                 {\r
620                         return IsOutlineVisible (pt.X, pt.Y, pen, graphics);\r
621                 }               \r
622                                 \r
623                 [MonoTODO]\r
624                 public bool IsOutlineVisible (int x, int y, Pen pen, Graphics graphics)\r
625                 {\r
626                         bool result;\r
627                         IntPtr g = (graphics == null) ? (IntPtr) null : graphics.nativeObject;\r
628                         \r
629                         Status s = GDIPlus.GdipIsOutlineVisiblePathPointI (nativePath, x, y, g, out result);\r
630                         GDIPlus.CheckStatus (s);\r
631 \r
632                         return result;\r
633                 }               \r
634                 \r
635                 [MonoTODO]\r
636                 public bool IsOutlineVisible (float x, float y, Pen pen, Graphics graphics)\r
637                 {\r
638                         bool result;\r
639                         IntPtr g = (graphics == null) ? (IntPtr) null : graphics.nativeObject;\r
640                         \r
641                         Status s = GDIPlus.GdipIsOutlineVisiblePathPoint (nativePath, x, y, g, out result);\r
642                         GDIPlus.CheckStatus (s);\r
643 \r
644                         return result;\r
645                 }               \r
646                 \r
647                 public bool IsVisible (Point point)\r
648                 {\r
649                         return IsVisible (point.X, point.Y, null);\r
650                 }               \r
651                 \r
652                 public bool IsVisible (PointF point)\r
653                 {\r
654                         return IsVisible (point.X, point.Y, null);\r
655                 }               \r
656                 \r
657                 public bool IsVisible (int x, int y)\r
658                 {\r
659                         return IsVisible (x, y, null);\r
660                 }\r
661 \r
662                 public bool IsVisible (float x, float y)\r
663                 {\r
664                         return IsVisible (x, y, null);\r
665                 }                               \r
666                 \r
667                 public bool IsVisible (Point pt, Graphics graphics)\r
668                 {\r
669                         return IsVisible (pt.X, pt.Y, graphics);\r
670                 }               \r
671                 \r
672                 public bool IsVisible (PointF pt, Graphics graphics)\r
673                 {\r
674                         return IsVisible (pt.X, pt.Y, graphics);\r
675                 }               \r
676                                 \r
677                 [MonoTODO]\r
678                 public bool IsVisible (int x, int y, Graphics graphics)\r
679                 {\r
680                         bool retval;\r
681 \r
682                         IntPtr g = (graphics == null) ? (IntPtr) null : graphics.nativeObject;\r
683 \r
684                         Status s = GDIPlus.GdipIsVisiblePathPointI (nativePath, x, y, g, out retval);\r
685 \r
686                         GDIPlus.CheckStatus (s);\r
687 \r
688                         return retval;\r
689                 }               \r
690                 \r
691                 [MonoTODO]\r
692                 public bool IsVisible (float x, float y, Graphics graphics)\r
693                 {\r
694                         bool retval;\r
695 \r
696                         IntPtr g = (graphics == null) ? (IntPtr) null : graphics.nativeObject;\r
697 \r
698                         Status s = GDIPlus.GdipIsVisiblePathPoint (nativePath, x, y, g, out retval);\r
699 \r
700                         GDIPlus.CheckStatus (s);\r
701 \r
702                         return retval;\r
703                 }               \r
704                 \r
705                 public void SetMarker ()\r
706                 {\r
707                         Status s = GDIPlus.GdipSetPathMarker (nativePath);\r
708 \r
709                         GDIPlus.CheckStatus (s);\r
710                 }\r
711                 \r
712                 public void StartFigure()\r
713                 {\r
714                         Status s = GDIPlus.GdipStartPathFigure (nativePath);\r
715 \r
716                         GDIPlus.CheckStatus (s);\r
717                 }               \r
718                 \r
719                 public void Warp (PointF[] destPoints, RectangleF srcRect)\r
720                 {\r
721                         Warp (destPoints, srcRect, null, WarpMode.Perspective, 1.0f / 4.0f);\r
722                 }               \r
723 \r
724                 public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix)\r
725                 {\r
726                         Warp (destPoints, srcRect, matrix, WarpMode.Perspective, 1.0f / 4.0f);\r
727                 }               \r
728 \r
729                 public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix, WarpMode warpMode)\r
730                 {\r
731                         Warp (destPoints, srcRect, matrix, warpMode, 1.0f / 4.0f);\r
732                 }               \r
733 \r
734                 [MonoTODO]\r
735                 public void Warp (PointF[] destPoints, RectangleF srcRect, Matrix matrix,  WarpMode warpMode, float flatness)\r
736                 {\r
737                         IntPtr m = (matrix == null) ? (IntPtr) null : matrix.nativeMatrix;\r
738 \r
739                         Status s = GDIPlus.GdipWarpPath (nativePath, m, destPoints, destPoints.Length,\r
740                                         srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, warpMode, flatness);\r
741 \r
742                         GDIPlus.CheckStatus (s);\r
743                 }\r
744                 \r
745                 public void Widen (Pen pen)\r
746                 {\r
747                         Widen (pen, null, 1.0f / 4.0f);\r
748                 }               \r
749                 \r
750                 public void Widen (Pen pen, Matrix matrix)\r
751                 {       \r
752                         Widen (pen, matrix, 1.0f / 4.0f);\r
753                 }               \r
754                 \r
755                 [MonoTODO]\r
756                 public void Widen (Pen pen, Matrix matrix, float flatness)\r
757                 {\r
758                         IntPtr p = (pen == null) ? (IntPtr) null : pen.nativeObject;\r
759                         IntPtr m = (matrix == null) ? (IntPtr) null : matrix.nativeMatrix;\r
760 \r
761                         Status s = GDIPlus.GdipWidenPath (nativePath, p, m, flatness);\r
762 \r
763                         GDIPlus.CheckStatus (s);\r
764                 } \r
765         }\r
766 }\r
767 \r
768 \r