1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-12 21:38:38 +00:00

Surface arrangement - Tweaked code

This commit is contained in:
SpoinkyNL 2020-12-07 23:56:45 +01:00
parent 220222d102
commit c5530cac12
3 changed files with 65 additions and 63 deletions

View File

@ -9,82 +9,80 @@ namespace Artemis.Core.Services.Models
public SurfaceArrangement()
{
Types = new List<SurfaceArrangementType>();
ArrangedDevices = new List<ArtemisDevice>();
}
public List<SurfaceArrangementType> Types { get; }
public List<ArtemisDevice> ArrangedDevices { get; }
internal static SurfaceArrangement GetDefaultArrangement()
{
SurfaceArrangement arrangement = new SurfaceArrangement();
SurfaceArrangementType keypad = new SurfaceArrangementType(RGBDeviceType.Keypad);
keypad.Configurations.Add(new SurfaceArrangementConfiguration(null, HorizontalArrangementPosition.Equal, VerticalArrangementPosition.Equal, 20));
arrangement.Types.Add(keypad);
SurfaceArrangementType keypad = arrangement.AddType(RGBDeviceType.Keypad, 1);
keypad.AddConfiguration(new SurfaceArrangementConfiguration(null, HorizontalArrangementPosition.Equal, VerticalArrangementPosition.Equal, 20));
SurfaceArrangementType keyboard = new SurfaceArrangementType(RGBDeviceType.Keyboard);
keyboard.Configurations.Add(new SurfaceArrangementConfiguration(keypad, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 20));
arrangement.Types.Add(keyboard);
SurfaceArrangementType keyboard = arrangement.AddType(RGBDeviceType.Keyboard, 1);
keyboard.AddConfiguration(new SurfaceArrangementConfiguration(keypad, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 20));
SurfaceArrangementType mousepad = new SurfaceArrangementType(RGBDeviceType.Mousepad);
mousepad.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 10));
arrangement.Types.Add(mousepad);
SurfaceArrangementType mousepad = arrangement.AddType(RGBDeviceType.Mousepad, 1);
mousepad.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 10));
SurfaceArrangementType mouse = new SurfaceArrangementType(RGBDeviceType.Mouse);
mouse.Configurations.Add(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
mouse.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Center, 100));
arrangement.Types.Add(mouse);
SurfaceArrangementType mouse = arrangement.AddType(RGBDeviceType.Mouse, 2);
mouse.AddConfiguration(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
mouse.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Center, 100));
SurfaceArrangementType headset = new SurfaceArrangementType(RGBDeviceType.Headset);
headset.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Bottom, 100));
arrangement.Types.Add(headset);
SurfaceArrangementType headset = arrangement.AddType(RGBDeviceType.Headset, 1);
headset.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Bottom, 100));
SurfaceArrangementType headsetStand = new SurfaceArrangementType(RGBDeviceType.HeadsetStand);
headsetStand.Configurations.Add(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Top, 100));
headsetStand.Configurations.Add(new SurfaceArrangementConfiguration(mouse, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Top, 100));
headsetStand.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Top, 100));
arrangement.Types.Add(headsetStand);
SurfaceArrangementType headsetStand = arrangement.AddType(RGBDeviceType.HeadsetStand, 1);
headsetStand.AddConfiguration(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Top, 100));
headsetStand.AddConfiguration(new SurfaceArrangementConfiguration(mouse, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Top, 100));
headsetStand.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Top, 100));
SurfaceArrangementType mainboard = new SurfaceArrangementType(RGBDeviceType.Mainboard);
mainboard.Configurations.Add(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
mainboard.Configurations.Add(new SurfaceArrangementConfiguration(mouse, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
mainboard.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
arrangement.Types.Add(mainboard);
SurfaceArrangementType mainboard = arrangement.AddType(RGBDeviceType.Mainboard, 1);
mainboard.AddConfiguration(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
mainboard.AddConfiguration(new SurfaceArrangementConfiguration(mouse, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
mainboard.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
SurfaceArrangementType cooler = new SurfaceArrangementType(RGBDeviceType.Cooler);
cooler.Configurations.Add(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
arrangement.Types.Add(cooler);
SurfaceArrangementType cooler = arrangement.AddType(RGBDeviceType.Cooler, 2);
cooler.AddConfiguration(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
SurfaceArrangementType dram = new SurfaceArrangementType(RGBDeviceType.DRAM);
dram.Configurations.Add(new SurfaceArrangementConfiguration(cooler, HorizontalArrangementPosition.Left, VerticalArrangementPosition.Equal, 10));
dram.Configurations.Add(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
arrangement.Types.Add(dram);
SurfaceArrangementType dram = arrangement.AddType(RGBDeviceType.DRAM, 2);
dram.AddConfiguration(new SurfaceArrangementConfiguration(cooler, HorizontalArrangementPosition.Left, VerticalArrangementPosition.Equal, 10));
dram.AddConfiguration(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
SurfaceArrangementType graphicsCard = new SurfaceArrangementType(RGBDeviceType.GraphicsCard);
graphicsCard.Configurations.Add(new SurfaceArrangementConfiguration(cooler, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 10));
graphicsCard.Configurations.Add(new SurfaceArrangementConfiguration(dram, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 10));
graphicsCard.Configurations.Add(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
arrangement.Types.Add(graphicsCard);
SurfaceArrangementType graphicsCard = arrangement.AddType(RGBDeviceType.GraphicsCard, 2);
graphicsCard.AddConfiguration(new SurfaceArrangementConfiguration(cooler, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 10));
graphicsCard.AddConfiguration(new SurfaceArrangementConfiguration(dram, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 10));
graphicsCard.AddConfiguration(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
SurfaceArrangementType fan = new SurfaceArrangementType(RGBDeviceType.Fan);
fan.Configurations.Add(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 100));
arrangement.Types.Add(fan);
SurfaceArrangementType fan = arrangement.AddType(RGBDeviceType.Fan, 2);
fan.AddConfiguration(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 100));
SurfaceArrangementType ledStripe = new SurfaceArrangementType(RGBDeviceType.LedStripe);
ledStripe.Configurations.Add(new SurfaceArrangementConfiguration(fan, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 100));
arrangement.Types.Add(ledStripe);
SurfaceArrangementType ledStripe = arrangement.AddType(RGBDeviceType.LedStripe, 2);
ledStripe.AddConfiguration(new SurfaceArrangementConfiguration(fan, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 100));
SurfaceArrangementType speaker = new SurfaceArrangementType(RGBDeviceType.Speaker);
arrangement.Types.Add(speaker);
arrangement.AddType(RGBDeviceType.Speaker, 1);
arrangement.AddType(RGBDeviceType.None, 1);
return arrangement;
}
private SurfaceArrangementType AddType(RGBDeviceType type, int zIndex)
{
SurfaceArrangementType surfaceArrangementType = new SurfaceArrangementType(this, type, zIndex);
Types.Add(surfaceArrangementType);
return surfaceArrangementType;
}
public void Arrange(ArtemisSurface surface)
{
ArrangedDevices.Clear();
foreach (ArtemisDevice surfaceDevice in surface.Devices)
{
surfaceDevice.X = 0;
surfaceDevice.X = 0;
surfaceDevice.Y = 0;
surfaceDevice.ApplyToRgbDevice();
}
@ -102,6 +100,7 @@ namespace Artemis.Core.Services.Models
surfaceDevice.ApplyToRgbDevice();
}
}
if (y < 0)
{
foreach (ArtemisDevice surfaceDevice in surface.Devices)

View File

@ -19,18 +19,6 @@ namespace Artemis.Core.Services.Models
MarginBottom = margin;
}
public SurfaceArrangementConfiguration(SurfaceArrangementType? anchor, HorizontalArrangementPosition horizontalPosition, VerticalArrangementPosition verticalPosition,
int marginLeft, int marginTop, int marginRight, int marginBottom)
{
Anchor = anchor;
HorizontalPosition = horizontalPosition;
VerticalPosition = verticalPosition;
MarginLeft = marginLeft;
MarginTop = marginTop;
MarginRight = marginRight;
MarginBottom = marginBottom;
}
public SurfaceArrangementType? Anchor { get; }
public HorizontalArrangementPosition HorizontalPosition { get; }
@ -40,6 +28,7 @@ namespace Artemis.Core.Services.Models
public int MarginTop { get; }
public int MarginRight { get; }
public int MarginBottom { get; }
public SurfaceArrangement SurfaceArrangement { get; set; }
public bool Apply(List<ArtemisDevice> devices, ArtemisSurface surface)
{
@ -48,7 +37,7 @@ namespace Artemis.Core.Services.Models
// Start at the edge of the anchor, if there is no anchor start at any device
Point startPoint = Anchor?.GetEdge(HorizontalPosition, VerticalPosition, surface) ??
new SurfaceArrangementType(RGBDeviceType.All).GetEdge(HorizontalPosition, VerticalPosition, surface);
new SurfaceArrangementType(SurfaceArrangement, RGBDeviceType.All, 1).GetEdge(HorizontalPosition, VerticalPosition, surface);
// Stack multiple devices of the same type vertically if they are wider than they are tall
bool stackVertically = devices.Average(d => d.RgbDevice.Size.Width) >= devices.Average(d => d.RgbDevice.Size.Height);
@ -91,6 +80,8 @@ namespace Artemis.Core.Services.Models
artemisDevice.ApplyToRgbDevice();
previous = artemisDevice;
SurfaceArrangement.ArrangedDevices.Add(artemisDevice);
}
return true;

View File

@ -7,13 +7,17 @@ namespace Artemis.Core.Services.Models
{
internal class SurfaceArrangementType
{
public SurfaceArrangementType(RGBDeviceType deviceType)
public SurfaceArrangementType(SurfaceArrangement surfaceArrangement, RGBDeviceType deviceType, int zIndex)
{
SurfaceArrangement = surfaceArrangement;
DeviceType = deviceType;
ZIndex = zIndex;
Configurations = new List<SurfaceArrangementConfiguration>();
}
public SurfaceArrangement SurfaceArrangement { get; }
public RGBDeviceType DeviceType { get; }
public int ZIndex { get; }
public List<SurfaceArrangementConfiguration> Configurations { get; }
public SurfaceArrangementConfiguration? AppliedConfiguration { get; set; }
@ -35,6 +39,8 @@ namespace Artemis.Core.Services.Models
if (applied)
{
AppliedConfiguration = configuration;
foreach (ArtemisDevice artemisDevice in devices)
artemisDevice.ZIndex = ZIndex;
return;
}
}
@ -45,14 +51,14 @@ namespace Artemis.Core.Services.Models
HorizontalArrangementPosition.Right,
VerticalArrangementPosition.Equal,
10
);
) {SurfaceArrangement = SurfaceArrangement};
fallback.Apply(devices, surface);
AppliedConfiguration = fallback;
}
public Point GetEdge(HorizontalArrangementPosition horizontalPosition, VerticalArrangementPosition verticalPosition, ArtemisSurface surface)
{
List<ArtemisDevice> devices = surface.Devices.Where(d => d.RgbDevice.DeviceInfo.DeviceType == DeviceType || DeviceType == RGBDeviceType.All).ToList();
List<ArtemisDevice> devices = SurfaceArrangement.ArrangedDevices.Where(d => d.RgbDevice.DeviceInfo.DeviceType == DeviceType || DeviceType == RGBDeviceType.All).ToList();
if (!devices.Any())
return new Point();
@ -75,6 +81,12 @@ namespace Artemis.Core.Services.Models
return new Point(x, y);
}
public void AddConfiguration(SurfaceArrangementConfiguration surfaceArrangementConfiguration)
{
surfaceArrangementConfiguration.SurfaceArrangement = SurfaceArrangement;
Configurations.Add(surfaceArrangementConfiguration);
}
}
internal enum HorizontalArrangementPosition