/// <summary> /// Creates a brush from the given <see cref="T:Dataweb.NShape.IFillStyle"/>. /// Depending of the fill mode of the fill style, the result can be a <see cref="T:System.Drawing.SolidBrush"/>, /// a <see cref="T:System.Drawing.Drawing2D.HatchBrush"/>, a a <see cref="T:System.Drawing.Drawing2D.LinerGradientBrush"/> or /// a <see cref="T:System.Drawing.TextureBrush"/>. /// </summary> public static Brush GetBrush(IFillStyle fillStyle) { if (fillStyle == null) { throw new ArgumentNullException("fillStyle"); } BrushKey brushKey; brushKey.FillStyle = fillStyle; brushKey.Image = null; Brush brush = null; if (!_brushCache.TryGetValue(brushKey, out brush)) { switch (fillStyle.FillMode) { case FillMode.Solid: brush = new SolidBrush(GetColor(fillStyle.BaseColorStyle, fillStyle.ConvertToGrayScale)); break; case FillMode.Pattern: brush = new HatchBrush(fillStyle.FillPattern, GetColor(fillStyle.BaseColorStyle, fillStyle.ConvertToGrayScale), GetColor(fillStyle.AdditionalColorStyle, fillStyle.ConvertToGrayScale)); break; case FillMode.Gradient: _rectBuffer.X = 0; _rectBuffer.Y = 0; _rectBuffer.Width = 100; _rectBuffer.Height = 100; brush = new LinearGradientBrush(_rectBuffer, GetColor(fillStyle.AdditionalColorStyle, fillStyle.ConvertToGrayScale), GetColor(fillStyle.BaseColorStyle, fillStyle.ConvertToGrayScale), fillStyle.GradientAngle); break; case FillMode.Image: if (NamedImage.IsNullOrEmpty(fillStyle.Image)) { brush = new SolidBrush(Color.Transparent); } else { // Get ImageAttributes ImageAttributes imgAttribs = null; if (!_imageAttribsCache.TryGetValue(brushKey, out imgAttribs)) { imgAttribs = GdiHelpers.GetImageAttributes(fillStyle.ImageLayout, fillStyle.ImageGammaCorrection, fillStyle.ImageTransparency, fillStyle.ConvertToGrayScale); _imageAttribsCache.Add(brushKey, imgAttribs); } // Create Brush _rectBuffer.X = 0; _rectBuffer.Y = 0; _rectBuffer.Width = fillStyle.Image.Width; _rectBuffer.Height = fillStyle.Image.Height; brush = new TextureBrush(fillStyle.Image.Image, _rectBuffer, imgAttribs); } break; default: throw new NShapeUnsupportedValueException(fillStyle.FillMode); } // Add created brush to the BrushCache _brushCache.Add(brushKey, brush); } return(brush); }