2 // System.Drawing.Drawing2D.PathGradientBrush.cs
5 // Dennis Hayes (dennish@Raytek.com)
6 // Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 // Ravindra (rkumar@novell.com)
9 // Copyright (C) 2002/3 Ximian, Inc. http://www.ximian.com
11 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using System.Runtime.InteropServices;
37 namespace System.Drawing.Drawing2D
40 /// Summary description for PathGradientBrush.
42 public sealed class PathGradientBrush : Brush
49 Color [] surroundColors;
50 ColorBlend interpolationColors;
54 internal PathGradientBrush (IntPtr native) : base (native)
58 public PathGradientBrush (GraphicsPath path)
60 Status status = GDIPlus.GdipCreatePathGradientFromPath (path.NativeObject, out nativeObject);
61 GDIPlus.CheckStatus (status);
63 status = GDIPlus.GdipGetPathGradientRect (nativeObject, out rectangle);
64 GDIPlus.CheckStatus (status);
67 public PathGradientBrush (Point [] points) : this (points, WrapMode.Clamp)
71 public PathGradientBrush (PointF [] points) : this (points, WrapMode.Clamp)
75 public PathGradientBrush (Point [] points, WrapMode wrapMode)
77 Status status = GDIPlus.GdipCreatePathGradientI (points, points.Length, wrapMode, out nativeObject);
78 GDIPlus.CheckStatus (status);
81 status = GDIPlus.GdipGetPathGradientRectI (nativeObject, out rect);
82 GDIPlus.CheckStatus (status);
83 rectangle = (RectangleF) rect;
86 public PathGradientBrush (PointF [] points, WrapMode wrapMode)
88 Status status = GDIPlus.GdipCreatePathGradient (points, points.Length, wrapMode, out nativeObject);
89 GDIPlus.CheckStatus (status);
91 status = GDIPlus.GdipGetPathGradientRect (nativeObject, out rectangle);
92 GDIPlus.CheckStatus (status);
102 Status status = GDIPlus.GdipSetPathGradientBlend (nativeObject, value.Factors, value.Positions, value.Factors.Length);
103 GDIPlus.CheckStatus (status);
108 public Color CenterColor {
113 Status status = GDIPlus.GdipSetPathGradientCenterColor (nativeObject, value.ToArgb ());
114 GDIPlus.CheckStatus (status);
119 public PointF CenterPoint {
124 Status status = GDIPlus.GdipSetPathGradientCenterPoint (nativeObject, ref value);
125 GDIPlus.CheckStatus (status);
130 public PointF FocusScales {
135 Status status = GDIPlus.GdipSetPathGradientFocusScales (nativeObject, value.X, value.Y);
136 GDIPlus.CheckStatus (status);
141 public ColorBlend InterpolationColors {
143 return interpolationColors;
146 Color [] colors = value.Colors;
147 int [] blend = new int [colors.Length];
148 for (int i = 0; i < colors.Length; i++)
149 blend [i] = colors [i].ToArgb ();
151 Status status = GDIPlus.GdipSetPathGradientPresetBlend (nativeObject, blend, value.Positions, blend.Length);
152 GDIPlus.CheckStatus (status);
153 interpolationColors = value;
157 public RectangleF Rectangle {
163 public Color [] SurroundColors {
165 return surroundColors;
168 int length = value.Length;
169 int [] colors = new int [length];
170 for (int i = 0; i < length; i++)
171 colors [i] = value [i].ToArgb ();
173 Status status = GDIPlus.GdipSetPathGradientSurroundColorsWithCount (nativeObject, colors, ref length);
174 GDIPlus.CheckStatus (status);
175 surroundColors = value;
179 public Matrix Transform {
184 Status status = GDIPlus.GdipSetPathGradientTransform (nativeObject, value.nativeMatrix);
185 GDIPlus.CheckStatus (status);
190 public WrapMode WrapMode {
195 Status status = GDIPlus.GdipSetPathGradientWrapMode (nativeObject, value);
196 GDIPlus.CheckStatus (status);
203 public void MultiplyTransform (Matrix matrix)
205 MultiplyTransform (matrix, MatrixOrder.Prepend);
208 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
210 Status status = GDIPlus.GdipMultiplyPathGradientTransform (nativeObject, matrix.nativeMatrix, order);
211 GDIPlus.CheckStatus (status);
214 public void ResetTransform ()
216 Status status = GDIPlus.GdipResetPathGradientTransform (nativeObject);
217 GDIPlus.CheckStatus (status);
220 public void RotateTransform (float angle)
222 RotateTransform (angle, MatrixOrder.Prepend);
225 public void RotateTransform (float angle, MatrixOrder order)
227 Status status = GDIPlus.GdipRotatePathGradientTransform (nativeObject, angle, order);
228 GDIPlus.CheckStatus (status);
231 public void ScaleTransform (float sx, float sy)
233 ScaleTransform (sx, sy, MatrixOrder.Prepend);
236 public void ScaleTransform (float sx, float sy, MatrixOrder order)
238 Status status = GDIPlus.GdipScalePathGradientTransform (nativeObject, sx, sy, order);
239 GDIPlus.CheckStatus (status);
242 public void SetBlendTriangularShape (float focus)
244 SetBlendTriangularShape (focus, 1.0F);
247 public void SetBlendTriangularShape (float focus, float scale)
249 if (focus < 0 || focus > 1 || scale < 0 || scale > 1)
250 throw new ArgumentException ("Invalid parameter passed.");
252 Status status = GDIPlus.GdipSetPathGradientLinearBlend (nativeObject, focus, scale);
253 GDIPlus.CheckStatus (status);
256 public void SetSigmaBellShape (float focus)
258 SetSigmaBellShape (focus, 1.0F);
261 public void SetSigmaBellShape (float focus, float scale)
263 if (focus < 0 || focus > 1 || scale < 0 || scale > 1)
264 throw new ArgumentException ("Invalid parameter passed.");
266 Status status = GDIPlus.GdipSetPathGradientSigmaBlend (nativeObject, focus, scale);
267 GDIPlus.CheckStatus (status);
270 public void TranslateTransform (float dx, float dy)
272 TranslateTransform (dx, dy, MatrixOrder.Prepend);
275 public void TranslateTransform (float dx, float dy, MatrixOrder order)
277 Status status = GDIPlus.GdipTranslatePathGradientTransform (nativeObject, dx, dy, order);
278 GDIPlus.CheckStatus (status);
281 public override object Clone ()
284 Status status = GDIPlus.GdipCloneBrush (nativeObject, out clonePtr);
285 GDIPlus.CheckStatus (status);
287 PathGradientBrush clone = new PathGradientBrush (clonePtr);