TUM.CMS.VplControl.Core.VplControl.HandleMouseWheel C# (CSharp) Method

HandleMouseWheel() protected method

protected HandleMouseWheel ( object sender, System.Windows.Input.MouseWheelEventArgs e ) : void
sender object
e System.Windows.Input.MouseWheelEventArgs
return void
        protected override void HandleMouseWheel(object sender, MouseWheelEventArgs e)
        {
            if (!Keyboard.IsKeyDown(Key.LeftCtrl) && !Keyboard.IsKeyDown(Key.RightCtrl)) return;

            mouseMode = MouseMode.Zooming;

            var zoom = e.Delta > 0 ? .2 : -.2;

            if (!(e.Delta > 0) && (ScaleTransform.ScaleX < .4 || ScaleTransform.ScaleY < .4))
                return;

            var elementsToZoom = new List<UIElement>();
            elementsToZoom.AddRange(Children.OfType<Border>());
            elementsToZoom.AddRange(Children.OfType<Ellipse>());
            elementsToZoom.AddRange(Children.OfType<Path>());

            foreach (var element in elementsToZoom)
            {
                element.UpdateLayout();

                var position = e.GetPosition(element);
                double width = 0;
                double height = 0;

                if (element is Border)
                {
                    var border = element as Border;

                    width = border.ActualWidth;
                    height = border.ActualHeight;
                }
                else if (element is Ellipse)
                {
                    var ellipse = element as Ellipse;

                    width = ellipse.ActualWidth;
                    height = ellipse.ActualHeight;
                }
                else if (element is Path)
                {
                    var path = element as Path;

                    width = path.ActualWidth;
                    height = path.ActualHeight;
                }

                if (width > 0 && height > 0)
                {
                    element.RenderTransformOrigin = new Point(position.X/width, position.Y/height);
                }
            }

            ScaleTransform.ScaleX += zoom;
            ScaleTransform.ScaleY += zoom;

            mouseMode = MouseMode.Nothing;
        }