mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 11:56:30 +00:00
Signitifantly reduced build size
Updated project folder names Show only selected layer in visualization Added rectangle support
This commit is contained in:
1 parent
b74a1b2871
commit
04bc8f013a
52 files changed
+373
-633
No files matched your search
@@ -0,0 +1,76 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Artemis.Core.Models.Profile;
|
||||
using Artemis.Core.Plugins.LayerBrush;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace Artemis.Plugins.LayerBrushes.Color
|
||||
{
|
||||
public class ColorBrush : LayerBrush
|
||||
{
|
||||
private SKShader _shader;
|
||||
private List<SKColor> _testColors;
|
||||
private SKPaint _paint;
|
||||
|
||||
public ColorBrush(Layer layer, ColorBrushSettings settings, LayerBrushDescriptor descriptor) : base(layer, settings, descriptor)
|
||||
{
|
||||
Settings = settings;
|
||||
|
||||
_testColors = new List<SKColor>();
|
||||
for (var i = 0; i < 9; i++)
|
||||
{
|
||||
if (i != 8)
|
||||
_testColors.Add(SKColor.FromHsv(i * 32, 100, 100));
|
||||
else
|
||||
_testColors.Add(SKColor.FromHsv(0, 100, 100));
|
||||
}
|
||||
|
||||
CreateShader();
|
||||
Layer.RenderPropertiesUpdated += (sender, args) => CreateShader();
|
||||
Settings.PropertyChanged += (sender, args) => CreateShader();
|
||||
}
|
||||
|
||||
private void CreateShader()
|
||||
{
|
||||
var center = new SKPoint(Layer.Rectangle.MidX, Layer.Rectangle.MidY);
|
||||
SKShader shader;
|
||||
switch (Settings.GradientType)
|
||||
{
|
||||
case GradientType.Solid:
|
||||
shader = SKShader.CreateColor(_testColors.First());
|
||||
break;
|
||||
case GradientType.LinearGradient:
|
||||
shader = SKShader.CreateLinearGradient(new SKPoint(0, 0), new SKPoint(Layer.Rectangle.Width, 0), _testColors.ToArray(), SKShaderTileMode.Repeat);
|
||||
break;
|
||||
case GradientType.RadialGradient:
|
||||
shader = SKShader.CreateRadialGradient(center, Math.Min(Layer.Rectangle.Width, Layer.Rectangle.Height), _testColors.ToArray(), SKShaderTileMode.Repeat);
|
||||
break;
|
||||
case GradientType.SweepGradient:
|
||||
shader = SKShader.CreateSweepGradient(center, _testColors.ToArray(), null, SKShaderTileMode.Clamp, 0, 360);
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
var oldShader = _shader;
|
||||
var oldPaint = _paint;
|
||||
_shader = shader;
|
||||
_paint = new SKPaint {Shader = _shader, FilterQuality = SKFilterQuality.Low};
|
||||
oldShader?.Dispose();
|
||||
oldPaint?.Dispose();
|
||||
}
|
||||
|
||||
public new ColorBrushSettings Settings { get; }
|
||||
|
||||
public override LayerBrushViewModel GetViewModel()
|
||||
{
|
||||
return new ColorBrushViewModel(this);
|
||||
}
|
||||
|
||||
public override void Render(SKCanvas canvas)
|
||||
{
|
||||
canvas.DrawPath(Layer.LayerShape.RenderPath, _paint);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user