private void ZoomModeOut(bool recover = true)
 {
     MouseUtils.Rect r;
     r.Top    = int.MinValue;
     r.Bottom = int.MaxValue;
     r.Left   = int.MinValue;
     r.Right  = int.MaxValue;
     MouseUtils.ClipCursor(ref r);
     if (recover)
     {
         MouseUtils.SetCursorPos((int)previousPosition.X, (int)previousPosition.Y);
     }
 }
        private void ZoomModeIn()
        {
            MouseUtils.GetCursorPos(out var prev);
            previousPosition.X = (double)prev.X;
            previousPosition.Y = (double)prev.Y;
            var p = PointToScreen(ZoomCanvas.TransformToAncestor(this).Transform(new Point(0, 0)));

            MouseUtils.SetCursorPos((int)(p.X + ZoomCanvas.ActualWidth / 2), (int)(p.Y + ZoomCanvas.ActualHeight / 2));

            MouseUtils.Rect r;
            r.Top    = (int)p.Y;
            r.Bottom = (int)(p.Y + ZoomCanvas.ActualHeight);
            r.Left   = (int)p.X;
            r.Right  = (int)(p.X + ZoomCanvas.ActualWidth);
            MouseUtils.ClipCursor(ref r);
        }