コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        public void ShapeEditMouseUp(object sender, MouseButtonEventArgs e)
        {
            ProfileEditorService.UpdateSelectedProfileElement();

            _isDragging           = false;
            _draggingHorizontally = false;
            _draggingVertically   = false;

            ((IInputElement)sender).ReleaseMouseCapture();
            e.Handled = true;
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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();
            }
        }
コード例 #6
0
        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();
        }
コード例 #7
0
        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();
        }