Exemple #1
0
        /// <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);
        }