public override void MovePolygon(int x, int y, PolyMoveModes mode)
 {
     if (mode == PolyMoveModes.WholePoly)
     {
         base.MovePolygon(x, y, mode);
     }
     else if (mode == PolyMoveModes.ByVertex)
     {
         base.DeleteShape();
         Point newInitialVertex = new Point(x, y);
         Point tmpVertex        = base.Vertices[(selectedVertexIndex + 2) % 4 == 0 ? 1 : (selectedVertexIndex + 2) % 4];
         Func((int)newInitialVertex.X, (int)newInitialVertex.Y, (int)tmpVertex.X, (int)tmpVertex.Y);
     }
 }
 public virtual void MovePolygon(int x, int y, PolyMoveModes mode)
 {
     if (mode == PolyMoveModes.ByVertex)
     {
         DeleteShape();
         if (Vertices[selectedVertexIndex] == InitialPoint)
         {
             InitialPoint = new Point(x, y);
             Vertices[0]  = Vertices[Vertices.Count - 1] = InitialPoint;
         }
         else
         {
             Vertices[selectedVertexIndex] = new Point(x, y);
         }
         DrawShape();
     }
     else if (mode == PolyMoveModes.WholePoly)
     {
         int          Vx, Vy;
         List <Point> tmp = new List <Point>();
         Vx = ((int)x - (int)Vertices[selectedVertexIndex].X);
         Vy = ((int)y - (int)Vertices[selectedVertexIndex].Y);
         foreach (Point pt in Vertices.ToList())
         {
             if (pt.X + Vx > MainWindow.actualWidth || pt.X + Vx < 0 ||
                 pt.Y + Vy > MainWindow.actualHeight || pt.Y + Vy < 0)
             {
                 MessageBox.Show("Poly would be out of bounds");
                 return;
             }
             else
             {
                 tmp.Add(new Point(pt.X + Vx, pt.Y + Vy));
             }
         }
         DeleteShape();
         Vertices     = tmp;
         InitialPoint = tmp[0];
         DrawShape();
     }
 }