// ReSharper disable CollectionNeverUpdated.Global // ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBeProtected.Global // ReSharper disable ReturnTypeCanBeEnumerable.Global // ReSharper disable AutoPropertyCanBeMadeGetOnly.Global // ReSharper disable UnusedMember.Global using RGB.NET.Brushes.Gradients; using RGB.NET.Brushes.Helper; using RGB.NET.Core; namespace RGB.NET.Brushes { /// /// /// /// Represents a brush drawing a linear gradient. /// public class LinearGradientBrush : AbstractBrush, IGradientBrush { #region Properties & Fields private Point _startPoint = new Point(0, 0.5); /// /// Gets or sets the start (as percentage in the range [0..1]) of the drawn by this . (default: 0.0, 0.5) /// public Point StartPoint { get => _startPoint; set => SetProperty(ref _startPoint, value); } private Point _endPoint = new Point(1, 0.5); /// /// Gets or sets the end (as percentage in the range [0..1]) of the drawn by this . (default: 1.0, 0.5) /// public Point EndPoint { get => _endPoint; set => SetProperty(ref _endPoint, value); } private IGradient _gradient; /// public IGradient Gradient { get => _gradient; set => SetProperty(ref _gradient, value); } #endregion #region Constructor /// /// /// Initializes a new instance of the class. /// public LinearGradientBrush() { } /// /// /// Initializes a new instance of the class. /// /// The drawn by this . public LinearGradientBrush(IGradient gradient) { this.Gradient = gradient; } /// /// /// Initializes a new instance of the class. /// /// The start (as percentage in the range [0..1]). /// The end (as percentage in the range [0..1]). /// The drawn by this . public LinearGradientBrush(Point startPoint, Point endPoint, IGradient gradient) { this.StartPoint = startPoint; this.EndPoint = endPoint; this.Gradient = gradient; } #endregion #region Methods /// /// /// Gets the color at an specific point assuming the brush is drawn into the given rectangle. /// /// The rectangle in which the brush should be drawn. /// The target (key/point) from which the color should be taken. /// The color at the specified point. protected override Color GetColorAtPoint(Rectangle rectangle, BrushRenderTarget renderTarget) { if (Gradient == null) return Color.Transparent; Point startPoint = new Point(StartPoint.X * rectangle.Size.Width, StartPoint.Y * rectangle.Size.Height); Point endPoint = new Point(EndPoint.X * rectangle.Size.Width, EndPoint.Y * rectangle.Size.Height); double offset = GradientHelper.CalculateLinearGradientOffset(startPoint, endPoint, renderTarget.Point); return Gradient.GetColor(offset); } #endregion } }