2 // System.Drawing.TextureBrush.cs
5 // Dennis Hayes (dennish@Raytek.com)
6 // Ravindra (rkumar@novell.com)
8 // (C) 2002 Ximian, Inc
9 // (C) 2004 Novell, Inc.
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 using System.Drawing.Drawing2D;
37 using System.Drawing.Imaging;
39 namespace System.Drawing
42 /// Summary description for TextureBrush.
44 public sealed class TextureBrush : Brush
48 internal TextureBrush (IntPtr ptr) : base (ptr)
50 // get image from IntPtr
51 // image could be Bitmap or Metafile
55 public TextureBrush (Image image) : this (image, WrapMode.Tile)
59 public TextureBrush (Image image, Rectangle dstRect)
62 Status status = GDIPlus.GdipCreateTextureIAI (image.nativeObject, IntPtr.Zero, dstRect.X, dstRect.Y, dstRect.Width, dstRect.Height, out nativeObject);
63 GDIPlus.CheckStatus (status);
66 public TextureBrush (Image image, RectangleF dstRect)
69 Status status = GDIPlus.GdipCreateTextureIA (image.nativeObject, IntPtr.Zero, dstRect.X, dstRect.Y, dstRect.Width, dstRect.Height, out nativeObject);
70 GDIPlus.CheckStatus (status);
73 public TextureBrush (Image image, WrapMode wrapMode)
76 Status status = GDIPlus.GdipCreateTexture (image.nativeObject, wrapMode, out nativeObject);
77 GDIPlus.CheckStatus (status);
80 public TextureBrush (Image image, Rectangle dstRect, ImageAttributes imageAttr)
83 Status status = GDIPlus.GdipCreateTextureIAI (image.nativeObject, imageAttr.NativeObject, dstRect.X, dstRect.Y, dstRect.Width, dstRect.Height, out nativeObject);
84 GDIPlus.CheckStatus (status);
87 public TextureBrush (Image image, RectangleF dstRect, ImageAttributes imageAttr)
90 Status status = GDIPlus.GdipCreateTextureIA (image.nativeObject, imageAttr.NativeObject, dstRect.X, dstRect.Y, dstRect.Width, dstRect.Height, out nativeObject);
91 GDIPlus.CheckStatus (status);
94 public TextureBrush (Image image, WrapMode wrapMode, Rectangle dstRect)
97 Status status = GDIPlus.GdipCreateTexture2I (image.nativeObject, wrapMode, dstRect.X, dstRect.Y, dstRect.Width, dstRect.Height, out nativeObject);
98 GDIPlus.CheckStatus (status);
101 public TextureBrush (Image image, WrapMode wrapMode, RectangleF dstRect)
104 Status status = GDIPlus.GdipCreateTexture2 (image.nativeObject, wrapMode, dstRect.X, dstRect.Y, dstRect.Width, dstRect.Height, out nativeObject);
105 GDIPlus.CheckStatus (status);
114 Status status = GDIPlus.GdipGetTextureImage (nativeObject, out img);
115 GDIPlus.CheckStatus (status);
116 image = new Bitmap (img);
122 public Matrix Transform {
124 Matrix matrix = new Matrix ();
125 Status status = GDIPlus.GdipGetTextureTransform (nativeObject, matrix.nativeMatrix);
126 GDIPlus.CheckStatus (status);
131 Status status = GDIPlus.GdipSetTextureTransform (nativeObject, value.nativeMatrix);
132 GDIPlus.CheckStatus (status);
136 public WrapMode WrapMode {
138 WrapMode mode = WrapMode.Tile;
139 Status status = GDIPlus.GdipGetTextureWrapMode (nativeObject, out mode);
140 GDIPlus.CheckStatus (status);
144 Status status = GDIPlus.GdipSetTextureWrapMode (nativeObject, value);
145 GDIPlus.CheckStatus (status);
151 public override object Clone ()
154 Status status = GDIPlus.GdipCloneBrush (nativeObject, out clonePtr);
155 GDIPlus.CheckStatus (status);
157 TextureBrush clone = new TextureBrush (clonePtr);
159 clone.image = (Image) image.Clone ();
164 public void MultiplyTransform (Matrix matrix)
166 MultiplyTransform (matrix, MatrixOrder.Prepend);
169 public void MultiplyTransform (Matrix matrix, MatrixOrder order)
171 Status status = GDIPlus.GdipMultiplyTextureTransform (nativeObject, matrix.nativeMatrix, order);
172 GDIPlus.CheckStatus (status);
175 public void ResetTransform ()
177 Status status = GDIPlus.GdipResetTextureTransform (nativeObject);
178 GDIPlus.CheckStatus (status);
181 public void RotateTransform (float angle)
183 RotateTransform (angle, MatrixOrder.Prepend);
186 public void RotateTransform (float angle, MatrixOrder order)
188 Status status = GDIPlus.GdipRotateTextureTransform (nativeObject, angle, order);
189 GDIPlus.CheckStatus (status);
192 public void ScaleTransform (float sx, float sy)
194 ScaleTransform (sx, sy, MatrixOrder.Prepend);
197 public void ScaleTransform (float sx, float sy, MatrixOrder order)
199 Status status = GDIPlus.GdipScaleTextureTransform (nativeObject, sx, sy, order);
200 GDIPlus.CheckStatus (status);
203 public void TranslateTransform (float dx, float dy)
205 TranslateTransform (dx, dy, MatrixOrder.Prepend);
208 public void TranslateTransform (float dx, float dy, MatrixOrder order)
210 Status status = GDIPlus.GdipTranslateTextureTransform (nativeObject, dx, dy, order);
211 GDIPlus.CheckStatus (status);