Exemplo n.º 1
0
        public void ProcessMouseWheel(Control sender, MouseEventArgs e)
        {
            double      num11;
            double      num12;
            double      num13;
            RectDouble  visibleCanvasViewportBounds = this.canvasView.GetVisibleCanvasViewportBounds();
            PointInt32  point                = base.PointToClient(sender.PointToScreen(e.Location)).ToPointInt32();
            PointDouble viewportPt           = RectDoubleUtil.Clamp(visibleCanvasViewportBounds, point);
            PointDouble extentPt             = this.canvasView.ConvertViewportToExtent(viewportPt);
            PointDouble num5                 = this.canvasView.ConvertExtentToCanvas(extentPt);
            double      scaleRatio           = this.canvasView.ScaleRatio;
            PointDouble viewportCanvasOffset = this.canvasView.ViewportCanvasOffset;
            double      num8                 = ((double)e.Delta) / scaleRatio;
            double      x          = viewportCanvasOffset.X;
            double      y          = viewportCanvasOffset.Y;
            ScaleBasis  scaleBasis = this.canvasView.ScaleBasis;
            ScaleBasis  ratio      = ScaleBasis.Ratio;

            if (Control.ModifierKeys == Keys.Shift)
            {
                num11 = x - num8;
                num12 = y;
                ratio = scaleBasis;
                num13 = scaleRatio;
            }
            else if (Control.ModifierKeys == Keys.Control)
            {
                double num16;
                double num14 = ((double)e.Delta) / 120.0;
                double num15 = Math.Pow(1.12, Math.Abs(num14));
                if (e.Delta > 0)
                {
                    num16 = scaleRatio * num15;
                }
                else
                {
                    num16 = scaleRatio / num15;
                }
                double num17 = this.canvasView.ClampScaleRatio(num16);
                double num18 = Math.Round(num17, MidpointRounding.AwayFromZero);
                if ((Math.Abs((double)(num18 - num17)) < (num18 * 0.1)) && (Math.Abs((double)(num18 - num17)) < Math.Abs((double)(num18 - scaleRatio))))
                {
                    num13 = num18;
                }
                else
                {
                    num13 = num17;
                }
                ratio = ScaleBasis.Ratio;
                num11 = num5.X - (viewportPt.X / num13);
                num12 = num5.Y - (viewportPt.Y / num13);
            }
            else if (Control.ModifierKeys == Keys.None)
            {
                num11 = x;
                num12 = y - num8;
                ratio = scaleBasis;
                num13 = scaleRatio;
            }
            else
            {
                num11 = x;
                num12 = y;
                ratio = scaleBasis;
                num13 = scaleRatio;
            }
            this.canvasView.ViewportCanvasOffset = new PointDouble(num11, num12);
            this.canvasView.ScaleBasis           = ratio;
            this.canvasView.ScaleRatio           = num13;
        }