2006-03-22 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / System.Drawing / System.Drawing.Drawing2D / LinearGradientBrush.cs
index 0f99a1da6eb2c609da517b3d829e408361f6ae38..abdc54637b5b78e5997746b35e79ca9360df5823 100644 (file)
@@ -6,8 +6,7 @@
 //   Ravindra (rkumar@novell.com)
 //
 // Copyright (C) 2002/3 Ximian, Inc. http://www.ximian.com
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004,2006 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-using System;
+using System.ComponentModel;
+
+namespace System.Drawing.Drawing2D {
 
-namespace System.Drawing.Drawing2D
-{
-       /// <summary>
-       /// Summary description for LinearGradientBrush.
-       /// </summary>
        public sealed class LinearGradientBrush : Brush
        {
                RectangleF rectangle;
                
                internal LinearGradientBrush (IntPtr native) : base (native)
                {
+                       Status status = GDIPlus.GdipGetLineRect (native, out rectangle);
+                       GDIPlus.CheckStatus (status);
                }
 
                public LinearGradientBrush (Point point1, Point point2, Color color1, Color color2)
@@ -236,6 +234,9 @@ namespace System.Drawing.Drawing2D
                                return matrix;
                        }
                        set {
+                               if (value == null)
+                                       throw new ArgumentNullException ("Transform");
+
                                Status status = GDIPlus.GdipSetLineTransform (nativeObject, value.nativeMatrix);
                                GDIPlus.CheckStatus (status);
                        }
@@ -250,6 +251,10 @@ namespace System.Drawing.Drawing2D
                                return wrapMode;
                        }
                        set {
+                               // note: Clamp isn't valid (context wise) but it is checked in libgdiplus
+                               if ((value < WrapMode.Tile) || (value > WrapMode.Clamp))
+                                       throw new InvalidEnumArgumentException ("WrapMode");
+
                                Status status = GDIPlus.GdipSetLineWrapMode (nativeObject, value);
                                GDIPlus.CheckStatus (status);
                        }
@@ -264,6 +269,9 @@ namespace System.Drawing.Drawing2D
 
                public void MultiplyTransform (Matrix matrix, MatrixOrder order)
                {
+                       if (matrix == null)
+                               throw new ArgumentNullException ("matrix");
+
                        Status status = GDIPlus.GdipMultiplyLineTransform (nativeObject, matrix.nativeMatrix, order);
                        GDIPlus.CheckStatus (status);
                }
@@ -341,8 +349,7 @@ namespace System.Drawing.Drawing2D
                        Status status = GDIPlus.GdipCloneBrush (nativeObject, out clonePtr);
                        GDIPlus.CheckStatus (status);
 
-                       LinearGradientBrush clone = new LinearGradientBrush (clonePtr);
-                       return clone;
+                       return new LinearGradientBrush (clonePtr);
                }
        }
 }