public Point GetEdge(HorizontalArrangementPosition horizontalPosition, VerticalArrangementPosition verticalPosition) { List <ArtemisDevice> devices = SurfaceArrangement.ArrangedDevices.Where(d => d.RgbDevice.DeviceInfo.DeviceType == DeviceType || DeviceType == RGBDeviceType.All).ToList(); if (!devices.Any()) { return(new Point()); } float x = horizontalPosition switch { 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.0f), HorizontalArrangementPosition.Center => devices.First().RgbDevice.Boundary.Center.X, HorizontalArrangementPosition.Equal => devices.First().RgbDevice.Location.X, _ => throw new ArgumentOutOfRangeException(nameof(horizontalPosition), horizontalPosition, null) }; float y = verticalPosition switch { 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.0f), VerticalArrangementPosition.Center => devices.First().RgbDevice.Boundary.Center.Y, VerticalArrangementPosition.Equal => devices.First().RgbDevice.Location.Y, _ => throw new ArgumentOutOfRangeException(nameof(verticalPosition), verticalPosition, null) }; return(new Point(x, y)); }
public SurfaceArrangementConfiguration(SurfaceArrangementType?anchor, HorizontalArrangementPosition horizontalPosition, VerticalArrangementPosition verticalPosition, int margin) { Anchor = anchor; HorizontalPosition = horizontalPosition; VerticalPosition = verticalPosition; MarginLeft = margin; MarginTop = margin; MarginRight = margin; MarginBottom = margin; SurfaceArrangement = null !; }