diff --git a/src/Artemis.Core/Services/RgbService.cs b/src/Artemis.Core/Services/RgbService.cs index f43b1ccc1..da343b558 100644 --- a/src/Artemis.Core/Services/RgbService.cs +++ b/src/Artemis.Core/Services/RgbService.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; -using System.IO; using System.Linq; using System.Threading; using Artemis.Core.DeviceProviders; diff --git a/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorView.xaml b/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorView.xaml index 249956841..d569d59d4 100644 --- a/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorView.xaml +++ b/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorView.xaml @@ -63,9 +63,8 @@ - - + + + + - + SetAndNotify(ref _colorFirstLedOnly, value); } + public double MaxTextureSize => 4096 / _settingsService.GetSetting("Core.RenderScale", 0.5).Value; + public double MaxTextureSizeIndicatorThickness => 2 / PanZoomViewModel.Zoom; + public void OpenHyperlink(object sender, RequestNavigateEventArgs e) { Core.Utilities.OpenUrl(e.Uri.AbsoluteUri); @@ -155,7 +159,7 @@ namespace Artemis.UI.Screens.SurfaceEditor protected override void OnInitialActivate() { LoadWorkspaceSettings(); - SurfaceDeviceViewModels.AddRange(_rgbService.EnabledDevices.OrderBy(d => d.ZIndex).Select(d => new SurfaceDeviceViewModel(d, _rgbService))); + SurfaceDeviceViewModels.AddRange(_rgbService.EnabledDevices.OrderBy(d => d.ZIndex).Select(d => new SurfaceDeviceViewModel(d, _rgbService, _settingsService))); ListDeviceViewModels.AddRange(_rgbService.EnabledDevices.OrderBy(d => d.ZIndex * -1).Select(d => new ListDeviceViewModel(d, this))); List shuffledDevices = _rgbService.EnabledDevices.OrderBy(d => Guid.NewGuid()).ToList(); @@ -168,7 +172,7 @@ namespace Artemis.UI.Screens.SurfaceEditor } _coreService.FrameRendering += CoreServiceOnFrameRendering; - + PanZoomViewModel.PropertyChanged += PanZoomViewModelOnPropertyChanged; base.OnInitialActivate(); } @@ -179,10 +183,17 @@ namespace Artemis.UI.Screens.SurfaceEditor ListDeviceViewModels.Clear(); _coreService.FrameRendering -= CoreServiceOnFrameRendering; + PanZoomViewModel.PropertyChanged -= PanZoomViewModelOnPropertyChanged; base.OnClose(); } + private void PanZoomViewModelOnPropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == nameof(PanZoomViewModel.Zoom)) + NotifyOfPropertyChange(nameof(MaxTextureSizeIndicatorThickness)); + } + #endregion #region Context menu actions diff --git a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceViewModel.cs b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceViewModel.cs index 50b3bcec1..82d14326c 100644 --- a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceViewModel.cs +++ b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceViewModel.cs @@ -14,15 +14,17 @@ namespace Artemis.UI.Screens.SurfaceEditor.Visualization public class SurfaceDeviceViewModel : PropertyChangedBase { private readonly IRgbService _rgbService; + private readonly ISettingsService _settingsService; private Cursor _cursor; private double _dragOffsetX; private double _dragOffsetY; private SelectionStatus _selectionStatus; - public SurfaceDeviceViewModel(ArtemisDevice device, IRgbService rgbService) + public SurfaceDeviceViewModel(ArtemisDevice device, IRgbService rgbService, ISettingsService settingsService) { Device = device; _rgbService = rgbService; + _settingsService = settingsService; } public ArtemisDevice Device { get; } @@ -101,6 +103,10 @@ namespace Artemis.UI.Screens.SurfaceEditor.Visualization if (x < 0 || y < 0) return false; + double maxTextureSize = 4096 / _settingsService.GetSetting("Core.RenderScale", 0.5).Value; + if (x + Device.Rectangle.Width > maxTextureSize || y + Device.Rectangle.Height > maxTextureSize) + return false; + List own = Device.Leds .Select(l => SKRect.Create(l.Rectangle.Left + x, l.Rectangle.Top + y, l.Rectangle.Width, l.Rectangle.Height)) .ToList();