mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Surface arrangement - Tweaked code
This commit is contained in:
parent
220222d102
commit
c5530cac12
@ -9,82 +9,80 @@ namespace Artemis.Core.Services.Models
|
|||||||
public SurfaceArrangement()
|
public SurfaceArrangement()
|
||||||
{
|
{
|
||||||
Types = new List<SurfaceArrangementType>();
|
Types = new List<SurfaceArrangementType>();
|
||||||
|
ArrangedDevices = new List<ArtemisDevice>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SurfaceArrangementType> Types { get; }
|
public List<SurfaceArrangementType> Types { get; }
|
||||||
|
public List<ArtemisDevice> ArrangedDevices { get; }
|
||||||
|
|
||||||
internal static SurfaceArrangement GetDefaultArrangement()
|
internal static SurfaceArrangement GetDefaultArrangement()
|
||||||
{
|
{
|
||||||
SurfaceArrangement arrangement = new SurfaceArrangement();
|
SurfaceArrangement arrangement = new SurfaceArrangement();
|
||||||
|
|
||||||
SurfaceArrangementType keypad = new SurfaceArrangementType(RGBDeviceType.Keypad);
|
SurfaceArrangementType keypad = arrangement.AddType(RGBDeviceType.Keypad, 1);
|
||||||
keypad.Configurations.Add(new SurfaceArrangementConfiguration(null, HorizontalArrangementPosition.Equal, VerticalArrangementPosition.Equal, 20));
|
keypad.AddConfiguration(new SurfaceArrangementConfiguration(null, HorizontalArrangementPosition.Equal, VerticalArrangementPosition.Equal, 20));
|
||||||
arrangement.Types.Add(keypad);
|
|
||||||
|
|
||||||
SurfaceArrangementType keyboard = new SurfaceArrangementType(RGBDeviceType.Keyboard);
|
SurfaceArrangementType keyboard = arrangement.AddType(RGBDeviceType.Keyboard, 1);
|
||||||
keyboard.Configurations.Add(new SurfaceArrangementConfiguration(keypad, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 20));
|
keyboard.AddConfiguration(new SurfaceArrangementConfiguration(keypad, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 20));
|
||||||
arrangement.Types.Add(keyboard);
|
|
||||||
|
|
||||||
SurfaceArrangementType mousepad = new SurfaceArrangementType(RGBDeviceType.Mousepad);
|
SurfaceArrangementType mousepad = arrangement.AddType(RGBDeviceType.Mousepad, 1);
|
||||||
mousepad.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 10));
|
mousepad.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 10));
|
||||||
arrangement.Types.Add(mousepad);
|
|
||||||
|
|
||||||
SurfaceArrangementType mouse = new SurfaceArrangementType(RGBDeviceType.Mouse);
|
SurfaceArrangementType mouse = arrangement.AddType(RGBDeviceType.Mouse, 2);
|
||||||
mouse.Configurations.Add(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
|
mouse.AddConfiguration(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
|
||||||
mouse.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Center, 100));
|
mouse.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Center, 100));
|
||||||
arrangement.Types.Add(mouse);
|
|
||||||
|
|
||||||
SurfaceArrangementType headset = new SurfaceArrangementType(RGBDeviceType.Headset);
|
SurfaceArrangementType headset = arrangement.AddType(RGBDeviceType.Headset, 1);
|
||||||
headset.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Bottom, 100));
|
headset.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Bottom, 100));
|
||||||
arrangement.Types.Add(headset);
|
|
||||||
|
|
||||||
SurfaceArrangementType headsetStand = new SurfaceArrangementType(RGBDeviceType.HeadsetStand);
|
SurfaceArrangementType headsetStand = arrangement.AddType(RGBDeviceType.HeadsetStand, 1);
|
||||||
headsetStand.Configurations.Add(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Top, 100));
|
headsetStand.AddConfiguration(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Top, 100));
|
||||||
headsetStand.Configurations.Add(new SurfaceArrangementConfiguration(mouse, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Top, 100));
|
headsetStand.AddConfiguration(new SurfaceArrangementConfiguration(mouse, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Top, 100));
|
||||||
headsetStand.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Top, 100));
|
headsetStand.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Top, 100));
|
||||||
arrangement.Types.Add(headsetStand);
|
|
||||||
|
|
||||||
SurfaceArrangementType mainboard = new SurfaceArrangementType(RGBDeviceType.Mainboard);
|
SurfaceArrangementType mainboard = arrangement.AddType(RGBDeviceType.Mainboard, 1);
|
||||||
mainboard.Configurations.Add(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
|
mainboard.AddConfiguration(new SurfaceArrangementConfiguration(mousepad, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
|
||||||
mainboard.Configurations.Add(new SurfaceArrangementConfiguration(mouse, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
|
mainboard.AddConfiguration(new SurfaceArrangementConfiguration(mouse, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
|
||||||
mainboard.Configurations.Add(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
|
mainboard.AddConfiguration(new SurfaceArrangementConfiguration(keyboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 500));
|
||||||
arrangement.Types.Add(mainboard);
|
|
||||||
|
|
||||||
SurfaceArrangementType cooler = new SurfaceArrangementType(RGBDeviceType.Cooler);
|
SurfaceArrangementType cooler = arrangement.AddType(RGBDeviceType.Cooler, 2);
|
||||||
cooler.Configurations.Add(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
|
cooler.AddConfiguration(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
|
||||||
arrangement.Types.Add(cooler);
|
|
||||||
|
|
||||||
SurfaceArrangementType dram = new SurfaceArrangementType(RGBDeviceType.DRAM);
|
SurfaceArrangementType dram = arrangement.AddType(RGBDeviceType.DRAM, 2);
|
||||||
dram.Configurations.Add(new SurfaceArrangementConfiguration(cooler, HorizontalArrangementPosition.Left, VerticalArrangementPosition.Equal, 10));
|
dram.AddConfiguration(new SurfaceArrangementConfiguration(cooler, HorizontalArrangementPosition.Left, VerticalArrangementPosition.Equal, 10));
|
||||||
dram.Configurations.Add(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
|
dram.AddConfiguration(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
|
||||||
arrangement.Types.Add(dram);
|
|
||||||
|
|
||||||
SurfaceArrangementType graphicsCard = new SurfaceArrangementType(RGBDeviceType.GraphicsCard);
|
SurfaceArrangementType graphicsCard = arrangement.AddType(RGBDeviceType.GraphicsCard, 2);
|
||||||
graphicsCard.Configurations.Add(new SurfaceArrangementConfiguration(cooler, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 10));
|
graphicsCard.AddConfiguration(new SurfaceArrangementConfiguration(cooler, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 10));
|
||||||
graphicsCard.Configurations.Add(new SurfaceArrangementConfiguration(dram, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 10));
|
graphicsCard.AddConfiguration(new SurfaceArrangementConfiguration(dram, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Bottom, 10));
|
||||||
graphicsCard.Configurations.Add(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
|
graphicsCard.AddConfiguration(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Center, VerticalArrangementPosition.Center, 0));
|
||||||
arrangement.Types.Add(graphicsCard);
|
|
||||||
|
|
||||||
SurfaceArrangementType fan = new SurfaceArrangementType(RGBDeviceType.Fan);
|
SurfaceArrangementType fan = arrangement.AddType(RGBDeviceType.Fan, 2);
|
||||||
fan.Configurations.Add(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 100));
|
fan.AddConfiguration(new SurfaceArrangementConfiguration(mainboard, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 100));
|
||||||
arrangement.Types.Add(fan);
|
|
||||||
|
|
||||||
SurfaceArrangementType ledStripe = new SurfaceArrangementType(RGBDeviceType.LedStripe);
|
SurfaceArrangementType ledStripe = arrangement.AddType(RGBDeviceType.LedStripe, 2);
|
||||||
ledStripe.Configurations.Add(new SurfaceArrangementConfiguration(fan, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 100));
|
ledStripe.AddConfiguration(new SurfaceArrangementConfiguration(fan, HorizontalArrangementPosition.Right, VerticalArrangementPosition.Equal, 100));
|
||||||
arrangement.Types.Add(ledStripe);
|
|
||||||
|
|
||||||
SurfaceArrangementType speaker = new SurfaceArrangementType(RGBDeviceType.Speaker);
|
arrangement.AddType(RGBDeviceType.Speaker, 1);
|
||||||
arrangement.Types.Add(speaker);
|
arrangement.AddType(RGBDeviceType.None, 1);
|
||||||
|
|
||||||
return arrangement;
|
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)
|
public void Arrange(ArtemisSurface surface)
|
||||||
{
|
{
|
||||||
|
ArrangedDevices.Clear();
|
||||||
foreach (ArtemisDevice surfaceDevice in surface.Devices)
|
foreach (ArtemisDevice surfaceDevice in surface.Devices)
|
||||||
{
|
{
|
||||||
surfaceDevice.X = 0;
|
surfaceDevice.X = 0;
|
||||||
surfaceDevice.X = 0;
|
surfaceDevice.Y = 0;
|
||||||
surfaceDevice.ApplyToRgbDevice();
|
surfaceDevice.ApplyToRgbDevice();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,6 +100,7 @@ namespace Artemis.Core.Services.Models
|
|||||||
surfaceDevice.ApplyToRgbDevice();
|
surfaceDevice.ApplyToRgbDevice();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
{
|
{
|
||||||
foreach (ArtemisDevice surfaceDevice in surface.Devices)
|
foreach (ArtemisDevice surfaceDevice in surface.Devices)
|
||||||
|
|||||||
@ -19,18 +19,6 @@ namespace Artemis.Core.Services.Models
|
|||||||
MarginBottom = margin;
|
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 SurfaceArrangementType? Anchor { get; }
|
||||||
public HorizontalArrangementPosition HorizontalPosition { get; }
|
public HorizontalArrangementPosition HorizontalPosition { get; }
|
||||||
@ -40,6 +28,7 @@ namespace Artemis.Core.Services.Models
|
|||||||
public int MarginTop { get; }
|
public int MarginTop { get; }
|
||||||
public int MarginRight { get; }
|
public int MarginRight { get; }
|
||||||
public int MarginBottom { get; }
|
public int MarginBottom { get; }
|
||||||
|
public SurfaceArrangement SurfaceArrangement { get; set; }
|
||||||
|
|
||||||
public bool Apply(List<ArtemisDevice> devices, ArtemisSurface surface)
|
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
|
// Start at the edge of the anchor, if there is no anchor start at any device
|
||||||
Point startPoint = Anchor?.GetEdge(HorizontalPosition, VerticalPosition, surface) ??
|
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
|
// 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);
|
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();
|
artemisDevice.ApplyToRgbDevice();
|
||||||
previous = artemisDevice;
|
previous = artemisDevice;
|
||||||
|
|
||||||
|
SurfaceArrangement.ArrangedDevices.Add(artemisDevice);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -7,13 +7,17 @@ namespace Artemis.Core.Services.Models
|
|||||||
{
|
{
|
||||||
internal class SurfaceArrangementType
|
internal class SurfaceArrangementType
|
||||||
{
|
{
|
||||||
public SurfaceArrangementType(RGBDeviceType deviceType)
|
public SurfaceArrangementType(SurfaceArrangement surfaceArrangement, RGBDeviceType deviceType, int zIndex)
|
||||||
{
|
{
|
||||||
|
SurfaceArrangement = surfaceArrangement;
|
||||||
DeviceType = deviceType;
|
DeviceType = deviceType;
|
||||||
|
ZIndex = zIndex;
|
||||||
Configurations = new List<SurfaceArrangementConfiguration>();
|
Configurations = new List<SurfaceArrangementConfiguration>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SurfaceArrangement SurfaceArrangement { get; }
|
||||||
public RGBDeviceType DeviceType { get; }
|
public RGBDeviceType DeviceType { get; }
|
||||||
|
public int ZIndex { get; }
|
||||||
public List<SurfaceArrangementConfiguration> Configurations { get; }
|
public List<SurfaceArrangementConfiguration> Configurations { get; }
|
||||||
public SurfaceArrangementConfiguration? AppliedConfiguration { get; set; }
|
public SurfaceArrangementConfiguration? AppliedConfiguration { get; set; }
|
||||||
|
|
||||||
@ -35,6 +39,8 @@ namespace Artemis.Core.Services.Models
|
|||||||
if (applied)
|
if (applied)
|
||||||
{
|
{
|
||||||
AppliedConfiguration = configuration;
|
AppliedConfiguration = configuration;
|
||||||
|
foreach (ArtemisDevice artemisDevice in devices)
|
||||||
|
artemisDevice.ZIndex = ZIndex;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -45,14 +51,14 @@ namespace Artemis.Core.Services.Models
|
|||||||
HorizontalArrangementPosition.Right,
|
HorizontalArrangementPosition.Right,
|
||||||
VerticalArrangementPosition.Equal,
|
VerticalArrangementPosition.Equal,
|
||||||
10
|
10
|
||||||
);
|
) {SurfaceArrangement = SurfaceArrangement};
|
||||||
fallback.Apply(devices, surface);
|
fallback.Apply(devices, surface);
|
||||||
AppliedConfiguration = fallback;
|
AppliedConfiguration = fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Point GetEdge(HorizontalArrangementPosition horizontalPosition, VerticalArrangementPosition verticalPosition, ArtemisSurface surface)
|
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())
|
if (!devices.Any())
|
||||||
return new Point();
|
return new Point();
|
||||||
|
|
||||||
@ -75,6 +81,12 @@ namespace Artemis.Core.Services.Models
|
|||||||
|
|
||||||
return new Point(x, y);
|
return new Point(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddConfiguration(SurfaceArrangementConfiguration surfaceArrangementConfiguration)
|
||||||
|
{
|
||||||
|
surfaceArrangementConfiguration.SurfaceArrangement = SurfaceArrangement;
|
||||||
|
Configurations.Add(surfaceArrangementConfiguration);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal enum HorizontalArrangementPosition
|
internal enum HorizontalArrangementPosition
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user