UI - Performance improvements

This commit is contained in:
Robert committed 2021-09-04 20:52:03 +02:00
1 parent 7ad7eaad89
commit 13a16a1830
9 files changed
+165 -135

No files matched your search

@@ -188,8 +188,7 @@
</ItemsControl.ItemTemplate>
</ItemsControl>
<Canvas>
<Rectangle ClipToBounds="False"
Width="{Binding MaxTextureSize}"
<Rectangle Width="{Binding MaxTextureSize}"
Height="{Binding MaxTextureSize}"
Stroke="{DynamicResource SecondaryHueMidBrush}"
StrokeThickness="{Binding MaxTextureSizeIndicatorThickness}"
@@ -18,6 +18,7 @@ using Artemis.UI.Screens.SurfaceEditor.Visualization;
using Artemis.UI.Shared;
using Artemis.UI.Shared.Services;
using SkiaSharp;
using SkiaSharp.Views.WPF;
using Stylet;
using MouseButton = System.Windows.Input.MouseButton;
@@ -305,7 +306,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
if (e.LeftButton == MouseButtonState.Pressed)
StartMouseDrag(sender, position, relative);
else
StopMouseDrag(sender, position);
StopMouseDrag(position);
}
// ReSharper disable once UnusedMember.Global - Called from view
@@ -323,7 +324,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
if (_mouseDragStatus == MouseDragStatus.Dragging)
MoveSelected(relative);
else if (_mouseDragStatus == MouseDragStatus.Selecting)
UpdateSelection(sender, position);
UpdateSelection(position);
}
private void StartMouseDrag(object sender, Point position, Point relative)
@@ -360,17 +361,18 @@ namespace Artemis.UI.Screens.SurfaceEditor
ApplySurfaceSelection();
}
private void StopMouseDrag(object sender, Point position)
private void StopMouseDrag(Point position)
{
if (_mouseDragStatus != MouseDragStatus.Dragging)
{
RectangleGeometry selectedRect = new(new Rect(_mouseDragStartPoint, position));
List<SurfaceDeviceViewModel> devices = HitTestUtilities.GetHitViewModels<SurfaceDeviceViewModel>((Visual) sender, selectedRect);
SKRect hitTestRect = PanZoomViewModel.UnTransformContainingRect(new Rect(_mouseDragStartPoint, position)).ToSKRect();
foreach (SurfaceDeviceViewModel device in SurfaceDeviceViewModels)
if (devices.Contains(device))
{
if (device.Device.Rectangle.IntersectsWith(hitTestRect))
device.SelectionStatus = SelectionStatus.Selected;
else if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift))
device.SelectionStatus = SelectionStatus.None;
}
}
else
{
@@ -382,7 +384,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
ApplySurfaceSelection();
}
private void UpdateSelection(object sender, Point position)
private void UpdateSelection(Point position)
{
if (IsPanKeyDown())
return;
@@ -390,12 +392,14 @@ namespace Artemis.UI.Screens.SurfaceEditor
Rect selectedRect = new(_mouseDragStartPoint, position);
SelectionRectangle.Rect = selectedRect;
List<SurfaceDeviceViewModel> devices = HitTestUtilities.GetHitViewModels<SurfaceDeviceViewModel>((Visual) sender, SelectionRectangle);
SKRect hitTestRect = PanZoomViewModel.UnTransformContainingRect(new Rect(_mouseDragStartPoint, position)).ToSKRect();
foreach (SurfaceDeviceViewModel device in SurfaceDeviceViewModels)
if (devices.Contains(device))
{
if (device.Device.Rectangle.IntersectsWith(hitTestRect))
device.SelectionStatus = SelectionStatus.Selected;
else if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift))
device.SelectionStatus = SelectionStatus.None;
}
ApplySurfaceSelection();
}