mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Updated to work with the new RGB.NET rendering
This commit is contained in:
parent
93a29eac52
commit
e58c0f20bb
@ -64,15 +64,9 @@
|
|||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="RGB.NET.Brushes">
|
|
||||||
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Brushes.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="RGB.NET.Core">
|
<Reference Include="RGB.NET.Core">
|
||||||
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Core.dll</HintPath>
|
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="RGB.NET.Groups">
|
|
||||||
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Groups.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="RGB.NET.Layout">
|
<Reference Include="RGB.NET.Layout">
|
||||||
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Layout.dll</HintPath>
|
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Layout.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
|||||||
@ -8,16 +8,16 @@ namespace Artemis.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class FrameRenderedEventArgs : EventArgs
|
public class FrameRenderedEventArgs : EventArgs
|
||||||
{
|
{
|
||||||
internal FrameRenderedEventArgs(BitmapBrush bitmapBrush, RGBSurface rgbSurface)
|
internal FrameRenderedEventArgs(SKTexture texture, RGBSurface rgbSurface)
|
||||||
{
|
{
|
||||||
BitmapBrush = bitmapBrush;
|
Texture = texture;
|
||||||
RgbSurface = rgbSurface;
|
RgbSurface = rgbSurface;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the bitmap brush used to render this frame
|
/// Gets the bitmap brush used to render this frame
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public BitmapBrush BitmapBrush { get; }
|
public SKTexture Texture { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the RGB surface used to render this frame
|
/// Gets the RGB surface used to render this frame
|
||||||
|
|||||||
@ -106,7 +106,7 @@ namespace Artemis.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the X-position of the device
|
/// Gets or sets the X-position of the device
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double X
|
public float X
|
||||||
{
|
{
|
||||||
get => DeviceEntity.X;
|
get => DeviceEntity.X;
|
||||||
set
|
set
|
||||||
@ -119,7 +119,7 @@ namespace Artemis.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the Y-position of the device
|
/// Gets or sets the Y-position of the device
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double Y
|
public float Y
|
||||||
{
|
{
|
||||||
get => DeviceEntity.Y;
|
get => DeviceEntity.Y;
|
||||||
set
|
set
|
||||||
@ -132,7 +132,7 @@ namespace Artemis.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the rotation of the device
|
/// Gets or sets the rotation of the device
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double Rotation
|
public float Rotation
|
||||||
{
|
{
|
||||||
get => DeviceEntity.Rotation;
|
get => DeviceEntity.Rotation;
|
||||||
set
|
set
|
||||||
@ -145,7 +145,7 @@ namespace Artemis.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the scale of the device
|
/// Gets or sets the scale of the device
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double Scale
|
public float Scale
|
||||||
{
|
{
|
||||||
get => DeviceEntity.Scale;
|
get => DeviceEntity.Scale;
|
||||||
set
|
set
|
||||||
@ -171,7 +171,7 @@ namespace Artemis.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the scale of the red color component used for calibration
|
/// Gets or sets the scale of the red color component used for calibration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double RedScale
|
public float RedScale
|
||||||
{
|
{
|
||||||
get => DeviceEntity.RedScale;
|
get => DeviceEntity.RedScale;
|
||||||
set
|
set
|
||||||
@ -184,7 +184,7 @@ namespace Artemis.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the scale of the green color component used for calibration
|
/// Gets or sets the scale of the green color component used for calibration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double GreenScale
|
public float GreenScale
|
||||||
{
|
{
|
||||||
get => DeviceEntity.GreenScale;
|
get => DeviceEntity.GreenScale;
|
||||||
set
|
set
|
||||||
@ -197,7 +197,7 @@ namespace Artemis.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the scale of the blue color component used for calibration
|
/// Gets or sets the scale of the blue color component used for calibration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double BlueScale
|
public float BlueScale
|
||||||
{
|
{
|
||||||
get => DeviceEntity.BlueScale;
|
get => DeviceEntity.BlueScale;
|
||||||
set
|
set
|
||||||
|
|||||||
@ -4,7 +4,6 @@ using System.Linq;
|
|||||||
using Artemis.Core.Services;
|
using Artemis.Core.Services;
|
||||||
using Ninject;
|
using Ninject;
|
||||||
using RGB.NET.Core;
|
using RGB.NET.Core;
|
||||||
using RGB.NET.Groups;
|
|
||||||
using SkiaSharp;
|
using SkiaSharp;
|
||||||
|
|
||||||
namespace Artemis.Core.LayerBrushes
|
namespace Artemis.Core.LayerBrushes
|
||||||
|
|||||||
32
src/Artemis.Core/RGB.NET/ArtemisSampler.cs
Normal file
32
src/Artemis.Core/RGB.NET/ArtemisSampler.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using RGB.NET.Core;
|
||||||
|
|
||||||
|
namespace Artemis.Core
|
||||||
|
{
|
||||||
|
public class ArtemisSampler : ISampler<byte>
|
||||||
|
{
|
||||||
|
#region Methods
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public Color SampleColor(SamplerInfo<byte> info)
|
||||||
|
{
|
||||||
|
int count = info.Width * info.Height;
|
||||||
|
if (count == 0) return Color.Transparent;
|
||||||
|
|
||||||
|
ReadOnlySpan<byte> data = info.Data;
|
||||||
|
|
||||||
|
uint r = 0, g = 0, b = 0;
|
||||||
|
for (int i = 0; i < data.Length; i += 4)
|
||||||
|
{
|
||||||
|
r += data[i];
|
||||||
|
g += data[i + 1];
|
||||||
|
b += data[i + 2];
|
||||||
|
}
|
||||||
|
|
||||||
|
float divisor = count * byte.MaxValue;
|
||||||
|
return new Color(r / divisor, g / divisor, b / divisor);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,197 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Artemis.Core.Services;
|
|
||||||
using RGB.NET.Core;
|
|
||||||
using SkiaSharp;
|
|
||||||
|
|
||||||
namespace Artemis.Core
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The RGB.NET brush Artemis uses to map the SkiaSharp bitmap to LEDs
|
|
||||||
/// </summary>
|
|
||||||
public sealed class BitmapBrush : AbstractDecoratable<IBrushDecorator>, IBrush, IDisposable
|
|
||||||
{
|
|
||||||
private readonly object _disposeLock;
|
|
||||||
private readonly PluginSetting<int> _sampleSizeSetting;
|
|
||||||
private readonly IRgbService _rgbService;
|
|
||||||
|
|
||||||
#region Constructors
|
|
||||||
|
|
||||||
internal BitmapBrush(Scale scale, PluginSetting<int> sampleSizeSetting, IRgbService rgbService)
|
|
||||||
{
|
|
||||||
_disposeLock = new object();
|
|
||||||
_sampleSizeSetting = sampleSizeSetting;
|
|
||||||
_rgbService = rgbService;
|
|
||||||
Scale = scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Properties & Fields
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public bool IsEnabled { get; set; } = true;
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public BrushCalculationMode BrushCalculationMode { get; set; } = BrushCalculationMode.Absolute;
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public double Brightness { get; set; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public double Opacity { get; set; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public IList<IColorCorrection> ColorCorrections { get; } = new List<IColorCorrection>();
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public Rectangle RenderedRectangle { get; private set; }
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public Dictionary<BrushRenderTarget, Color> RenderedTargets { get; } = new();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the desired scale of the bitmap brush
|
|
||||||
/// </summary>
|
|
||||||
public Scale Scale { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the last rendered scale of the bitmap brush
|
|
||||||
/// </summary>
|
|
||||||
public Scale RenderedScale { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the bitmap used to sample the brush
|
|
||||||
/// </summary>
|
|
||||||
public SKBitmap? Bitmap { get; private set; }
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Methods
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public void PerformRender(Rectangle rectangle, IEnumerable<BrushRenderTarget> renderTargets)
|
|
||||||
{
|
|
||||||
lock (_disposeLock)
|
|
||||||
{
|
|
||||||
// Can happen during surface change
|
|
||||||
if (IsDisposed)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (RenderedRectangle != rectangle || RenderedScale != Scale)
|
|
||||||
Bitmap = null;
|
|
||||||
|
|
||||||
RenderedRectangle = rectangle;
|
|
||||||
RenderedScale = Scale;
|
|
||||||
RenderedTargets.Clear();
|
|
||||||
|
|
||||||
if (Bitmap == null)
|
|
||||||
CreateBitmap(RenderedRectangle);
|
|
||||||
|
|
||||||
if (_sampleSizeSetting.Value == 1)
|
|
||||||
TakeCenter(renderTargets);
|
|
||||||
else
|
|
||||||
TakeSamples(renderTargets);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void TakeCenter(IEnumerable<BrushRenderTarget> renderTargets)
|
|
||||||
{
|
|
||||||
if (Bitmap == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
foreach (BrushRenderTarget renderTarget in renderTargets)
|
|
||||||
{
|
|
||||||
Point scaledLocation = renderTarget.Point * Scale;
|
|
||||||
if (scaledLocation.X < Bitmap.Width && scaledLocation.Y < Bitmap.Height)
|
|
||||||
{
|
|
||||||
Color pixel = Bitmap.GetPixel(scaledLocation.X.RoundToInt(), scaledLocation.Y.RoundToInt()).ToRgbColor();
|
|
||||||
ArtemisDevice? artemisDevice = _rgbService.GetLed(renderTarget.Led)?.Device;
|
|
||||||
if (artemisDevice != null)
|
|
||||||
pixel = pixel.MultiplyRGB(artemisDevice.RedScale, artemisDevice.GreenScale, artemisDevice.BlueScale);
|
|
||||||
RenderedTargets[renderTarget] = pixel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void TakeSamples(IEnumerable<BrushRenderTarget> renderTargets)
|
|
||||||
{
|
|
||||||
if (Bitmap == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
int sampleSize = _sampleSizeSetting.Value;
|
|
||||||
int sampleDepth = Math.Sqrt(sampleSize).RoundToInt();
|
|
||||||
|
|
||||||
int bitmapWidth = Bitmap.Width;
|
|
||||||
int bitmapHeight = Bitmap.Height;
|
|
||||||
|
|
||||||
using SKPixmap pixmap = Bitmap.PeekPixels();
|
|
||||||
foreach (BrushRenderTarget renderTarget in renderTargets)
|
|
||||||
{
|
|
||||||
// SKRect has all the good stuff we need
|
|
||||||
int left = (int) ((renderTarget.Rectangle.Location.X + 4) * Scale.Horizontal);
|
|
||||||
int top = (int) ((renderTarget.Rectangle.Location.Y + 4) * Scale.Vertical);
|
|
||||||
int width = (int) ((renderTarget.Rectangle.Size.Width - 8) * Scale.Horizontal);
|
|
||||||
int height = (int) ((renderTarget.Rectangle.Size.Height - 8) * Scale.Vertical);
|
|
||||||
|
|
||||||
int verticalSteps = height / (sampleDepth - 1);
|
|
||||||
int horizontalSteps = width / (sampleDepth - 1);
|
|
||||||
|
|
||||||
int a = 0, r = 0, g = 0, b = 0;
|
|
||||||
for (int horizontalStep = 0; horizontalStep < sampleDepth; horizontalStep++)
|
|
||||||
{
|
|
||||||
for (int verticalStep = 0; verticalStep < sampleDepth; verticalStep++)
|
|
||||||
{
|
|
||||||
int x = left + horizontalSteps * horizontalStep;
|
|
||||||
int y = top + verticalSteps * verticalStep;
|
|
||||||
if (x < 0 || x >= bitmapWidth || y < 0 || y >= bitmapHeight)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
SKColor color = pixmap.GetPixelColor(x, y);
|
|
||||||
a += color.Alpha;
|
|
||||||
r += color.Red;
|
|
||||||
g += color.Green;
|
|
||||||
b += color.Blue;
|
|
||||||
|
|
||||||
// Uncomment to view the sample pixels in the debugger, need a checkbox in the actual debugger but this was a quickie
|
|
||||||
// Bitmap.SetPixel(x, y, new SKColor(0, 255, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Color pixel = new(a / sampleSize, r / sampleSize, g / sampleSize, b / sampleSize);
|
|
||||||
|
|
||||||
ArtemisDevice? artemisDevice = _rgbService.GetLed(renderTarget.Led)?.Device;
|
|
||||||
if (artemisDevice is not null)
|
|
||||||
pixel = pixel.MultiplyRGB(artemisDevice.RedScale, artemisDevice.GreenScale, artemisDevice.BlueScale);
|
|
||||||
|
|
||||||
RenderedTargets[renderTarget] = pixel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CreateBitmap(Rectangle rectangle)
|
|
||||||
{
|
|
||||||
double width = Math.Min((rectangle.Location.X + rectangle.Size.Width) * Scale.Horizontal, 4096);
|
|
||||||
double height = Math.Min((rectangle.Location.Y + rectangle.Size.Height) * Scale.Vertical, 4096);
|
|
||||||
Bitmap = new SKBitmap(new SKImageInfo(width.RoundToInt(), height.RoundToInt(), SKColorType.Rgb888x));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public void PerformFinalize()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
lock (_disposeLock)
|
|
||||||
{
|
|
||||||
Bitmap?.Dispose();
|
|
||||||
IsDisposed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal bool IsDisposed { get; set; }
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
96
src/Artemis.Core/RGB.NET/SKTexture.cs
Normal file
96
src/Artemis.Core/RGB.NET/SKTexture.cs
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
using System;
|
||||||
|
using System.Buffers;
|
||||||
|
using RGB.NET.Core;
|
||||||
|
using SkiaSharp;
|
||||||
|
|
||||||
|
namespace Artemis.Core
|
||||||
|
{
|
||||||
|
public sealed class SKTexture : ITexture
|
||||||
|
{
|
||||||
|
#region Constants
|
||||||
|
|
||||||
|
private const int STACK_ALLOC_LIMIT = 1024;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Properties & Fields
|
||||||
|
|
||||||
|
private readonly SKBitmap _bitmap;
|
||||||
|
private readonly int _stride;
|
||||||
|
|
||||||
|
public SKBitmap Bitmap => _bitmap;
|
||||||
|
|
||||||
|
public Size Size { get; }
|
||||||
|
|
||||||
|
public ISampler<byte> Sampler { get; set; } = new ArtemisSampler();
|
||||||
|
|
||||||
|
public Color this[in Point point]
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
int x = (Size.Width * point.X.Clamp(0, 1)).RoundToInt();
|
||||||
|
int y = (Size.Height * point.Y.Clamp(0, 1)).RoundToInt();
|
||||||
|
return _bitmap.GetPixel(x, y).ToRgbColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color this[in Rectangle rectangle]
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
int x = (Size.Width * rectangle.Location.X.Clamp(0, 1)).RoundToInt();
|
||||||
|
int y = (Size.Height * rectangle.Location.Y.Clamp(0, 1)).RoundToInt();
|
||||||
|
int width = (Size.Width * rectangle.Size.Width.Clamp(0, 1)).RoundToInt();
|
||||||
|
int height = (Size.Height * rectangle.Size.Height.Clamp(0, 1)).RoundToInt();
|
||||||
|
|
||||||
|
int bufferSize = width * height * 4;
|
||||||
|
if (bufferSize <= STACK_ALLOC_LIMIT)
|
||||||
|
{
|
||||||
|
Span<byte> buffer = stackalloc byte[bufferSize];
|
||||||
|
GetRegionData(x, y, width, height, buffer);
|
||||||
|
return Sampler.SampleColor(new SamplerInfo<byte>(width, height, buffer));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
byte[] rent = ArrayPool<byte>.Shared.Rent(bufferSize);
|
||||||
|
Span<byte> buffer = new Span<byte>(rent).Slice(0, bufferSize);
|
||||||
|
GetRegionData(x, y, width, height, buffer);
|
||||||
|
Color color = Sampler.SampleColor(new SamplerInfo<byte>(width, height, buffer));
|
||||||
|
ArrayPool<byte>.Shared.Return(rent);
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
public SKTexture(SKBitmap bitmap)
|
||||||
|
{
|
||||||
|
this._bitmap = bitmap;
|
||||||
|
|
||||||
|
Size = new Size(bitmap.Width, bitmap.Height);
|
||||||
|
_stride = bitmap.Width;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Methods
|
||||||
|
|
||||||
|
private void GetRegionData(int x, int y, int width, int height, in Span<byte> buffer)
|
||||||
|
{
|
||||||
|
int width4 = width * 4;
|
||||||
|
ReadOnlySpan<byte> data = _bitmap.GetPixelSpan();
|
||||||
|
for (int i = 0; i < height; i++)
|
||||||
|
{
|
||||||
|
ReadOnlySpan<byte> dataSlice = data.Slice((((y + i) * _stride) + x) * 4, width4);
|
||||||
|
Span<byte> destination = buffer.Slice(i * width4, width4);
|
||||||
|
dataSlice.CopyTo(destination);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,16 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Artemis.Core.DataModelExpansions;
|
using Artemis.Core.DataModelExpansions;
|
||||||
using Artemis.Core.Ninject;
|
using Artemis.Core.Ninject;
|
||||||
using Artemis.Core.Services.Core;
|
|
||||||
using Artemis.Storage;
|
using Artemis.Storage;
|
||||||
using HidSharp;
|
using HidSharp;
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Ninject;
|
using Ninject;
|
||||||
using RGB.NET.Core;
|
using RGB.NET.Core;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
@ -38,6 +35,8 @@ namespace Artemis.Core.Services
|
|||||||
private List<BaseDataModelExpansion> _dataModelExpansions = new();
|
private List<BaseDataModelExpansion> _dataModelExpansions = new();
|
||||||
private DateTime _lastExceptionLog;
|
private DateTime _lastExceptionLog;
|
||||||
private List<Module> _modules = new();
|
private List<Module> _modules = new();
|
||||||
|
private SKBitmap? _bitmap;
|
||||||
|
private readonly object _bitmapLock = new();
|
||||||
|
|
||||||
// ReSharper disable UnusedParameter.Local
|
// ReSharper disable UnusedParameter.Local
|
||||||
public CoreService(IKernel kernel,
|
public CoreService(IKernel kernel,
|
||||||
@ -66,11 +65,14 @@ namespace Artemis.Core.Services
|
|||||||
|
|
||||||
_rgbService.Surface.Updating += SurfaceOnUpdating;
|
_rgbService.Surface.Updating += SurfaceOnUpdating;
|
||||||
_rgbService.Surface.Updated += SurfaceOnUpdated;
|
_rgbService.Surface.Updated += SurfaceOnUpdated;
|
||||||
|
_rgbService.Surface.SurfaceLayoutChanged += SurfaceOnSurfaceLayoutChanged;
|
||||||
_loggingLevel.SettingChanged += (sender, args) => ApplyLoggingLevel();
|
_loggingLevel.SettingChanged += (sender, args) => ApplyLoggingLevel();
|
||||||
|
_renderScale.SettingChanged += RenderScaleSettingChanged;
|
||||||
|
|
||||||
_pluginManagementService.PluginFeatureEnabled += (sender, args) => UpdatePluginCache();
|
_pluginManagementService.PluginFeatureEnabled += (sender, args) => UpdatePluginCache();
|
||||||
_pluginManagementService.PluginFeatureDisabled += (sender, args) => UpdatePluginCache();
|
_pluginManagementService.PluginFeatureDisabled += (sender, args) => UpdatePluginCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper restore UnusedParameter.Local
|
// ReSharper restore UnusedParameter.Local
|
||||||
|
|
||||||
public TimeSpan FrameTime { get; private set; }
|
public TimeSpan FrameTime { get; private set; }
|
||||||
@ -169,8 +171,8 @@ namespace Artemis.Core.Services
|
|||||||
string[] parts = argument.Split('=');
|
string[] parts = argument.Split('=');
|
||||||
if (parts.Length == 2 && Enum.TryParse(typeof(LogEventLevel), parts[1], true, out object? logLevelArgument))
|
if (parts.Length == 2 && Enum.TryParse(typeof(LogEventLevel), parts[1], true, out object? logLevelArgument))
|
||||||
{
|
{
|
||||||
_logger.Information("Setting logging level to {loggingLevel} from startup argument", (LogEventLevel) logLevelArgument!);
|
_logger.Information("Setting logging level to {loggingLevel} from startup argument", (LogEventLevel)logLevelArgument!);
|
||||||
LoggerProvider.LoggingLevelSwitch.MinimumLevel = (LogEventLevel) logLevelArgument;
|
LoggerProvider.LoggingLevelSwitch.MinimumLevel = (LogEventLevel)logLevelArgument;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -214,23 +216,22 @@ namespace Artemis.Core.Services
|
|||||||
foreach (Module module in modules)
|
foreach (Module module in modules)
|
||||||
module.InternalUpdate(args.DeltaTime);
|
module.InternalUpdate(args.DeltaTime);
|
||||||
|
|
||||||
// If there is no ready bitmap brush, skip the frame
|
lock (_bitmapLock)
|
||||||
if (_rgbService.BitmapBrush == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lock (_rgbService.BitmapBrush)
|
|
||||||
{
|
{
|
||||||
if (_rgbService.BitmapBrush.Bitmap == null)
|
if (_bitmap == null)
|
||||||
return;
|
{
|
||||||
|
_bitmap = CreateBitmap();
|
||||||
|
_rgbService.UpdateTexture(_bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
// Render all active modules
|
// Render all active modules
|
||||||
using SKCanvas canvas = new(_rgbService.BitmapBrush.Bitmap);
|
using SKCanvas canvas = new(_bitmap);
|
||||||
canvas.Scale((float) _renderScale.Value);
|
canvas.Scale((float)_renderScale.Value);
|
||||||
canvas.Clear(new SKColor(0, 0, 0));
|
canvas.Clear(new SKColor(0, 0, 0));
|
||||||
if (!ModuleRenderingDisabled)
|
if (!ModuleRenderingDisabled)
|
||||||
// While non-activated modules may be updated above if they expand the main data model, they may never render
|
// While non-activated modules may be updated above if they expand the main data model, they may never render
|
||||||
foreach (Module module in modules.Where(m => m.IsActivated))
|
foreach (Module module in modules.Where(m => m.IsActivated))
|
||||||
module.InternalRender(args.DeltaTime, canvas, _rgbService.BitmapBrush.Bitmap.Info);
|
module.InternalRender(args.DeltaTime, canvas, _bitmap.Info);
|
||||||
|
|
||||||
OnFrameRendering(new FrameRenderingEventArgs(canvas, args.DeltaTime, _rgbService.Surface));
|
OnFrameRendering(new FrameRenderingEventArgs(canvas, args.DeltaTime, _rgbService.Surface));
|
||||||
}
|
}
|
||||||
@ -248,6 +249,26 @@ namespace Artemis.Core.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SKBitmap CreateBitmap()
|
||||||
|
{
|
||||||
|
float width = MathF.Min(_rgbService.Surface.Boundary.Size.Width * (float)_renderScale.Value, 4096);
|
||||||
|
float height = MathF.Min(_rgbService.Surface.Boundary.Size.Height * (float)_renderScale.Value, 4096);
|
||||||
|
return new SKBitmap(new SKImageInfo(width.RoundToInt(), height.RoundToInt(), SKColorType.Rgb888x));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InvalidateBitmap()
|
||||||
|
{
|
||||||
|
|
||||||
|
lock (_bitmapLock)
|
||||||
|
{
|
||||||
|
_bitmap?.Dispose();
|
||||||
|
_bitmap = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SurfaceOnSurfaceLayoutChanged(SurfaceLayoutChangedEventArgs args) => InvalidateBitmap();
|
||||||
|
private void RenderScaleSettingChanged(object? sender, EventArgs e) => InvalidateBitmap();
|
||||||
|
|
||||||
private void LogUpdateExceptions()
|
private void LogUpdateExceptions()
|
||||||
{
|
{
|
||||||
// Only log update exceptions every 10 seconds to avoid spamming the logs
|
// Only log update exceptions every 10 seconds to avoid spamming the logs
|
||||||
@ -271,7 +292,7 @@ namespace Artemis.Core.Services
|
|||||||
if (_rgbService.IsRenderPaused)
|
if (_rgbService.IsRenderPaused)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
OnFrameRendered(new FrameRenderedEventArgs(_rgbService.BitmapBrush!, _rgbService.Surface));
|
OnFrameRendered(new FrameRenderedEventArgs(_rgbService.Texture!, _rgbService.Surface));
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Events
|
#region Events
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using RGB.NET.Brushes;
|
|
||||||
using RGB.NET.Core;
|
using RGB.NET.Core;
|
||||||
using RGB.NET.Groups;
|
|
||||||
|
|
||||||
namespace Artemis.Core.Services
|
namespace Artemis.Core.Services
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using RGB.NET.Core;
|
using RGB.NET.Core;
|
||||||
|
using SkiaSharp;
|
||||||
|
|
||||||
namespace Artemis.Core.Services
|
namespace Artemis.Core.Services
|
||||||
{
|
{
|
||||||
@ -31,9 +32,14 @@ namespace Artemis.Core.Services
|
|||||||
RGBSurface Surface { get; set; }
|
RGBSurface Surface { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the bitmap brush used to convert the rendered frame to LED-colors
|
/// Gets the texture brush used to convert the rendered frame to LED-colors
|
||||||
/// </summary>
|
/// </summary>
|
||||||
BitmapBrush? BitmapBrush { get; }
|
TextureBrush TextureBrush { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the texture used to convert the rendered frame to LED-colors
|
||||||
|
/// </summary>
|
||||||
|
SKTexture? Texture { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the update trigger that drives the render loop
|
/// Gets the update trigger that drives the render loop
|
||||||
@ -45,6 +51,12 @@ namespace Artemis.Core.Services
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
bool IsRenderPaused { get; set; }
|
bool IsRenderPaused { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recreates the Texture to use the given <see cref="SKBitmap"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="bitmap"></param>
|
||||||
|
void UpdateTexture(SKBitmap bitmap);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds the given device provider to the <see cref="Surface" />
|
/// Adds the given device provider to the <see cref="Surface" />
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -7,8 +7,8 @@ using Artemis.Core.Services.Models;
|
|||||||
using Artemis.Storage.Entities.Surface;
|
using Artemis.Storage.Entities.Surface;
|
||||||
using Artemis.Storage.Repositories.Interfaces;
|
using Artemis.Storage.Repositories.Interfaces;
|
||||||
using RGB.NET.Core;
|
using RGB.NET.Core;
|
||||||
using RGB.NET.Groups;
|
|
||||||
using Serilog;
|
using Serilog;
|
||||||
|
using SkiaSharp;
|
||||||
|
|
||||||
namespace Artemis.Core.Services
|
namespace Artemis.Core.Services
|
||||||
{
|
{
|
||||||
@ -24,7 +24,6 @@ namespace Artemis.Core.Services
|
|||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly IPluginManagementService _pluginManagementService;
|
private readonly IPluginManagementService _pluginManagementService;
|
||||||
private readonly IDeviceRepository _deviceRepository;
|
private readonly IDeviceRepository _deviceRepository;
|
||||||
private readonly PluginSetting<double> _renderScaleSetting;
|
|
||||||
private readonly PluginSetting<int> _targetFrameRateSetting;
|
private readonly PluginSetting<int> _targetFrameRateSetting;
|
||||||
private readonly PluginSetting<int> _sampleSizeSetting;
|
private readonly PluginSetting<int> _sampleSizeSetting;
|
||||||
private ListLedGroup? _surfaceLedGroup;
|
private ListLedGroup? _surfaceLedGroup;
|
||||||
@ -35,7 +34,6 @@ namespace Artemis.Core.Services
|
|||||||
_logger = logger;
|
_logger = logger;
|
||||||
_pluginManagementService = pluginManagementService;
|
_pluginManagementService = pluginManagementService;
|
||||||
_deviceRepository = deviceRepository;
|
_deviceRepository = deviceRepository;
|
||||||
_renderScaleSetting = settingsService.GetSetting("Core.RenderScale", 0.5);
|
|
||||||
_targetFrameRateSetting = settingsService.GetSetting("Core.TargetFrameRate", 25);
|
_targetFrameRateSetting = settingsService.GetSetting("Core.TargetFrameRate", 25);
|
||||||
_sampleSizeSetting = settingsService.GetSetting("Core.SampleSize", 1);
|
_sampleSizeSetting = settingsService.GetSetting("Core.SampleSize", 1);
|
||||||
|
|
||||||
@ -43,13 +41,13 @@ namespace Artemis.Core.Services
|
|||||||
|
|
||||||
// Let's throw these for now
|
// Let's throw these for now
|
||||||
Surface.Exception += SurfaceOnException;
|
Surface.Exception += SurfaceOnException;
|
||||||
_renderScaleSetting.SettingChanged += RenderScaleSettingOnSettingChanged;
|
Surface.SurfaceLayoutChanged += SurfaceOnLayoutChanged;
|
||||||
_targetFrameRateSetting.SettingChanged += TargetFrameRateSettingOnSettingChanged;
|
_targetFrameRateSetting.SettingChanged += TargetFrameRateSettingOnSettingChanged;
|
||||||
_enabledDevices = new List<ArtemisDevice>();
|
_enabledDevices = new List<ArtemisDevice>();
|
||||||
_devices = new List<ArtemisDevice>();
|
_devices = new List<ArtemisDevice>();
|
||||||
_ledMap = new Dictionary<Led, ArtemisLed>();
|
_ledMap = new Dictionary<Led, ArtemisLed>();
|
||||||
|
|
||||||
UpdateTrigger = new TimerUpdateTrigger {UpdateFrequency = 1.0 / _targetFrameRateSetting.Value};
|
UpdateTrigger = new TimerUpdateTrigger { UpdateFrequency = 1.0 / _targetFrameRateSetting.Value };
|
||||||
Surface.RegisterUpdateTrigger(UpdateTrigger);
|
Surface.RegisterUpdateTrigger(UpdateTrigger);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +59,8 @@ namespace Artemis.Core.Services
|
|||||||
public RGBSurface Surface { get; set; }
|
public RGBSurface Surface { get; set; }
|
||||||
|
|
||||||
public TimerUpdateTrigger UpdateTrigger { get; }
|
public TimerUpdateTrigger UpdateTrigger { get; }
|
||||||
public BitmapBrush? BitmapBrush { get; private set; }
|
public TextureBrush TextureBrush { get; private set; } = new(ITexture.Empty) { CalculationMode = RenderMode.Absolute };
|
||||||
|
public SKTexture? Texture { get; private set; }
|
||||||
|
|
||||||
public bool IsRenderPaused { get; set; }
|
public bool IsRenderPaused { get; set; }
|
||||||
|
|
||||||
@ -104,7 +103,7 @@ namespace Artemis.Core.Services
|
|||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
_modifyingProviders = false;
|
_modifyingProviders = false;
|
||||||
UpdateBitmapBrush();
|
UpdateLedGroup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,12 +131,20 @@ namespace Artemis.Core.Services
|
|||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
_modifyingProviders = false;
|
_modifyingProviders = false;
|
||||||
UpdateBitmapBrush();
|
UpdateLedGroup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateBitmapBrush()
|
public void UpdateTexture(SKBitmap bitmap)
|
||||||
|
{
|
||||||
|
Texture = new SKTexture(bitmap);
|
||||||
|
TextureBrush.Texture = Texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SurfaceOnLayoutChanged(SurfaceLayoutChangedEventArgs args) => UpdateLedGroup();
|
||||||
|
|
||||||
|
private void UpdateLedGroup()
|
||||||
{
|
{
|
||||||
lock (_devices)
|
lock (_devices)
|
||||||
{
|
{
|
||||||
@ -146,11 +153,9 @@ namespace Artemis.Core.Services
|
|||||||
|
|
||||||
_ledMap = new Dictionary<Led, ArtemisLed>(_devices.SelectMany(d => d.Leds).ToDictionary(l => l.RgbLed));
|
_ledMap = new Dictionary<Led, ArtemisLed>(_devices.SelectMany(d => d.Leds).ToDictionary(l => l.RgbLed));
|
||||||
|
|
||||||
if (_surfaceLedGroup == null || BitmapBrush == null)
|
if (_surfaceLedGroup == null)
|
||||||
{
|
{
|
||||||
// Apply the application wide brush and decorator
|
_surfaceLedGroup = new ListLedGroup(Surface, LedMap.Select(l => l.Key)) { Brush = TextureBrush };
|
||||||
BitmapBrush = new BitmapBrush(new Scale(_renderScaleSetting.Value), _sampleSizeSetting, this);
|
|
||||||
_surfaceLedGroup = new ListLedGroup(Surface, LedMap.Select(l => l.Key)) {Brush = BitmapBrush};
|
|
||||||
OnLedsChanged();
|
OnLedsChanged();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -161,8 +166,7 @@ namespace Artemis.Core.Services
|
|||||||
_surfaceLedGroup.Detach(Surface);
|
_surfaceLedGroup.Detach(Surface);
|
||||||
|
|
||||||
// Apply the application wide brush and decorator
|
// Apply the application wide brush and decorator
|
||||||
BitmapBrush.Scale = new Scale(_renderScaleSetting.Value);
|
_surfaceLedGroup = new ListLedGroup(Surface, LedMap.Select(l => l.Key)) { Brush = TextureBrush };
|
||||||
_surfaceLedGroup = new ListLedGroup(Surface, LedMap.Select(l => l.Key)) {Brush = BitmapBrush};
|
|
||||||
OnLedsChanged();
|
OnLedsChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -234,8 +238,6 @@ namespace Artemis.Core.Services
|
|||||||
public void ApplyDeviceLayout(ArtemisDevice device, ArtemisLayout layout, bool createMissingLeds, bool removeExessiveLeds)
|
public void ApplyDeviceLayout(ArtemisDevice device, ArtemisLayout layout, bool createMissingLeds, bool removeExessiveLeds)
|
||||||
{
|
{
|
||||||
device.ApplyLayout(layout, createMissingLeds, removeExessiveLeds);
|
device.ApplyLayout(layout, createMissingLeds, removeExessiveLeds);
|
||||||
// Applying layouts can affect LEDs, update LED group
|
|
||||||
UpdateBitmapBrush();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArtemisDevice? GetDevice(IRGBDevice rgbDevice)
|
public ArtemisDevice? GetDevice(IRGBDevice rgbDevice)
|
||||||
@ -259,7 +261,6 @@ namespace Artemis.Core.Services
|
|||||||
device.ApplyToEntity();
|
device.ApplyToEntity();
|
||||||
_deviceRepository.Save(device.DeviceEntity);
|
_deviceRepository.Save(device.DeviceEntity);
|
||||||
|
|
||||||
UpdateBitmapBrush();
|
|
||||||
OnDeviceAdded(new DeviceEventArgs(device));
|
OnDeviceAdded(new DeviceEventArgs(device));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,7 +274,6 @@ namespace Artemis.Core.Services
|
|||||||
device.ApplyToEntity();
|
device.ApplyToEntity();
|
||||||
_deviceRepository.Save(device.DeviceEntity);
|
_deviceRepository.Save(device.DeviceEntity);
|
||||||
|
|
||||||
UpdateBitmapBrush();
|
|
||||||
OnDeviceRemoved(new DeviceEventArgs(device));
|
OnDeviceRemoved(new DeviceEventArgs(device));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +298,6 @@ namespace Artemis.Core.Services
|
|||||||
if (device.IsEnabled)
|
if (device.IsEnabled)
|
||||||
_enabledDevices.Remove(device);
|
_enabledDevices.Remove(device);
|
||||||
|
|
||||||
UpdateBitmapBrush();
|
|
||||||
OnDeviceRemoved(new DeviceEventArgs(device));
|
OnDeviceRemoved(new DeviceEventArgs(device));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,12 +348,6 @@ namespace Artemis.Core.Services
|
|||||||
|
|
||||||
#region Event handlers
|
#region Event handlers
|
||||||
|
|
||||||
private void RenderScaleSettingOnSettingChanged(object? sender, EventArgs e)
|
|
||||||
{
|
|
||||||
// The surface hasn't changed so we can safely reuse it
|
|
||||||
UpdateBitmapBrush();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void TargetFrameRateSettingOnSettingChanged(object? sender, EventArgs e)
|
private void TargetFrameRateSettingOnSettingChanged(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
UpdateTrigger.UpdateFrequency = 1.0 / _targetFrameRateSetting.Value;
|
UpdateTrigger.UpdateFrequency = 1.0 / _targetFrameRateSetting.Value;
|
||||||
|
|||||||
@ -90,8 +90,8 @@ namespace Artemis.Core.Services.Models
|
|||||||
surfaceArrangementType.Arrange(devices);
|
surfaceArrangementType.Arrange(devices);
|
||||||
|
|
||||||
// See if we need to move the surface to keep X and Y values positive
|
// See if we need to move the surface to keep X and Y values positive
|
||||||
double x = devices.Min(d => d.RgbDevice.Location.X);
|
float x = devices.Min(d => d.RgbDevice.Location.X);
|
||||||
double y = devices.Min(d => d.RgbDevice.Location.Y);
|
float y = devices.Min(d => d.RgbDevice.Location.Y);
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
{
|
{
|
||||||
foreach (ArtemisDevice surfaceDevice in devices)
|
foreach (ArtemisDevice surfaceDevice in devices)
|
||||||
|
|||||||
@ -52,11 +52,11 @@ namespace Artemis.Core.Services.Models
|
|||||||
if (stackVertically)
|
if (stackVertically)
|
||||||
{
|
{
|
||||||
artemisDevice.X = previous.X;
|
artemisDevice.X = previous.X;
|
||||||
artemisDevice.Y = previous.RgbDevice.Location.Y + previous.RgbDevice.Size.Height + MarginTop / 2.0;
|
artemisDevice.Y = previous.RgbDevice.Location.Y + previous.RgbDevice.Size.Height + MarginTop / 2f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
artemisDevice.X = previous.RgbDevice.Location.X + previous.RgbDevice.Size.Width + MarginLeft / 2.0;
|
artemisDevice.X = previous.RgbDevice.Location.X + previous.RgbDevice.Size.Width + MarginLeft / 2f;
|
||||||
artemisDevice.Y = previous.Y;
|
artemisDevice.Y = previous.Y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -66,7 +66,7 @@ namespace Artemis.Core.Services.Models
|
|||||||
{
|
{
|
||||||
HorizontalArrangementPosition.Left => startPoint.X - artemisDevice.RgbDevice.Size.Width - MarginRight,
|
HorizontalArrangementPosition.Left => startPoint.X - artemisDevice.RgbDevice.Size.Width - MarginRight,
|
||||||
HorizontalArrangementPosition.Right => startPoint.X + MarginLeft,
|
HorizontalArrangementPosition.Right => startPoint.X + MarginLeft,
|
||||||
HorizontalArrangementPosition.Center => startPoint.X - artemisDevice.RgbDevice.Size.Width / 2,
|
HorizontalArrangementPosition.Center => startPoint.X - artemisDevice.RgbDevice.Size.Width / 2f,
|
||||||
HorizontalArrangementPosition.Equal => startPoint.X,
|
HorizontalArrangementPosition.Equal => startPoint.X,
|
||||||
_ => artemisDevice.X
|
_ => artemisDevice.X
|
||||||
};
|
};
|
||||||
@ -74,7 +74,7 @@ namespace Artemis.Core.Services.Models
|
|||||||
{
|
{
|
||||||
VerticalArrangementPosition.Top => startPoint.Y - artemisDevice.RgbDevice.Size.Height - MarginBottom,
|
VerticalArrangementPosition.Top => startPoint.Y - artemisDevice.RgbDevice.Size.Height - MarginBottom,
|
||||||
VerticalArrangementPosition.Bottom => startPoint.Y + MarginTop,
|
VerticalArrangementPosition.Bottom => startPoint.Y + MarginTop,
|
||||||
VerticalArrangementPosition.Center => startPoint.Y - artemisDevice.RgbDevice.Size.Height / 2,
|
VerticalArrangementPosition.Center => startPoint.Y - artemisDevice.RgbDevice.Size.Height / 2f,
|
||||||
VerticalArrangementPosition.Equal => startPoint.Y,
|
VerticalArrangementPosition.Equal => startPoint.Y,
|
||||||
_ => artemisDevice.X
|
_ => artemisDevice.X
|
||||||
};
|
};
|
||||||
|
|||||||
@ -62,18 +62,18 @@ namespace Artemis.Core.Services.Models
|
|||||||
if (!devices.Any())
|
if (!devices.Any())
|
||||||
return new Point();
|
return new Point();
|
||||||
|
|
||||||
double x = horizontalPosition switch
|
float x = horizontalPosition switch
|
||||||
{
|
{
|
||||||
HorizontalArrangementPosition.Left => devices.Min(d => d.RgbDevice.Location.X) - (AppliedConfiguration?.MarginLeft ?? 0.0),
|
HorizontalArrangementPosition.Left => devices.Min(d => d.RgbDevice.Location.X) - (AppliedConfiguration?.MarginLeft ?? 0.0f),
|
||||||
HorizontalArrangementPosition.Right => devices.Max(d => d.RgbDevice.Location.X + d.RgbDevice.Size.Width) + (AppliedConfiguration?.MarginRight ?? 0.0),
|
HorizontalArrangementPosition.Right => devices.Max(d => d.RgbDevice.Location.X + d.RgbDevice.Size.Width) + (AppliedConfiguration?.MarginRight ?? 0.0f),
|
||||||
HorizontalArrangementPosition.Center => devices.First().RgbDevice.Boundary.Center.X,
|
HorizontalArrangementPosition.Center => devices.First().RgbDevice.Boundary.Center.X,
|
||||||
HorizontalArrangementPosition.Equal => devices.First().RgbDevice.Location.X,
|
HorizontalArrangementPosition.Equal => devices.First().RgbDevice.Location.X,
|
||||||
_ => throw new ArgumentOutOfRangeException(nameof(horizontalPosition), horizontalPosition, null)
|
_ => throw new ArgumentOutOfRangeException(nameof(horizontalPosition), horizontalPosition, null)
|
||||||
};
|
};
|
||||||
double y = verticalPosition switch
|
float y = verticalPosition switch
|
||||||
{
|
{
|
||||||
VerticalArrangementPosition.Top => devices.Min(d => d.RgbDevice.Location.Y) - (AppliedConfiguration?.MarginTop ?? 0.0),
|
VerticalArrangementPosition.Top => devices.Min(d => d.RgbDevice.Location.Y) - (AppliedConfiguration?.MarginTop ?? 0.0f),
|
||||||
VerticalArrangementPosition.Bottom => devices.Max(d => d.RgbDevice.Location.Y + d.RgbDevice.Size.Height) + (AppliedConfiguration?.MarginBottom ?? 0.0),
|
VerticalArrangementPosition.Bottom => devices.Max(d => d.RgbDevice.Location.Y + d.RgbDevice.Size.Height) + (AppliedConfiguration?.MarginBottom ?? 0.0f),
|
||||||
VerticalArrangementPosition.Center => devices.First().RgbDevice.Boundary.Center.Y,
|
VerticalArrangementPosition.Center => devices.First().RgbDevice.Boundary.Center.Y,
|
||||||
VerticalArrangementPosition.Equal => devices.First().RgbDevice.Location.Y,
|
VerticalArrangementPosition.Equal => devices.First().RgbDevice.Location.Y,
|
||||||
_ => throw new ArgumentOutOfRangeException(nameof(verticalPosition), verticalPosition, null)
|
_ => throw new ArgumentOutOfRangeException(nameof(verticalPosition), verticalPosition, null)
|
||||||
|
|||||||
@ -10,14 +10,14 @@ namespace Artemis.Storage.Entities.Surface
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
public double X { get; set; }
|
public float X { get; set; }
|
||||||
public double Y { get; set; }
|
public float Y { get; set; }
|
||||||
public double Rotation { get; set; }
|
public float Rotation { get; set; }
|
||||||
public double Scale { get; set; }
|
public float Scale { get; set; }
|
||||||
public int ZIndex { get; set; }
|
public int ZIndex { get; set; }
|
||||||
public double RedScale { get; set; }
|
public float RedScale { get; set; }
|
||||||
public double GreenScale { get; set; }
|
public float GreenScale { get; set; }
|
||||||
public double BlueScale { get; set; }
|
public float BlueScale { get; set; }
|
||||||
public bool IsEnabled { get; set; }
|
public bool IsEnabled { get; set; }
|
||||||
|
|
||||||
public int PhysicalLayout { get; set; }
|
public int PhysicalLayout { get; set; }
|
||||||
|
|||||||
@ -6,6 +6,7 @@ using System.Windows.Media.Imaging;
|
|||||||
using Artemis.Core;
|
using Artemis.Core;
|
||||||
using RGB.NET.Core;
|
using RGB.NET.Core;
|
||||||
using Color = System.Windows.Media.Color;
|
using Color = System.Windows.Media.Color;
|
||||||
|
using SolidColorBrush = System.Windows.Media.SolidColorBrush;
|
||||||
|
|
||||||
namespace Artemis.UI.Shared
|
namespace Artemis.UI.Shared
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,364 +1,358 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<TargetFramework>net5.0-windows</TargetFramework>
|
<TargetFramework>net5.0-windows</TargetFramework>
|
||||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<AssemblyTitle>Artemis</AssemblyTitle>
|
<AssemblyTitle>Artemis</AssemblyTitle>
|
||||||
<Product>Artemis</Product>
|
<Product>Artemis</Product>
|
||||||
<NeutralLanguage>en-US</NeutralLanguage>
|
<NeutralLanguage>en-US</NeutralLanguage>
|
||||||
<Description>Provides advanced unified lighting across many different brands RGB peripherals</Description>
|
<Description>Provides advanced unified lighting across many different brands RGB peripherals</Description>
|
||||||
<Copyright>Copyright © Robert Beekman - 2021</Copyright>
|
<Copyright>Copyright © Robert Beekman - 2021</Copyright>
|
||||||
<FileVersion>2.0.0.0</FileVersion>
|
<FileVersion>2.0.0.0</FileVersion>
|
||||||
<OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
|
<OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
|
||||||
<UseWPF>true</UseWPF>
|
<UseWPF>true</UseWPF>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
<SupportedPlatform>windows</SupportedPlatform>
|
<SupportedPlatform>windows</SupportedPlatform>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ApplicationIcon>Resources\Images\Logo\logo-512.ico</ApplicationIcon>
|
<ApplicationIcon>Resources\Images\Logo\logo-512.ico</ApplicationIcon>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent />
|
<PostBuildEvent />
|
||||||
<AssemblyVersion>2.0.0.0</AssemblyVersion>
|
<AssemblyVersion>2.0.0.0</AssemblyVersion>
|
||||||
<Version>2.0.0</Version>
|
<Version>2.0.0</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<NrtRevisionFormat>2.0-{chash:6}</NrtRevisionFormat>
|
<NrtRevisionFormat>2.0-{chash:6}</NrtRevisionFormat>
|
||||||
<NrtResolveSimpleAttributes>true</NrtResolveSimpleAttributes>
|
<NrtResolveSimpleAttributes>true</NrtResolveSimpleAttributes>
|
||||||
<NrtResolveInformationalAttribute>true</NrtResolveInformationalAttribute>
|
<NrtResolveInformationalAttribute>true</NrtResolveInformationalAttribute>
|
||||||
<NrtResolveCopyright>true</NrtResolveCopyright>
|
<NrtResolveCopyright>true</NrtResolveCopyright>
|
||||||
<NrtTagMatch>v[0-9]*</NrtTagMatch>
|
<NrtTagMatch>v[0-9]*</NrtTagMatch>
|
||||||
<NrtRemoveTagV>true</NrtRemoveTagV>
|
<NrtRemoveTagV>true</NrtRemoveTagV>
|
||||||
<NrtRequiredVcs>git</NrtRequiredVcs>
|
<NrtRequiredVcs>git</NrtRequiredVcs>
|
||||||
<NrtShowRevision>true</NrtShowRevision>
|
<NrtShowRevision>true</NrtShowRevision>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Target Name="SkiaCleanUpAfterBuild" AfterTargets="AfterBuild">
|
<Target Name="SkiaCleanUpAfterBuild" AfterTargets="AfterBuild">
|
||||||
<Delete Files="$(OutputPath)\libSkiaSharp.dylib" />
|
<Delete Files="$(OutputPath)\libSkiaSharp.dylib" />
|
||||||
</Target>
|
</Target>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<FluentValidationExcludedCultures Include="ar-DZ;cs;cs-CZ;da;de;es;fa;fi;fr;fr-FR;it;ko;mk;nl;pl;pt;pt-BR;ru;ru-ru;sv;tr;zh-CN;uz-Latn-UZ">
|
<FluentValidationExcludedCultures Include="ar-DZ;cs;cs-CZ;da;de;es;fa;fi;fr;fr-FR;it;ko;mk;nl;pl;pt;pt-BR;ru;ru-ru;sv;tr;zh-CN;uz-Latn-UZ">
|
||||||
<InProject>false</InProject>
|
<InProject>false</InProject>
|
||||||
</FluentValidationExcludedCultures>
|
</FluentValidationExcludedCultures>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Target Name="RemoveTranslationsAfterBuild" AfterTargets="AfterBuild">
|
<Target Name="RemoveTranslationsAfterBuild" AfterTargets="AfterBuild">
|
||||||
<RemoveDir Directories="@(FluentValidationExcludedCultures->'$(OutputPath)%(Filename)')" />
|
<RemoveDir Directories="@(FluentValidationExcludedCultures->'$(OutputPath)%(Filename)')" />
|
||||||
</Target>
|
</Target>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Remove="publish\**" />
|
<Compile Remove="publish\**" />
|
||||||
<EmbeddedResource Remove="publish\**" />
|
<EmbeddedResource Remove="publish\**" />
|
||||||
<None Remove="publish\**" />
|
<None Remove="publish\**" />
|
||||||
<Page Remove="publish\**" />
|
<Page Remove="publish\**" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<!-- TODO: Remove when moving to Nuget, this is so the plugin templates have the DLL to reference -->
|
<!-- TODO: Remove when moving to Nuget, this is so the plugin templates have the DLL to reference -->
|
||||||
<Reference Include="RGB.NET.Brushes">
|
<Reference Include="RGB.NET.Core">
|
||||||
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Brushes.dll</HintPath>
|
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Core.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="RGB.NET.Core">
|
<Reference Include="RGB.NET.Layout">
|
||||||
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Core.dll</HintPath>
|
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Layout.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="RGB.NET.Groups">
|
<Reference Include="System.Management" />
|
||||||
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Groups.dll</HintPath>
|
</ItemGroup>
|
||||||
</Reference>
|
<ItemGroup>
|
||||||
<Reference Include="RGB.NET.Layout">
|
<EmbeddedResource Update="Properties\Resources.resx">
|
||||||
<HintPath>..\..\..\RGB.NET\bin\net5.0\RGB.NET.Layout.dll</HintPath>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
</Reference>
|
<SubType>Designer</SubType>
|
||||||
<Reference Include="System.Management" />
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
</ItemGroup>
|
</EmbeddedResource>
|
||||||
<ItemGroup>
|
</ItemGroup>
|
||||||
<EmbeddedResource Update="Properties\Resources.resx">
|
<ItemGroup>
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<ProjectReference Include="..\Artemis.Core\Artemis.Core.csproj">
|
||||||
<SubType>Designer</SubType>
|
<Private>true</Private>
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
</ProjectReference>
|
||||||
</EmbeddedResource>
|
<ProjectReference Include="..\Artemis.Storage\Artemis.Storage.csproj">
|
||||||
</ItemGroup>
|
<Private>true</Private>
|
||||||
<ItemGroup>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\Artemis.Core\Artemis.Core.csproj">
|
<ProjectReference Include="..\Artemis.UI.Shared\Artemis.UI.Shared.csproj">
|
||||||
<Private>true</Private>
|
<Private>true</Private>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\Artemis.Storage\Artemis.Storage.csproj">
|
</ItemGroup>
|
||||||
<Private>true</Private>
|
<ItemGroup>
|
||||||
</ProjectReference>
|
<Resource Include="Resources\Fonts\RobotoMono-Regular.ttf" />
|
||||||
<ProjectReference Include="..\Artemis.UI.Shared\Artemis.UI.Shared.csproj">
|
<Resource Include="Resources\Images\Logo\bow.svg" />
|
||||||
<Private>true</Private>
|
<Resource Include="Resources\Images\Logo\logo-512.ico" />
|
||||||
</ProjectReference>
|
<Resource Include="Resources\Images\Logo\logo-512.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Fonts\RobotoMono-Regular.ttf" />
|
<Resource Include="Resources\Cursors\aero_rotate_tl.cur" />
|
||||||
<Resource Include="Resources\Images\Logo\bow.svg" />
|
</ItemGroup>
|
||||||
<Resource Include="Resources\Images\Logo\logo-512.ico" />
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Images\Logo\logo-512.png" />
|
<Resource Include="Resources\Cursors\aero_rotate_tr.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_rotate_tl.cur" />
|
<Resource Include="Resources\Cursors\aero_rotate_bl.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_rotate_tr.cur" />
|
<Resource Include="Resources\Cursors\aero_rotate_br.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_rotate_bl.cur" />
|
<Resource Include="Resources\Cursors\aero_crosshair.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_rotate_br.cur" />
|
<Resource Include="Resources\Cursors\aero_crosshair_minus.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_crosshair.cur" />
|
<Resource Include="Resources\Cursors\aero_crosshair_plus.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_crosshair_minus.cur" />
|
<Resource Include="Resources\Cursors\aero_pen_min.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_crosshair_plus.cur" />
|
<Resource Include="Resources\Cursors\aero_pen_plus.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_pen_min.cur" />
|
<Resource Include="Resources\Cursors\aero_fill.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_pen_plus.cur" />
|
<Resource Include="Resources\Cursors\aero_drag.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_fill.cur" />
|
<Resource Include="Resources\Cursors\aero_drag_ew.cur" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_drag.cur" />
|
<Resource Include="Resources\Cursors\aero_rotate.cur" />
|
||||||
</ItemGroup>
|
<Resource Include="Resources\Images\Sidebar\sidebar-header.png" />
|
||||||
<ItemGroup>
|
</ItemGroup>
|
||||||
<Resource Include="Resources\Cursors\aero_drag_ew.cur" />
|
<ItemGroup>
|
||||||
</ItemGroup>
|
<PackageReference Include="FluentValidation" Version="9.3.0" />
|
||||||
<ItemGroup>
|
<PackageReference Include="Flurl.Http" Version="3.0.1" />
|
||||||
<Resource Include="Resources\Cursors\aero_rotate.cur" />
|
<PackageReference Include="gong-wpf-dragdrop" Version="2.3.2" />
|
||||||
<Resource Include="Resources\Images\Sidebar\sidebar-header.png" />
|
<PackageReference Include="Hardcodet.NotifyIcon.Wpf.NetCore" Version="1.0.14" />
|
||||||
</ItemGroup>
|
<PackageReference Include="Humanizer.Core" Version="2.8.26" />
|
||||||
<ItemGroup>
|
<PackageReference Include="MaterialDesignExtensions" Version="3.3.0-a01" />
|
||||||
<PackageReference Include="FluentValidation" Version="9.3.0" />
|
<PackageReference Include="MaterialDesignThemes" Version="3.2.0" />
|
||||||
<PackageReference Include="Flurl.Http" Version="3.0.1" />
|
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||||
<PackageReference Include="gong-wpf-dragdrop" Version="2.3.2" />
|
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.19" />
|
||||||
<PackageReference Include="Hardcodet.NotifyIcon.Wpf.NetCore" Version="1.0.14" />
|
<PackageReference Include="Ninject" Version="3.3.4" />
|
||||||
<PackageReference Include="Humanizer.Core" Version="2.8.26" />
|
<PackageReference Include="Ninject.Extensions.Conventions" Version="3.3.0" />
|
||||||
<PackageReference Include="MaterialDesignExtensions" Version="3.3.0-a01" />
|
<PackageReference Include="Ookii.Dialogs.Wpf" Version="3.1.0" />
|
||||||
<PackageReference Include="MaterialDesignThemes" Version="3.2.0" />
|
<PackageReference Include="RawInput.Sharp" Version="0.0.3" />
|
||||||
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
<PackageReference Include="Serilog" Version="2.10.0" />
|
||||||
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.19" />
|
<PackageReference Include="SkiaSharp.Views.WPF" Version="2.80.2" />
|
||||||
<PackageReference Include="Ninject" Version="3.3.4" />
|
<PackageReference Include="Stylet" Version="1.3.5" />
|
||||||
<PackageReference Include="Ninject.Extensions.Conventions" Version="3.3.0" />
|
<PackageReference Include="System.Buffers" Version="4.5.1" />
|
||||||
<PackageReference Include="Ookii.Dialogs.Wpf" Version="3.1.0" />
|
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||||
<PackageReference Include="RawInput.Sharp" Version="0.0.3" />
|
<PackageReference Include="System.Drawing.Common" Version="5.0.0" />
|
||||||
<PackageReference Include="Serilog" Version="2.10.0" />
|
<PackageReference Include="System.Management" Version="5.0.0" />
|
||||||
<PackageReference Include="SkiaSharp.Views.WPF" Version="2.80.2" />
|
<PackageReference Include="System.Numerics.Vectors" Version="4.5.0" />
|
||||||
<PackageReference Include="Stylet" Version="1.3.5" />
|
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||||
<PackageReference Include="System.Buffers" Version="4.5.1" />
|
<PackageReference Include="Unclassified.NetRevisionTask" Version="0.3.0">
|
||||||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<PackageReference Include="System.Drawing.Common" Version="5.0.0" />
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
<PackageReference Include="System.Management" Version="5.0.0" />
|
</PackageReference>
|
||||||
<PackageReference Include="System.Numerics.Vectors" Version="4.5.0" />
|
</ItemGroup>
|
||||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
<ItemGroup>
|
||||||
<PackageReference Include="Unclassified.NetRevisionTask" Version="0.3.0">
|
<Compile Remove="obj\x64\Debug\App.g.cs" />
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<Compile Remove="obj\x64\Debug\App.g.i.cs" />
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<Compile Remove="obj\x64\Debug\GeneratedInternalTypeHelper.g.cs" />
|
||||||
</PackageReference>
|
<Compile Remove="obj\x64\Debug\GeneratedInternalTypeHelper.g.i.cs" />
|
||||||
</ItemGroup>
|
<Compile Remove="obj\x64\Release\App.g.cs" />
|
||||||
<ItemGroup>
|
<Compile Remove="obj\x64\Release\GeneratedInternalTypeHelper.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\App.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\RootView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\App.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\RootView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\GeneratedInternalTypeHelper.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\RootView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\GeneratedInternalTypeHelper.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Dialogs\ConfirmDialogView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\App.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Dialogs\ConfirmDialogView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Release\GeneratedInternalTypeHelper.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\GradientEditor\GradientEditorView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\RootView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\GradientEditor\GradientEditorView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\RootView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Home\HomeView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\RootView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Home\HomeView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Dialogs\ConfirmDialogView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ModuleRootView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Dialogs\ConfirmDialogView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ModuleRootView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\GradientEditor\GradientEditorView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\News\NewsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\GradientEditor\GradientEditorView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\News\NewsView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Home\HomeView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Settings\SettingsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Home\HomeView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Settings\SettingsView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ModuleRootView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Sidebar\SidebarView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ModuleRootView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Sidebar\SidebarView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\News\NewsView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Splash\SplashView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\News\NewsView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Splash\SplashView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Settings\SettingsView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\SurfaceEditorView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Settings\SettingsView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\SurfaceEditorView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Sidebar\SidebarView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Workshop\WorkshopView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Sidebar\SidebarView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Workshop\WorkshopView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Splash\SplashView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Dialogs\ConfirmDialogView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Splash\SplashView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Home\HomeView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\SurfaceEditorView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ModuleRootView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\SurfaceEditorView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\News\NewsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Workshop\WorkshopView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Settings\SettingsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Workshop\WorkshopView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Splash\SplashView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Dialogs\ConfirmDialogView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Workshop\WorkshopView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Home\HomeView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileEditorView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ModuleRootView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileEditorView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\News\NewsView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Settings\Debug\DebugView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Settings\SettingsView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Settings\Debug\DebugView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Splash\SplashView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Dialogs\SurfaceCreateView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Workshop\WorkshopView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Dialogs\SurfaceCreateView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileEditorView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Dialogs\SurfaceDeviceConfigView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileEditorView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Dialogs\SurfaceDeviceConfigView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Settings\Debug\DebugView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Visualization\SurfaceDeviceView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Settings\Debug\DebugView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Visualization\SurfaceDeviceView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Dialogs\SurfaceCreateView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Visualization\SurfaceLedView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Dialogs\SurfaceCreateView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Visualization\SurfaceLedView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Dialogs\SurfaceDeviceConfigView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\ProfileEditorView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Dialogs\SurfaceDeviceConfigView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Settings\Debug\DebugView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Visualization\SurfaceDeviceView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\SurfaceEditor\Dialogs\SurfaceCreateView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Visualization\SurfaceDeviceView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\SurfaceEditor\Dialogs\SurfaceDeviceConfigView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Visualization\SurfaceLedView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\SurfaceEditor\Visualization\SurfaceDeviceView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\SurfaceEditor\Visualization\SurfaceLedView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\SurfaceEditor\Visualization\SurfaceLedView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\ProfileEditorView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Dialogs\ProfileCreateView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Settings\Debug\DebugView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Dialogs\ProfileCreateView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\SurfaceEditor\Dialogs\SurfaceCreateView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Dialogs\ProfileElementRenameView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\SurfaceEditor\Dialogs\SurfaceDeviceConfigView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Dialogs\ProfileElementRenameView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\SurfaceEditor\Visualization\SurfaceDeviceView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\SurfaceEditor\Visualization\SurfaceLedView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionsView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Dialogs\ProfileCreateView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Dialogs\ProfileCreateView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Dialogs\ProfileElementRenameView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ElementProperties\ElementPropertiesView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Dialogs\ProfileElementRenameView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ElementProperties\ElementPropertyView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionsView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerElements\LayerElementsView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionsView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerElements\LayerElementView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\LayerPropertiesView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\LayerPropertiesView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ElementProperties\ElementPropertiesView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Layers\LayersView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ElementProperties\ElementPropertyView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\ProfileTreeView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerElements\LayerElementsView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\ProfileTreeView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerElements\LayerElementView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileDeviceView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\LayerPropertiesView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileDeviceView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\LayerPropertiesView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileLayerView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Layers\LayersView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileLayerView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\ProfileTreeView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileLedView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\ProfileTreeView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileLedView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileDeviceView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileDeviceView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileLayerView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Settings\Tabs\Devices\DeviceSettingsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileLayerView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Settings\Tabs\Devices\DeviceSettingsView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileLedView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Dialogs\ProfileCreateView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileLedView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\ProfileView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\ElementProperties\ElementPropertiesView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Settings\Tabs\Devices\DeviceSettingsView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\ElementProperties\ElementPropertyView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Settings\Tabs\Devices\DeviceSettingsView.g.i.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\LayerElements\LayerElementsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Dialogs\ProfileCreateView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\LayerElements\LayerElementView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionsView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Layers\LayersView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\DataModelConditions\DataModelConditionView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Visualization\ProfileDeviceView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\ElementProperties\ElementPropertiesView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Visualization\ProfileLedView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\ElementProperties\ElementPropertyView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Visualization\ProfileView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\LayerElements\LayerElementsView.g.cs" />
|
<Compile Remove="obj\x64\Release\Screens\Settings\Tabs\Devices\DeviceSettingsView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\LayerElements\LayerElementView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerElements\Dialogs\AddLayerElementView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Layers\LayersView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeChildView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Visualization\ProfileDeviceView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeChildView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Visualization\ProfileLedView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeItemView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Module\ProfileEditor\Visualization\ProfileView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Release\Screens\Settings\Tabs\Devices\DeviceSettingsView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerElements\Dialogs\AddLayerElementView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\LayerPropertiesTimelineView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeChildView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyRailItemView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeChildView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyTimelineView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeItemView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyTimelineView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyTrackView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyTreeView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyTrackView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\LayerPropertiesTimelineView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelineKeyframeView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyRailItemView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelinePartView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyTimelineView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelinePropertyRailView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyTimelineView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelinePropertyView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyTrackView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelineTimeView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\PropertyTrackView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\TreeItem\FolderView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelineKeyframeView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\TreeItem\FolderView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelinePartView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\TreeItem\LayerView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelinePropertyRailView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\TreeItem\LayerView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelinePropertyView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\EditToolView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\Timeline\TimelineTimeView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\EditToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\TreeItem\FolderView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\EllipseToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\TreeItem\FolderView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\FillToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\TreeItem\LayerView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\PolygonToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\ProfileTree\TreeItem\LayerView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\RectangleToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\EditToolView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionAddToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\EditToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionRemoveToolView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\EllipseToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionRemoveToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\FillToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionToolView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\PolygonToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\RectangleToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\ViewpointMoveToolView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionAddToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\ViewpointMoveToolView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionRemoveToolView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\UserControls\LayerShapeControl.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionRemoveToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\UserControls\LayerShapeControl.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionToolView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\BrushPropertyInputView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\SelectionToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\BrushPropertyInputView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\ViewpointMoveToolView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\EnumPropertyInputView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\Tools\ViewpointMoveToolView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\EnumPropertyInputView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\UserControls\LayerShapeControl.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\FloatPropertyInputView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\Visualization\UserControls\LayerShapeControl.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\FloatPropertyInputView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\BrushPropertyInputView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\IntPropertyInputView - Copy.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\BrushPropertyInputView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\IntPropertyInputView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\EnumPropertyInputView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\IntPropertyInputView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\EnumPropertyInputView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKColorPropertyInputView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\FloatPropertyInputView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKColorPropertyInputView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\FloatPropertyInputView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKPointPropertyInputView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\IntPropertyInputView - Copy.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKPointPropertyInputView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\IntPropertyInputView.g.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKSizePropertyInputView.g.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\IntPropertyInputView.g.i.cs" />
|
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKSizePropertyInputView.g.i.cs" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKColorPropertyInputView.g.cs" />
|
</ItemGroup>
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKColorPropertyInputView.g.i.cs" />
|
<ItemGroup>
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKPointPropertyInputView.g.cs" />
|
<None Remove="Resources\Fonts\RobotoMono-Regular.ttf" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKPointPropertyInputView.g.i.cs" />
|
<None Remove="Resources\Images\Logo\bow.svg" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKSizePropertyInputView.g.cs" />
|
<None Remove="Resources\Images\Logo\logo-512.ico" />
|
||||||
<Compile Remove="obj\x64\Debug\Screens\Module\ProfileEditor\LayerProperties\PropertyTree\PropertyInput\SKSizePropertyInputView.g.i.cs" />
|
<None Remove="Resources\Images\Sidebar\sidebar-header.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="Resources\Fonts\RobotoMono-Regular.ttf" />
|
<None Include="..\.editorconfig" Link=".editorconfig" />
|
||||||
<None Remove="Resources\Images\Logo\bow.svg" />
|
</ItemGroup>
|
||||||
<None Remove="Resources\Images\Logo\logo-512.ico" />
|
<ItemGroup>
|
||||||
<None Remove="Resources\Images\Sidebar\sidebar-header.png" />
|
<Compile Update="Properties\Resources.Designer.cs">
|
||||||
</ItemGroup>
|
<DesignTime>True</DesignTime>
|
||||||
<ItemGroup>
|
<AutoGen>True</AutoGen>
|
||||||
<None Include="..\.editorconfig" Link=".editorconfig" />
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
</ItemGroup>
|
</Compile>
|
||||||
<ItemGroup>
|
<Compile Update="Properties\Settings.Designer.cs">
|
||||||
<Compile Update="Properties\Resources.Designer.cs">
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
<DesignTime>True</DesignTime>
|
<AutoGen>True</AutoGen>
|
||||||
<AutoGen>True</AutoGen>
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
</Compile>
|
||||||
</Compile>
|
</ItemGroup>
|
||||||
<Compile Update="Properties\Settings.Designer.cs">
|
<ItemGroup>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<None Update="buildinfo.json">
|
||||||
<AutoGen>True</AutoGen>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
<DependentUpon>Settings.settings</DependentUpon>
|
</None>
|
||||||
</Compile>
|
<None Update="Properties\Settings.settings">
|
||||||
</ItemGroup>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
<ItemGroup>
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
<None Update="buildinfo.json">
|
</None>
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
</ItemGroup>
|
||||||
</None>
|
<ItemGroup>
|
||||||
<None Update="Properties\Settings.settings">
|
<Page Update="DefaultTypes\DataModel\Display\SKColorDataModelDisplayView.xaml">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<SubType>Designer</SubType>
|
||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
</Page>
|
||||||
</None>
|
<Page Update="DefaultTypes\DataModel\Input\DoubleDataModelInputView.xaml">
|
||||||
</ItemGroup>
|
<SubType>Designer</SubType>
|
||||||
<ItemGroup>
|
</Page>
|
||||||
<Page Update="DefaultTypes\DataModel\Display\SKColorDataModelDisplayView.xaml">
|
<Page Update="DefaultTypes\DataModel\Input\IntDataModelInputView.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Update="DefaultTypes\DataModel\Input\DoubleDataModelInputView.xaml">
|
<Page Update="DefaultTypes\DataModel\Input\SKColorDataModelInputView.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Update="DefaultTypes\DataModel\Input\IntDataModelInputView.xaml">
|
<Page Update="DefaultTypes\DataModel\Input\StringDataModelInputView.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Update="DefaultTypes\DataModel\Input\SKColorDataModelInputView.xaml">
|
<Page Update="DefaultTypes\PropertyInput\FloatRangePropertyInputView.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Update="DefaultTypes\DataModel\Input\StringDataModelInputView.xaml">
|
<Page Update="Screens\ProfileEditor\Dialogs\ProfileEditView.xaml">
|
||||||
<SubType>Designer</SubType>
|
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Update="DefaultTypes\PropertyInput\FloatRangePropertyInputView.xaml">
|
</ItemGroup>
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</Page>
|
|
||||||
<Page Update="Screens\ProfileEditor\Dialogs\ProfileEditView.xaml">
|
|
||||||
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
|
|
||||||
</Page>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
||||||
@ -52,22 +52,22 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
|
|||||||
{
|
{
|
||||||
Execute.PostToUIThread(() =>
|
Execute.PostToUIThread(() =>
|
||||||
{
|
{
|
||||||
if (e.BitmapBrush?.Bitmap == null || e.BitmapBrush.Bitmap.Pixels.Length == 0)
|
if (e.Texture.Bitmap.Pixels.Length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SKImageInfo bitmapInfo = e.BitmapBrush.Bitmap.Info;
|
SKImageInfo bitmapInfo = e.Texture.Bitmap.Info;
|
||||||
|
|
||||||
if (!(CurrentFrame is WriteableBitmap writeableBitmap) ||
|
if (!(CurrentFrame is WriteableBitmap writeableBitmap) ||
|
||||||
writeableBitmap.Width != bitmapInfo.Width ||
|
writeableBitmap.Width != bitmapInfo.Width ||
|
||||||
writeableBitmap.Height != bitmapInfo.Height)
|
writeableBitmap.Height != bitmapInfo.Height)
|
||||||
{
|
{
|
||||||
CurrentFrame = e.BitmapBrush.Bitmap.ToWriteableBitmap();
|
CurrentFrame = e.Texture.Bitmap.ToWriteableBitmap();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (SKImage skiaImage = SKImage.FromPixels(e.BitmapBrush.Bitmap.PeekPixels()))
|
using (SKImage skiaImage = SKImage.FromPixels(e.Texture.Bitmap.PeekPixels()))
|
||||||
{
|
{
|
||||||
SKImageInfo info = new(skiaImage.Width, skiaImage.Height);
|
SKImageInfo info = new(skiaImage.Width, skiaImage.Height);
|
||||||
writeableBitmap.Lock();
|
writeableBitmap.Lock();
|
||||||
|
|||||||
@ -17,16 +17,16 @@ namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
|||||||
private readonly ICoreService _coreService;
|
private readonly ICoreService _coreService;
|
||||||
private readonly IRgbService _rgbService;
|
private readonly IRgbService _rgbService;
|
||||||
private readonly IMessageService _messageService;
|
private readonly IMessageService _messageService;
|
||||||
private readonly double _initialRedScale;
|
private readonly float _initialRedScale;
|
||||||
private readonly double _initialGreenScale;
|
private readonly float _initialGreenScale;
|
||||||
private readonly double _initialBlueScale;
|
private readonly float _initialBlueScale;
|
||||||
private int _rotation;
|
private int _rotation;
|
||||||
private double _scale;
|
private float _scale;
|
||||||
private int _x;
|
private int _x;
|
||||||
private int _y;
|
private int _y;
|
||||||
private double _redScale;
|
private float _redScale;
|
||||||
private double _greenScale;
|
private float _greenScale;
|
||||||
private double _blueScale;
|
private float _blueScale;
|
||||||
private SKColor _currentColor;
|
private SKColor _currentColor;
|
||||||
private bool _displayOnDevices;
|
private bool _displayOnDevices;
|
||||||
|
|
||||||
@ -46,9 +46,9 @@ namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
|||||||
Y = (int) Device.Y;
|
Y = (int) Device.Y;
|
||||||
Scale = Device.Scale;
|
Scale = Device.Scale;
|
||||||
Rotation = (int) Device.Rotation;
|
Rotation = (int) Device.Rotation;
|
||||||
RedScale = Device.RedScale * 100d;
|
RedScale = Device.RedScale * 100f;
|
||||||
GreenScale = Device.GreenScale * 100d;
|
GreenScale = Device.GreenScale * 100f;
|
||||||
BlueScale = Device.BlueScale * 100d;
|
BlueScale = Device.BlueScale * 100f;
|
||||||
//we need to store the initial values to be able to restore them when the user clicks "Cancel"
|
//we need to store the initial values to be able to restore them when the user clicks "Cancel"
|
||||||
_initialRedScale = Device.RedScale;
|
_initialRedScale = Device.RedScale;
|
||||||
_initialGreenScale = Device.GreenScale;
|
_initialGreenScale = Device.GreenScale;
|
||||||
@ -79,7 +79,7 @@ namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
|||||||
set => SetAndNotify(ref _y, value);
|
set => SetAndNotify(ref _y, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double Scale
|
public float Scale
|
||||||
{
|
{
|
||||||
get => _scale;
|
get => _scale;
|
||||||
set => SetAndNotify(ref _scale, value);
|
set => SetAndNotify(ref _scale, value);
|
||||||
@ -91,19 +91,19 @@ namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
|||||||
set => SetAndNotify(ref _rotation, value);
|
set => SetAndNotify(ref _rotation, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double RedScale
|
public float RedScale
|
||||||
{
|
{
|
||||||
get => _redScale;
|
get => _redScale;
|
||||||
set => SetAndNotify(ref _redScale, value);
|
set => SetAndNotify(ref _redScale, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double GreenScale
|
public float GreenScale
|
||||||
{
|
{
|
||||||
get => _greenScale;
|
get => _greenScale;
|
||||||
set => SetAndNotify(ref _greenScale, value);
|
set => SetAndNotify(ref _greenScale, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double BlueScale
|
public float BlueScale
|
||||||
{
|
{
|
||||||
get => _blueScale;
|
get => _blueScale;
|
||||||
set => SetAndNotify(ref _blueScale, value);
|
set => SetAndNotify(ref _blueScale, value);
|
||||||
@ -134,9 +134,9 @@ namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
|||||||
Device.Y = Y;
|
Device.Y = Y;
|
||||||
Device.Scale = Scale;
|
Device.Scale = Scale;
|
||||||
Device.Rotation = Rotation;
|
Device.Rotation = Rotation;
|
||||||
Device.RedScale = RedScale / 100d;
|
Device.RedScale = RedScale / 100f;
|
||||||
Device.GreenScale = GreenScale / 100d;
|
Device.GreenScale = GreenScale / 100f;
|
||||||
Device.BlueScale = BlueScale / 100d;
|
Device.BlueScale = BlueScale / 100f;
|
||||||
|
|
||||||
_coreService.ModuleRenderingDisabled = false;
|
_coreService.ModuleRenderingDisabled = false;
|
||||||
Session.Close(true);
|
Session.Close(true);
|
||||||
@ -144,9 +144,9 @@ namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
|||||||
|
|
||||||
public void ApplyScaling()
|
public void ApplyScaling()
|
||||||
{
|
{
|
||||||
Device.RedScale = RedScale / 100d;
|
Device.RedScale = RedScale / 100f;
|
||||||
Device.GreenScale = GreenScale / 100d;
|
Device.GreenScale = GreenScale / 100f;
|
||||||
Device.BlueScale = BlueScale / 100d;
|
Device.BlueScale = BlueScale / 100f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BrowseCustomLayout(object sender, MouseEventArgs e)
|
public void BrowseCustomLayout(object sender, MouseEventArgs e)
|
||||||
|
|||||||
@ -10,7 +10,7 @@ namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
|||||||
|
|
||||||
RuleFor(m => m.Y).GreaterThanOrEqualTo(0).WithMessage("Y-coordinate must be 0 or greater");
|
RuleFor(m => m.Y).GreaterThanOrEqualTo(0).WithMessage("Y-coordinate must be 0 or greater");
|
||||||
|
|
||||||
RuleFor(m => m.Scale).GreaterThanOrEqualTo(0.2).WithMessage("Scale must be 0.2 or greater");
|
RuleFor(m => m.Scale).GreaterThanOrEqualTo(0.2f).WithMessage("Scale must be 0.2 or greater");
|
||||||
|
|
||||||
RuleFor(m => m.Rotation).GreaterThanOrEqualTo(0).WithMessage("Rotation must be 0 or greater");
|
RuleFor(m => m.Rotation).GreaterThanOrEqualTo(0).WithMessage("Rotation must be 0 or greater");
|
||||||
RuleFor(m => m.Rotation).LessThanOrEqualTo(359).WithMessage("Rotation must be 359 or less");
|
RuleFor(m => m.Rotation).LessThanOrEqualTo(359).WithMessage("Rotation must be 359 or less");
|
||||||
|
|||||||
@ -4,9 +4,7 @@ using Artemis.Core;
|
|||||||
using Artemis.Core.Services;
|
using Artemis.Core.Services;
|
||||||
using Artemis.UI.Shared.Services;
|
using Artemis.UI.Shared.Services;
|
||||||
using MaterialDesignThemes.Wpf;
|
using MaterialDesignThemes.Wpf;
|
||||||
using RGB.NET.Brushes;
|
|
||||||
using RGB.NET.Core;
|
using RGB.NET.Core;
|
||||||
using RGB.NET.Groups;
|
|
||||||
|
|
||||||
namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
namespace Artemis.UI.Screens.SurfaceEditor.Dialogs
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user