public override void MouseUp(object sender, MouseButtonEventArgs e) { base.MouseUp(sender, e); var position = ProfileViewModel.PanZoomViewModel.GetRelativeMousePosition(sender, e); var selectedRect = new Rect(MouseDownStartPosition, position); // Get selected LEDs var selectedLeds = new List <ArtemisLed>(); foreach (var device in ProfileViewModel.DeviceViewModels) { foreach (var ledViewModel in device.Leds) { if (ledViewModel.Led.RgbLed.AbsoluteLedRectangle.ToWindowsRect(1).IntersectsWith(selectedRect)) { selectedLeds.Add(ledViewModel.Led); } // Unselect everything ledViewModel.IsSelected = false; } } // Apply the selection to the selected layer layer if (ProfileEditorService.SelectedProfileElement is Layer layer) { // If the layer has a shape, save it's size var shapeSize = Rect.Empty; if (layer.LayerShape != null) { shapeSize = _layerEditorService.GetShapeRenderRect(layer.LayerShape); } layer.ClearLeds(); layer.AddLeds(selectedLeds); // Restore the saved size if (layer.LayerShape != null) { _layerEditorService.SetShapeRenderRect(layer.LayerShape, shapeSize); } ProfileEditorService.UpdateSelectedProfileElement(); } // If no layer selected, apply it to a new layer in the selected folder else if (ProfileEditorService.SelectedProfileElement is Folder folder) { var newLayer = folder.AddLayer("New layer"); newLayer.AddLeds(selectedLeds); ProfileEditorService.ChangeSelectedProfileElement(newLayer); ProfileEditorService.UpdateSelectedProfileElement(); } // If no folder selected, apply it to a new layer in the root folder else { var rootFolder = ProfileEditorService.SelectedProfile.GetRootFolder(); var newLayer = rootFolder.AddLayer("New layer"); newLayer.AddLeds(selectedLeds); ProfileEditorService.ChangeSelectedProfileElement(newLayer); ProfileEditorService.UpdateSelectedProfileElement(); } }
public void Move(object sender, MouseEventArgs e) { if (!_isDragging || !(ProfileEditorService.SelectedProfileElement is Layer layer)) { return; } var position = GetRelativePosition(sender, e); var skRect = layer.LayerShape.RenderRectangle; var x = (float)(position.X + _dragOffsetX); var y = (float)(position.Y + _dragOffsetY); // TODO: Update the translation // if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift)) // layer.LayerShape.SetFromUnscaledRectangle(SKRect.Create(x, y, skRect.Width, skRect.Height), ProfileEditorService.CurrentTime); // else // { // if (_draggingVertically) // layer.LayerShape.SetFromUnscaledRectangle(SKRect.Create(skRect.Left, y, skRect.Width, skRect.Height), ProfileEditorService.CurrentTime); // else if (_draggingHorizontally) // layer.LayerShape.SetFromUnscaledRectangle(SKRect.Create(x, skRect.Top, skRect.Width, skRect.Height), ProfileEditorService.CurrentTime); // else // { // _draggingHorizontally = Math.Abs(position.X - _dragStart.X) > Math.Abs(position.Y - _dragStart.Y); // _draggingVertically = Math.Abs(position.X - _dragStart.X) < Math.Abs(position.Y - _dragStart.Y); // } // } ProfileEditorService.UpdateProfilePreview(); }
public void ShapeEditMouseUp(object sender, MouseButtonEventArgs e) { ProfileEditorService.UpdateSelectedProfileElement(); _isDragging = false; _draggingHorizontally = false; _draggingVertically = false; ((IInputElement)sender).ReleaseMouseCapture(); e.Handled = true; }
public void AnchorMove(object sender, MouseEventArgs e) { if (!_isDragging || !(ProfileEditorService.SelectedProfileElement is Layer layer)) { return; } var position = GetRelativePosition(sender, e); var x = (float)(position.X + _dragOffsetX); var y = (float)(position.Y + _dragOffsetY); layer.LayerShape.SetFromUnscaledAnchor(new SKPoint(x, y), ProfileEditorService.CurrentTime); ProfileEditorService.UpdateProfilePreview(); }
public override void MouseUp(object sender, MouseButtonEventArgs e) { base.MouseUp(sender, e); if (ProfileEditorService.SelectedProfileElement is Layer layer) { // Ensure the shape is a rectangle if (!(layer.LayerShape is Rectangle)) { layer.LayerShape = new Rectangle(layer); } // Apply the drag rectangle _layerEditorService.SetShapeRenderRect(layer.LayerShape, DragRectangle); ProfileEditorService.UpdateSelectedProfileElement(); } }
public override void MouseUp(object sender, MouseButtonEventArgs e) { base.MouseUp(sender, e); // Find out if the click is inside a layer and if so, fill it var position = e.GetPosition((IInputElement)sender); var panZoomVm = ProfileViewModel.PanZoomViewModel; var layer = ProfileEditorService.SelectedProfile .GetAllLayers() .FirstOrDefault(l => l.Leds.Any( led => panZoomVm.TransformContainingRect(led.RgbLed.AbsoluteLedRectangle).Contains(position)) ); if (layer == null) { return; } layer.LayerShape = new Fill(layer); ProfileEditorService.UpdateSelectedProfileElement(); }
private void ApplyShapeResize(SKRect newRect) { if (!(ProfileEditorService.SelectedProfileElement is Layer layer)) { return; } // TODO: Apply the translation // Store the original position to create an offset for the anchor // var original = layer.PositionProperty.CurrentValue; // layer.LayerShape.SetFromUnscaledRectangle(newRect, ProfileEditorService.CurrentTime); // var updated = layer.PositionProperty.CurrentValue; // // Apply the offset to the anchor so it stays in at same spot // layer.AnchorPointProperty.SetCurrentValue(new SKPoint( // layer.AnchorPointProperty.CurrentValue.X + (original.X - updated.X), // layer.AnchorPointProperty.CurrentValue.Y + (original.Y - updated.Y) // ), ProfileEditorService.CurrentTime); // Update the preview ProfileEditorService.UpdateProfilePreview(); }