443 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			443 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Controls
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Data storage and utility class for defining gradient colors.
 | 
						|
    /// </summary>
 | 
						|
    [Description("Color Data Class"),
 | 
						|
    TypeConverterAttribute(typeof(ExpandableObjectConverter))]
 | 
						|
    public class ColorData : INotifyPropertyChanged
 | 
						|
    {
 | 
						|
        private Color _BorderColor;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the border color for this item. Default value is white.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(typeof(Color), "255, 255, 255"),
 | 
						|
        Category("Appearance"),
 | 
						|
        Description("The border color for this item.")]
 | 
						|
        public Color BorderColor
 | 
						|
        {
 | 
						|
            get { return _BorderColor; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _BorderColor)
 | 
						|
                {
 | 
						|
                    _BorderColor = value;
 | 
						|
                    OnPropertyChanged(new PropertyChangedEventArgs("BorderColor"));
 | 
						|
                }
 | 
						|
            }        
 | 
						|
        }
 | 
						|
 | 
						|
        private float _BorderWidth;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the border width for this item. Default value is 0.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(0.0f),
 | 
						|
        Category("Appearance"),
 | 
						|
        Description("The border width for this item.")]
 | 
						|
        public float BorderWidth
 | 
						|
        {
 | 
						|
            get { return _BorderWidth; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _BorderWidth)
 | 
						|
                {
 | 
						|
                    _BorderWidth = value;
 | 
						|
                    OnPropertyChanged(new PropertyChangedEventArgs("BorderWidth"));
 | 
						|
                }
 | 
						|
            }        
 | 
						|
        }
 | 
						|
 | 
						|
        private float _BrushAngle;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the brush angle for this item. Only applies to Linear and Reflected brush types. Default value is 0.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(0.0f),
 | 
						|
        Category("Appearance"),
 | 
						|
        Description("The brush angle for this item. Only applies to Linear and Reflected brush types.")]
 | 
						|
        public float BrushAngle
 | 
						|
        {
 | 
						|
            get { return _BrushAngle; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _BrushAngle)
 | 
						|
                {
 | 
						|
                    _BrushAngle = value;
 | 
						|
                    OnPropertyChanged(new PropertyChangedEventArgs("BrushAngle"));
 | 
						|
                }
 | 
						|
            }        
 | 
						|
        }
 | 
						|
 | 
						|
        private float _BrushSBSFocus;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the brush SigmaBellShape focus for this item. Only applies to Reflected brush types. Default value is 0.5.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(0.5f),
 | 
						|
        Category("Appearance"),
 | 
						|
        Description("The brush SigmaBellShape focus for this item. Only applies to Linear and Reflected brush types.")]
 | 
						|
        public float BrushSBSFocus
 | 
						|
        {
 | 
						|
            get { return _BrushSBSFocus; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _BrushSBSFocus)
 | 
						|
                {
 | 
						|
                    _BrushSBSFocus = value;
 | 
						|
                    OnPropertyChanged(new PropertyChangedEventArgs("BrushSBSFocus"));
 | 
						|
                }
 | 
						|
            }        
 | 
						|
        }
 | 
						|
 | 
						|
        private float _BrushSBSScale;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the brush SigmaBellShape scale for this item. Only applies to Reflected brush types. Default value is 0.5.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(0.5f),
 | 
						|
        Category("Appearance"),
 | 
						|
        Description("The brush SigmaBellShape scale for this item. Only applies to Linear and Reflected brush types.")]
 | 
						|
        public float BrushSBSScale
 | 
						|
        {
 | 
						|
            get { return _BrushSBSScale; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _BrushSBSScale)
 | 
						|
                {
 | 
						|
                    _BrushSBSScale = value;
 | 
						|
                    OnPropertyChanged(new PropertyChangedEventArgs("BrushSBSScale"));
 | 
						|
                }
 | 
						|
            }        
 | 
						|
        }
 | 
						|
 | 
						|
        private eBrushTypes _BrushType;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the brush type for this item. Default value is Solid.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eBrushTypes.Solid),
 | 
						|
        Category("Appearance"),
 | 
						|
        Description("The brush type for this item.")]
 | 
						|
        public eBrushTypes BrushType
 | 
						|
        {
 | 
						|
            get { return _BrushType; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _BrushType)
 | 
						|
                {
 | 
						|
                    _BrushType = value;
 | 
						|
                    OnPropertyChanged(new PropertyChangedEventArgs("BrushType"));
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private Color _Color1;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the first color for this item. Default value is white.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(typeof(Color), "255, 255, 255"),
 | 
						|
        Category("Appearance"),
 | 
						|
        Description("The first color for this item.")]
 | 
						|
        public Color Color1
 | 
						|
        {
 | 
						|
            get { return _Color1; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _Color1)
 | 
						|
                {
 | 
						|
                    _Color1 = value;
 | 
						|
                    OnPropertyChanged(new PropertyChangedEventArgs("Color1"));
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private Color _Color2;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the second color for this item. Default value is white.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(typeof(Color), "255, 255, 255"),
 | 
						|
        Category("Appearance"),
 | 
						|
        Description("The second color for this item.")]
 | 
						|
        public Color Color2
 | 
						|
        {
 | 
						|
            get { return _Color2; }
 | 
						|
            set 
 | 
						|
            {
 | 
						|
                if (value != _Color2)
 | 
						|
                {
 | 
						|
                    _Color2 = value;
 | 
						|
                    OnPropertyChanged(new PropertyChangedEventArgs("Color2"));
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when property value has changed.
 | 
						|
        /// </summary>
 | 
						|
        public event PropertyChangedEventHandler PropertyChanged;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of the object. 
 | 
						|
        /// </summary>
 | 
						|
        public ColorData()
 | 
						|
        {
 | 
						|
            LoadData(eBrushTypes.Solid, Color.White, Color.White, Color.White, 0.0f, 0.0f, 0.5f, 1.0f);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of the object. 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="color1">The first color for this entry.</param>
 | 
						|
        /// <param name="color2">The second color for this entry.</param>
 | 
						|
        public ColorData(eBrushTypes brushType, Color color1, Color color2) 
 | 
						|
        {
 | 
						|
            LoadData(brushType, color1, color2, Color.White, 0.0f, 0.0f, 0.5f, 1.0f);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of the object. 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="color1">The first color for this entry.</param>
 | 
						|
        /// <param name="color2">The second color for this entry.</param>
 | 
						|
        /// <param name="borderColor">The border color for this entry.</param>
 | 
						|
        /// <param name="borderWidth">The border width for this entry.</param>
 | 
						|
        public ColorData(eBrushTypes brushType, Color color1, Color color2, Color borderColor, float borderWidth)
 | 
						|
        {
 | 
						|
            LoadData(brushType, color1, color2, borderColor, borderWidth, 0.0f, 0.5f, 1.0f);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of the object. 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="color1">The first color for this entry.</param>
 | 
						|
        /// <param name="color2">The second color for this entry.</param>
 | 
						|
        /// <param name="borderColor">The border color for this entry.</param>
 | 
						|
        /// <param name="borderWidth">The border width for this entry.</param>
 | 
						|
        /// <param name="brushAngle">The gradient angle.</param>
 | 
						|
        public ColorData(eBrushTypes brushType, Color color1, Color color2, Color borderColor, float borderWidth, float brushAngle)
 | 
						|
        {
 | 
						|
            LoadData(brushType, color1, color2, borderColor, borderWidth, brushAngle, 0.5f, 1.0f);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of the object. 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="color1">The first color for this entry.</param>
 | 
						|
        /// <param name="color2">The second color for this entry.</param>
 | 
						|
        /// <param name="borderColor">The border color for this entry.</param>
 | 
						|
        /// <param name="borderWidth">The border width for this entry.</param>
 | 
						|
        /// <param name="brushSBSFocus">The focus for the SigmaBellShape.</param>
 | 
						|
        /// <param name="brushSBSScale">The scale for the SigmaBellShape.</param>
 | 
						|
        public ColorData(eBrushTypes brushType, Color color1, Color color2, Color borderColor, float borderWidth, float brushSBSFocus, float brushSBSScale)
 | 
						|
        {
 | 
						|
            LoadData(brushType, color1, color2, borderColor, borderWidth, 0.0f, brushSBSFocus, brushSBSScale);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Loads data into the class, called by constructors. 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="color1">The first color for this entry.</param>
 | 
						|
        /// <param name="color2">The second color for this entry.</param>
 | 
						|
        /// <param name="borderColor">The border color for this entry.</param>
 | 
						|
        /// <param name="borderWidth">The border width for this entry.</param>
 | 
						|
        /// <param name="brushSBSFocus">The focus for the SigmaBellShape.</param>
 | 
						|
        /// <param name="brushSBSScale">The scale for the SigmaBellShape.</param>
 | 
						|
        protected void LoadData(eBrushTypes brushType, Color color1, Color color2, Color borderColor, float borderWidth, float brushAngle, float brushSBSFocus, float brushSBSScale)
 | 
						|
        {
 | 
						|
            _BorderColor = borderColor;
 | 
						|
            _BorderWidth = borderWidth;
 | 
						|
            _Color1 = color1;
 | 
						|
            _Color2 = color2;
 | 
						|
            _BrushType = brushType;
 | 
						|
            _BrushAngle = brushAngle;
 | 
						|
            _BrushSBSFocus = brushSBSFocus;
 | 
						|
            _BrushSBSScale = brushSBSScale;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates Pen object using the BorderColor and BorderWidth properties.
 | 
						|
        /// </summary>
 | 
						|
        public Pen GetBorderPen(float scaleFactor, PenAlignment penAlignment)
 | 
						|
        {
 | 
						|
            Pen pen = new Pen(_BorderColor, (float)Math.Round(_BorderWidth * scaleFactor, 0));
 | 
						|
            pen.Alignment = penAlignment;
 | 
						|
            return pen;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a brush of the type specified by BrushType.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        public Brush GetBrush(GraphicsPath path)
 | 
						|
        {
 | 
						|
            return GetBrush(path, new PointF(0.5f, 0.5f), _BrushAngle);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a brush of the type specified by BrushType.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        /// <param name="angle">The angle used for the gradients, allowing an override of BrushAngle</param>
 | 
						|
        public Brush GetBrush(GraphicsPath path, float angle)
 | 
						|
        {
 | 
						|
            return GetBrush(path, new PointF(0.5f, 0.5f), angle);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a brush of the type specified by BrushType.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        /// <param name="center">The center point of the gradient as a percentage value typically ranging from 0.0 to 1.0.</param>
 | 
						|
        public Brush GetBrush(GraphicsPath path, PointF center)
 | 
						|
        {
 | 
						|
            return GetBrush(path, center, _BrushAngle);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a brush of the type specified by BrushType.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        /// <param name="center">The center point of the gradient as a percentage value typically ranging from 0.0 to 1.0.</param>
 | 
						|
        /// <param name="angle">The angle used for the gradients, allowing an override of BrushAngle</param>
 | 
						|
        public Brush GetBrush(GraphicsPath path, PointF center, float angle)
 | 
						|
        {
 | 
						|
            RectangleF rect;
 | 
						|
            switch (_BrushType)
 | 
						|
            {
 | 
						|
                case eBrushTypes.Solid:
 | 
						|
                    return new SolidBrush(_Color1);
 | 
						|
                case eBrushTypes.Linear:
 | 
						|
                    path.Flatten();
 | 
						|
                    rect = path.GetBounds();
 | 
						|
                    if (rect.Width > 0.0f && rect.Height > 0.0f)
 | 
						|
                        return new LinearGradientBrush(path.GetBounds(), _Color1, _Color2, angle, false);
 | 
						|
                    else
 | 
						|
                        return null;
 | 
						|
                case eBrushTypes.Reflected:
 | 
						|
                    LinearGradientBrush lBrush = new LinearGradientBrush(path.GetBounds(), _Color1, _Color2, angle, false);
 | 
						|
                    lBrush.SetSigmaBellShape(_BrushSBSFocus, _BrushSBSScale);
 | 
						|
                    return lBrush;
 | 
						|
                case eBrushTypes.Centered:
 | 
						|
                    PointF pt = new PointF();
 | 
						|
                    rect = path.GetBounds();
 | 
						|
                    PathGradientBrush pBrush = new PathGradientBrush(path);
 | 
						|
                    pt.X = rect.X + rect.Width * center.X;
 | 
						|
                    pt.Y = rect.Y + rect.Height * center.Y;
 | 
						|
                    pBrush.CenterPoint = pt;
 | 
						|
                    pBrush.CenterColor = _Color1;
 | 
						|
                    pBrush.SurroundColors = new Color[] { _Color2 };
 | 
						|
                    return pBrush;
 | 
						|
                default:
 | 
						|
                    return new SolidBrush(_Color1);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates SolidBrushObject using Color1.
 | 
						|
        /// </summary>
 | 
						|
        public Brush GetSolidBrush()
 | 
						|
        {
 | 
						|
            return new SolidBrush(_Color1);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a LinearGradientBrush object.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        /// <param name="angle">The gradient angle.</param>
 | 
						|
        public LinearGradientBrush GetLinearBrush(GraphicsPath path, int angle)
 | 
						|
        {
 | 
						|
            return new LinearGradientBrush(path.GetBounds(), _Color1, _Color2, angle, false);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a PathGradientBrush object.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        /// <param name="center">The center point of the gradient.</param>
 | 
						|
        public PathGradientBrush GetCenteredBrush(GraphicsPath path, PointF center)
 | 
						|
        {
 | 
						|
            PathGradientBrush brush;
 | 
						|
 | 
						|
            brush = new PathGradientBrush(path);
 | 
						|
            brush.CenterPoint = center;
 | 
						|
            brush.CenterColor = _Color1;
 | 
						|
            brush.SurroundColors = new Color[] { _Color2 };
 | 
						|
 | 
						|
            return brush;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a LinearGradientBrush object.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        /// <param name="angle">The gradient angle.</param>
 | 
						|
        public LinearGradientBrush GetReflectedBrush(GraphicsPath path, int angle)
 | 
						|
        {
 | 
						|
            return GetReflectedBrush(path, angle, 0.5f, 1.0f);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a LinearGradientBrush object.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        /// <param name="angle">The gradient angle.</param>
 | 
						|
        /// <param name="focus">The focus for the SigmaBellShape.</param>
 | 
						|
        public LinearGradientBrush GetReflectedBrush(GraphicsPath path, int angle, float focus)
 | 
						|
        {
 | 
						|
            return GetReflectedBrush(path, angle, focus, 1.0f);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a LinearGradientBrush object.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="path">The graphics path used to construct the brush.</param>
 | 
						|
        /// <param name="angle">The gradient angle.</param>
 | 
						|
        /// <param name="focus">The focus for the SigmaBellShape.</param>
 | 
						|
        /// <param name="scale">The scale for the SigmaBellShape.</param>
 | 
						|
        public LinearGradientBrush GetReflectedBrush(GraphicsPath path, int angle, float focus, float scale)
 | 
						|
        {
 | 
						|
            LinearGradientBrush brush = new LinearGradientBrush(path.GetBounds(), _Color1, _Color2, angle, false);
 | 
						|
            brush.SetSigmaBellShape(focus, scale);
 | 
						|
            return brush;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the PropertyChanged event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Event arguments</param>
 | 
						|
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
 | 
						|
        {
 | 
						|
            if (PropertyChanged != null)
 | 
						|
                PropertyChanged(this, e);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Enumeration containing predefined brush types for the ColorData class.
 | 
						|
    /// </summary>
 | 
						|
    public enum eBrushTypes
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Solid brush.
 | 
						|
        /// </summary>
 | 
						|
        Solid,
 | 
						|
        /// <summary>
 | 
						|
        /// Linear gradient brush.
 | 
						|
        /// </summary>
 | 
						|
        Linear,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Centered path gradient brush.
 | 
						|
        /// </summary>
 | 
						|
        Centered,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Reflected linear gradient brush.
 | 
						|
        /// </summary>
 | 
						|
        Reflected
 | 
						|
    }
 | 
						|
 | 
						|
}
 |