using geom = java.awt.geom;
using image = java.awt.image;
-namespace System.Drawing
-{
+namespace System.Drawing {
/// <summary>
/// Summary description for TextureBrush.
/// </summary>
- public sealed class TextureBrush : Brush
- {
- awt.TexturePaint _nativeObject;
+ public sealed class TextureBrush : Brush {
+ readonly awt.TexturePaint _nativeObject;
+ RectangleF _sourceRectangle;
+ Image _texture = null;
+ WrapMode _wrapMode;
protected override java.awt.Paint NativeObject {
get {
}
}
+ #region ctors
- WrapMode _wrapMode;
-
- TextureBrush (awt.TexturePaint ptr)
- {
- _nativeObject = ptr;
+ public TextureBrush (Image image) : this (image, WrapMode.Tile) {
}
- public TextureBrush (Image image) : this (image, WrapMode.Tile)
- {
+ public TextureBrush (Image image, WrapMode wrapMode) :
+ this( image, wrapMode, new RectangleF(0, 0, image.Width, image.Height )){
}
- public TextureBrush (Image image, Rectangle dstRect)
- {
+ public TextureBrush (Image image, Rectangle dstRect) :
+ this( image, WrapMode.Tile, dstRect ) {
}
- public TextureBrush (Image image, RectangleF dstRect)
- {
- // FIXME: check if not metafile
- _nativeObject = new awt.TexturePaint((image.BufferedImage)image.NativeObject.CurrentImage.NativeImage,
- new geom.Rectangle2D.Float((float)dstRect.X,(float)dstRect.Y,(float)dstRect.Width,
- (float)dstRect.Height));
+ public TextureBrush (Image image, RectangleF dstRect) :
+ this( image, WrapMode.Tile, dstRect ) {
}
- public TextureBrush (Image image, WrapMode wrapMode)
- {
- // FIXME: check if not metafile
- // TBD: WRAP MODE
- _nativeObject = new awt.TexturePaint((image.BufferedImage)image.NativeObject.CurrentImage.NativeImage,
- new geom.Rectangle2D.Float(0,0,1,1));
+ [MonoTODO]
+ public TextureBrush (Image image, Rectangle dstRect, ImageAttributes imageAttr) : this( image, dstRect ) {
+ // TBD: Implement ImageAttributes
}
- public TextureBrush (Image image, Rectangle dstRect, ImageAttributes imageAttr)
- {
- throw new NotImplementedException();
+ [MonoTODO]
+ public TextureBrush (Image image, RectangleF dstRect, ImageAttributes imageAttr) : this( image, dstRect ) {
+ // TBD: Implement ImageAttributes
}
- public TextureBrush (Image image, RectangleF dstRect, ImageAttributes imageAttr)
- {
- throw new NotImplementedException();
+ public TextureBrush (Image image, WrapMode wrapMode, Rectangle dstRect) :
+ this( image, wrapMode, new RectangleF(dstRect.X, dstRect.Y, dstRect.Width, dstRect.Height )){
}
- public TextureBrush (Image image, WrapMode wrapMode, Rectangle dstRect)
- {
- // FIXME: check if not metafile
- // TBD:WRAP MODE
- _nativeObject = new awt.TexturePaint((image.BufferedImage)image.NativeObject.CurrentImage.NativeImage,
- new geom.Rectangle2D.Float ((float)dstRect.X,(float)dstRect.Y,(float)dstRect.Width,(float)dstRect.Height));
- }
+ [MonoTODO]
+ public TextureBrush (Image image, WrapMode wrapMode, RectangleF dstRect) {
+ // TBD: check if not metafile
+ _sourceRectangle = dstRect;
+ _texture = (Image)((Bitmap)image).Clone(dstRect, image.PixelFormat);
+ _wrapMode = wrapMode;
+
+ if (wrapMode != Drawing2D.WrapMode.Tile)
+ image = CreateWrappedImage(_texture, wrapMode);
+ else
+ image = _texture;
- public TextureBrush (Image image, WrapMode wrapMode, RectangleF dstRect)
- {
- // FIXME: check if not metafile
- //TBD:WRAP MODE
_nativeObject = new awt.TexturePaint((image.BufferedImage)image.NativeObject.CurrentImage.NativeImage,
- new geom.Rectangle2D.Float((float)dstRect.X,(float)dstRect.Y,(float)dstRect.Width,
- (float)dstRect.Height));
+ new geom.Rectangle2D.Float(0, 0, image.Width, image.Height));
+ }
+
+ #endregion
+
+ #region CreateWrappedImage
+
+ private Image CreateWrappedImage(Image image, WrapMode wrapMode) {
+ Image b = null;
+ Graphics g = null;
+
+ switch (wrapMode) {
+ case Drawing2D.WrapMode.TileFlipX :
+ b = new Bitmap(image.Width * 2, image.Height);
+ g = Graphics.FromImage( b );
+ g.DrawImage(image, new Matrix());
+ g.DrawImage(image, new Matrix(-1, 0, 0, 1, image.Width * 2 - 1, 0));
+ break;
+ case Drawing2D.WrapMode.TileFlipY :
+ b = new Bitmap(image.Width, image.Height * 2);
+ g = Graphics.FromImage( b );
+ g.DrawImage(image, new Matrix());
+ g.DrawImage(image, new Matrix(1, 0, 0, -1, 0, image.Height * 2 - 1));
+ break;
+ case Drawing2D.WrapMode.TileFlipXY :
+ b = new Bitmap(image.Width * 2, image.Height * 2);
+ g = Graphics.FromImage( b );
+ g.DrawImage(image, new Matrix());
+ g.DrawImage(image, new Matrix(-1, 0, 0, 1, image.Width * 2 - 1, 0));
+ g.DrawImage(image, new Matrix(1, 0, 0, -1, 0, image.Height * 2 - 1));
+ g.DrawImage(image, new Matrix(-1, 0, 0, -1, image.Width * 2 - 1, image.Height * 2 - 1));
+ break;
+ case Drawing2D.WrapMode.Clamp :
+ // TBD: Implement WrapMode.Clamp
+ return image;
+ default :
+ b = image;
+ break;
+ }
+
+ return b;
}
- // properties
+ #endregion
+
+ #region properties
+
public Image Image {
get {
- return Image.ImageFromNativeImage(((awt.TexturePaint)NativeObject).getImage(),
- ImageFormat.Bmp);
+ return (Image)_texture.Clone();
}
}
public Matrix Transform {
get {
- throw new NotImplementedException();
+ return BrushTransform;
}
set {
- throw new NotImplementedException();
+ BrushTransform = value;
}
}
+ [MonoTODO]
public WrapMode WrapMode {
get {
return _wrapMode;
}
}
- // public methods
+ #endregion
- public override object Clone ()
- {
- throw new NotImplementedException();
+ #region public methods
+
+ public override object Clone () {
+ TextureBrush copy = (TextureBrush)InternalClone();
+
+ if (_texture != null)
+ copy._texture = (Image)_texture.Clone();
+
+ return copy;
}
- public void MultiplyTransform (Matrix matrix)
- {
- MultiplyTransform (matrix, MatrixOrder.Prepend);
+ public void MultiplyTransform (Matrix matrix) {
+ base.BrushMultiplyTransform( matrix );
}
- public void MultiplyTransform (Matrix matrix, MatrixOrder order)
- {
- throw new NotImplementedException();
+ public void MultiplyTransform (Matrix matrix, MatrixOrder order) {
+ base.BrushMultiplyTransform( matrix, order );
}
- public void ResetTransform ()
- {
- throw new NotImplementedException();
+ public void ResetTransform () {
+ base.BrushResetTransform();
}
- public void RotateTransform (float angle)
- {
- RotateTransform (angle, MatrixOrder.Prepend);
+ public void RotateTransform (float angle) {
+ base.BrushRotateTransform( angle );
}
- public void RotateTransform (float angle, MatrixOrder order)
- {
- throw new NotImplementedException();
+ public void RotateTransform (float angle, MatrixOrder order) {
+ base.BrushRotateTransform( angle, order );
}
- public void ScaleTransform (float sx, float sy)
- {
- ScaleTransform (sx, sy, MatrixOrder.Prepend);
+ public void ScaleTransform (float sx, float sy) {
+ base.BrushScaleTransform( sx, sy );
}
- public void ScaleTransform (float sx, float sy, MatrixOrder order)
- {
- throw new NotImplementedException();
+ public void ScaleTransform (float sx, float sy, MatrixOrder order) {
+ base.BrushScaleTransform( sx, sy, order );
}
- public void TranslateTransform (float dx, float dy)
- {
- TranslateTransform (dx, dy, MatrixOrder.Prepend);
+ public void TranslateTransform (float dx, float dy) {
+ base.BrushTranslateTransform( dx, dy );
}
- public void TranslateTransform (float dx, float dy, MatrixOrder order)
- {
- throw new NotImplementedException();
+ public void TranslateTransform (float dx, float dy, MatrixOrder order) {
+ base.BrushTranslateTransform( dx, dy, order );
}
+
+ #endregion
}
}