mirror of
https://github.com/DarthAffe/CUE.NET.git
synced 2025-12-12 08:48:30 +00:00
Improved performance of the LinearGradient
This commit is contained in:
parent
5e90779398
commit
28232a768b
@ -1,5 +1,6 @@
|
|||||||
// ReSharper disable UnusedMember.Global
|
// ReSharper disable UnusedMember.Global
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using CUE.NET.Devices.Generic;
|
using CUE.NET.Devices.Generic;
|
||||||
|
|
||||||
@ -46,25 +47,26 @@ namespace CUE.NET.Gradients
|
|||||||
/// <returns>The color at the specific offset.</returns>
|
/// <returns>The color at the specific offset.</returns>
|
||||||
public override CorsairColor GetColor(float offset)
|
public override CorsairColor GetColor(float offset)
|
||||||
{
|
{
|
||||||
if (!GradientStops.Any()) return CorsairColor.Transparent;
|
if (GradientStops.Count == 0) return CorsairColor.Transparent;
|
||||||
if (GradientStops.Count == 1) return GradientStops.First().Color;
|
if (GradientStops.Count == 1) return GradientStops.First().Color;
|
||||||
|
|
||||||
GradientStop gsBefore;
|
GradientStop gsBefore;
|
||||||
GradientStop gsAfter;
|
GradientStop gsAfter;
|
||||||
|
|
||||||
|
IList<GradientStop> orderedStops = GradientStops.OrderBy(x => x.Offset).ToList();
|
||||||
if (WrapGradient)
|
if (WrapGradient)
|
||||||
{
|
{
|
||||||
gsBefore = GradientStops.Where(n => n.Offset <= offset).OrderBy(n => n.Offset).LastOrDefault();
|
gsBefore = orderedStops.LastOrDefault(n => n.Offset <= offset);
|
||||||
if (gsBefore == null)
|
if (gsBefore == null)
|
||||||
{
|
{
|
||||||
GradientStop lastStop = GradientStops.OrderBy(n => n.Offset).Last();
|
GradientStop lastStop = orderedStops[orderedStops.Count - 1];
|
||||||
gsBefore = new GradientStop(lastStop.Offset - 1f, lastStop.Color);
|
gsBefore = new GradientStop(lastStop.Offset - 1f, lastStop.Color);
|
||||||
}
|
}
|
||||||
|
|
||||||
gsAfter = GradientStops.Where(n => n.Offset >= offset).OrderBy(n => n.Offset).FirstOrDefault();
|
gsAfter = orderedStops.FirstOrDefault(n => n.Offset >= offset);
|
||||||
if (gsAfter == null)
|
if (gsAfter == null)
|
||||||
{
|
{
|
||||||
GradientStop firstStop = GradientStops.OrderBy(n => n.Offset).First();
|
GradientStop firstStop = orderedStops[0];
|
||||||
gsAfter = new GradientStop(firstStop.Offset + 1f, firstStop.Color);
|
gsAfter = new GradientStop(firstStop.Offset + 1f, firstStop.Color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,8 +74,8 @@ namespace CUE.NET.Gradients
|
|||||||
{
|
{
|
||||||
offset = ClipOffset(offset);
|
offset = ClipOffset(offset);
|
||||||
|
|
||||||
gsBefore = GradientStops.Where(n => n.Offset <= offset).OrderBy(n => n.Offset).Last();
|
gsBefore = orderedStops.Last(n => n.Offset <= offset);
|
||||||
gsAfter = GradientStops.Where(n => n.Offset >= offset).OrderBy(n => n.Offset).First();
|
gsAfter = orderedStops.First(n => n.Offset >= offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
float blendFactor = 0f;
|
float blendFactor = 0f;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user