bool IUiController.MouseDown(object sender, MouseEventArgs e)
        {
            var width = Rect.East - Rect.West;
            var height = Rect.North - Rect.South;

            var range = Math.Max(width / 40, height / 40);
            var cursor = Earth3d.MainWindow.GetCoordinatesForScreenPoint(e.X, e.Y);

            if (cursor.Distance(Coordinates.FromLatLng(Rect.North, Rect.West)) < range)
            {
                dragCorner = DragCorners.NW;
                drag = true;
            }
            if (cursor.Distance(Coordinates.FromLatLng(Rect.North, (Rect.West + Rect.East) / 2)) < range)
            {
                dragCorner = DragCorners.N;
                drag = true;

            }
            if (cursor.Distance(Coordinates.FromLatLng(Rect.North, Rect.East)) < range)
            {
                dragCorner = DragCorners.NE;
                drag = true;

            }

            if (cursor.Distance(Coordinates.FromLatLng((Rect.North + Rect.South) / 2, Rect.West)) < range)
            {
                dragCorner = DragCorners.W;
                drag = true;

            }

            if (cursor.Distance(Coordinates.FromLatLng((Rect.North + Rect.South) / 2, (Rect.West + Rect.East) / 2)) < range)
            {
                dragCorner = DragCorners.C;
                drag = true;

            }

            if (cursor.Distance(Coordinates.FromLatLng((Rect.North + Rect.South) / 2, Rect.East)) < range)
            {
                dragCorner = DragCorners.E;
                drag = true;

            }

            if (cursor.Distance(Coordinates.FromLatLng(Rect.South, Rect.West)) < range)
            {
                dragCorner = DragCorners.SW;
                drag = true;
            }

            if (cursor.Distance(Coordinates.FromLatLng(Rect.South, (Rect.West + Rect.East) / 2)) < range)
            {
                dragCorner = DragCorners.S;
                drag = true;

            }

            if (cursor.Distance(Coordinates.FromLatLng(Rect.South, Rect.East)) < range)
            {
                dragCorner = DragCorners.SE;
                drag = true;

            }

            if (drag)
            {
                mouseDown = cursor;
            }
            return drag;
        }
        bool IUiController.MouseMove(object sender, MouseEventArgs e)
        {
            if (drag)
            {
                Coordinates cursor = Earth3d.MainWindow.GetCoordinatesForScreenPoint(e.X, e.Y);

                switch (dragCorner)
                {
                case DragCorners.NW:
                    Overlay.north = cursor.Lat;
                    Overlay.west  = cursor.Lng;
                    break;

                case DragCorners.N:
                    Overlay.north = cursor.Lat;
                    break;

                case DragCorners.NE:
                    Overlay.north = cursor.Lat;
                    Overlay.east  = cursor.Lng;
                    break;

                case DragCorners.W:
                    Overlay.west = cursor.Lng;
                    break;

                case DragCorners.C:
                    Overlay.north -= (mouseDown.Lat - cursor.Lat);
                    Overlay.west  -= (mouseDown.Lng - cursor.Lng);
                    Overlay.south -= (mouseDown.Lat - cursor.Lat);
                    Overlay.east  -= (mouseDown.Lng - cursor.Lng);

                    break;

                case DragCorners.E:
                    Overlay.east = cursor.Lng;
                    break;

                case DragCorners.SW:
                    Overlay.south = cursor.Lat;
                    Overlay.west  = cursor.Lng;
                    break;

                case DragCorners.S:
                    Overlay.south = cursor.Lat;
                    break;

                case DragCorners.SE:
                    Overlay.south = cursor.Lat;
                    Overlay.east  = cursor.Lng;
                    break;

                default:
                    break;
                }
                mouseDown = cursor;
                UpdateTextBoxes();
                UpdateLines();
                return(true);
            }
            else
            {
                Control wnd    = (Control)sender;
                double  width  = Overlay.east - Overlay.west;
                double  height = Overlay.north - Overlay.south;

                double      range      = Math.Max(width / 40, height / 40);
                Coordinates cursor     = Earth3d.MainWindow.GetCoordinatesForScreenPoint(e.X, e.Y);
                DragCorners dragCorner = DragCorners.None;
                if (cursor.Distance(Coordinates.FromLatLng(Overlay.north, Overlay.west)) < range)
                {
                    dragCorner = DragCorners.NW;
                }
                if (cursor.Distance(Coordinates.FromLatLng(Overlay.north, (Overlay.west + Overlay.east) / 2)) < range)
                {
                    dragCorner = DragCorners.N;
                }
                if (cursor.Distance(Coordinates.FromLatLng(Overlay.north, Overlay.east)) < range)
                {
                    dragCorner = DragCorners.NE;
                }

                if (cursor.Distance(Coordinates.FromLatLng((Overlay.north + Overlay.south) / 2, Overlay.west)) < range)
                {
                    dragCorner = DragCorners.W;
                }

                if (cursor.Distance(Coordinates.FromLatLng((Overlay.north + Overlay.south) / 2, (Overlay.west + Overlay.east) / 2)) < range)
                {
                    dragCorner = DragCorners.C;
                }

                if (cursor.Distance(Coordinates.FromLatLng((Overlay.north + Overlay.south) / 2, Overlay.east)) < range)
                {
                    dragCorner = DragCorners.E;
                }

                if (cursor.Distance(Coordinates.FromLatLng(Overlay.south, Overlay.west)) < range)
                {
                    dragCorner = DragCorners.SW;
                }

                if (cursor.Distance(Coordinates.FromLatLng(Overlay.south, (Overlay.west + Overlay.east) / 2)) < range)
                {
                    dragCorner = DragCorners.S;
                }

                if (cursor.Distance(Coordinates.FromLatLng(Overlay.south, Overlay.east)) < range)
                {
                    dragCorner = DragCorners.SE;
                }

                switch (dragCorner)
                {
                case DragCorners.SE:
                case DragCorners.NW:
                    wnd.Cursor = Cursors.SizeNWSE;
                    break;

                case DragCorners.N:
                case DragCorners.S:
                    wnd.Cursor = Cursors.SizeNS;
                    break;

                case DragCorners.W:
                case DragCorners.E:
                    wnd.Cursor = Cursors.SizeWE;
                    break;

                case DragCorners.C:
                    wnd.Cursor = Cursors.Hand;
                    break;

                case DragCorners.SW:
                case DragCorners.NE:
                    wnd.Cursor = Cursors.SizeNESW;
                    break;

                default:
                    wnd.Cursor = Cursors.Default;
                    break;
                }
            }
            return(false);
        }
        bool IUiController.MouseMove(object sender, MouseEventArgs e)
        {
            if (drag)
            {

                var cursor = Earth3d.MainWindow.GetCoordinatesForScreenPoint(e.X, e.Y);

                switch (dragCorner)
                {
                    case DragCorners.NW:
                        Rect.North = cursor.Lat;
                        Rect.West = cursor.Lng;
                        break;
                    case DragCorners.N:
                        Rect.North = cursor.Lat;
                        break;
                    case DragCorners.NE:
                        Rect.North = cursor.Lat;
                        Rect.East = cursor.Lng;
                        break;
                    case DragCorners.W:
                        Rect.West = cursor.Lng;
                        break;
                    case DragCorners.C:
                        Rect.North -= (mouseDown.Lat - cursor.Lat);
                        Rect.West -= (mouseDown.Lng - cursor.Lng);
                        Rect.South -= (mouseDown.Lat - cursor.Lat);
                        Rect.East -= (mouseDown.Lng - cursor.Lng);

                        break;
                    case DragCorners.E:
                        Rect.East = cursor.Lng;
                        break;
                    case DragCorners.SW:
                        Rect.South = cursor.Lat;
                        Rect.West = cursor.Lng;
                        break;
                    case DragCorners.S:
                        Rect.South = cursor.Lat;
                        break;
                    case DragCorners.SE:
                        Rect.South = cursor.Lat;
                        Rect.East = cursor.Lng;
                        break;
                    default:
                        break;
                }
                mouseDown = cursor;
                UpdateTextBoxes();
                UpdateLines();
                return true;
            }
            else
            {
                var wnd = (Control)sender;
                var width = Rect.East - Rect.West;
                var height = Rect.North - Rect.South;

                var range = Math.Max(width / 40, height / 40);
                var cursor = Earth3d.MainWindow.GetCoordinatesForScreenPoint(e.X, e.Y);
                var dragCorner = DragCorners.None;
                if (cursor.Distance(Coordinates.FromLatLng(Rect.North, Rect.West)) < range)
                {
                    dragCorner = DragCorners.NW;
                }
                if (cursor.Distance(Coordinates.FromLatLng(Rect.North, (Rect.West + Rect.East) / 2)) < range)
                {
                    dragCorner = DragCorners.N;

                }
                if (cursor.Distance(Coordinates.FromLatLng(Rect.North, Rect.East)) < range)
                {
                    dragCorner = DragCorners.NE;

                }

                if (cursor.Distance(Coordinates.FromLatLng((Rect.North + Rect.South) / 2, Rect.West)) < range)
                {
                    dragCorner = DragCorners.W;

                }

                if (cursor.Distance(Coordinates.FromLatLng((Rect.North + Rect.South) / 2, (Rect.West + Rect.East) / 2)) < range)
                {
                    dragCorner = DragCorners.C;

                }

                if (cursor.Distance(Coordinates.FromLatLng((Rect.North + Rect.South) / 2, Rect.East)) < range)
                {
                    dragCorner = DragCorners.E;
                }

                if (cursor.Distance(Coordinates.FromLatLng(Rect.South, Rect.West)) < range)
                {
                    dragCorner = DragCorners.SW;
                }

                if (cursor.Distance(Coordinates.FromLatLng(Rect.South, (Rect.West + Rect.East) / 2)) < range)
                {
                    dragCorner = DragCorners.S;
                }

                if (cursor.Distance(Coordinates.FromLatLng(Rect.South, Rect.East)) < range)
                {
                    dragCorner = DragCorners.SE;
                }

                switch (dragCorner)
                {
                    case DragCorners.SE:
                    case DragCorners.NW:
                        wnd.Cursor = Cursors.SizeNWSE;
                        break;
                    case DragCorners.N:
                    case DragCorners.S:
                        wnd.Cursor = Cursors.SizeNS;
                        break;
                    case DragCorners.W:
                    case DragCorners.E:
                        wnd.Cursor = Cursors.SizeWE;
                        break;
                    case DragCorners.C:
                        wnd.Cursor = Cursors.Hand;
                        break;
                    case DragCorners.SW:
                    case DragCorners.NE:
                        wnd.Cursor = Cursors.SizeNESW;
                        break;

                    default:
                        wnd.Cursor = Cursors.Default;
                        break;
                }
            }
            return false;
        }
        bool IUiController.MouseDown(object sender, MouseEventArgs e)
        {
            double width  = Overlay.east - Overlay.west;
            double height = Overlay.north - Overlay.south;

            double      range  = Math.Max(width / 40, height / 40);
            Coordinates cursor = Earth3d.MainWindow.GetCoordinatesForScreenPoint(e.X, e.Y);

            if (cursor.Distance(Coordinates.FromLatLng(Overlay.north, Overlay.west)) < range)
            {
                dragCorner = DragCorners.NW;
                drag       = true;
            }
            if (cursor.Distance(Coordinates.FromLatLng(Overlay.north, (Overlay.west + Overlay.east) / 2)) < range)
            {
                dragCorner = DragCorners.N;
                drag       = true;
            }
            if (cursor.Distance(Coordinates.FromLatLng(Overlay.north, Overlay.east)) < range)
            {
                dragCorner = DragCorners.NE;
                drag       = true;
            }

            if (cursor.Distance(Coordinates.FromLatLng((Overlay.north + Overlay.south) / 2, Overlay.west)) < range)
            {
                dragCorner = DragCorners.W;
                drag       = true;
            }

            if (cursor.Distance(Coordinates.FromLatLng((Overlay.north + Overlay.south) / 2, (Overlay.west + Overlay.east) / 2)) < range)
            {
                dragCorner = DragCorners.C;
                drag       = true;
            }

            if (cursor.Distance(Coordinates.FromLatLng((Overlay.north + Overlay.south) / 2, Overlay.east)) < range)
            {
                dragCorner = DragCorners.E;
                drag       = true;
            }

            if (cursor.Distance(Coordinates.FromLatLng(Overlay.south, Overlay.west)) < range)
            {
                dragCorner = DragCorners.SW;
                drag       = true;
            }

            if (cursor.Distance(Coordinates.FromLatLng(Overlay.south, (Overlay.west + Overlay.east) / 2)) < range)
            {
                dragCorner = DragCorners.S;
                drag       = true;
            }

            if (cursor.Distance(Coordinates.FromLatLng(Overlay.south, Overlay.east)) < range)
            {
                dragCorner = DragCorners.SE;
                drag       = true;
            }

            if (drag)
            {
                mouseDown = cursor;
            }
            return(drag);
        }