private Rectangle GetRimSideHitbox(int file, int rank, BoardTheme.RimSide side, DrawingSpaceUsage space)
        {
            bool isHorizontal = side == BoardTheme.RimSide.Bottom || side == BoardTheme.RimSide.Top;

            int squareW      = space.SquaresSpace.Width / 8;
            int squareH      = space.SquaresSpace.Height / 8;
            int rimThickness = space.RimThickness;
            int innerRimTransitionThickness = space.InnerRimTransitionThickness;

            int x = 0;
            int y = 0;
            int w = 0;
            int h = 0;

            if (side == BoardTheme.RimSide.Left)
            {
                y = space.SquaresSpace.Y;
                x = space.SquaresSpace.X - rimThickness - space.InnerRimTransitionThickness;
                w = rimThickness;
                h = squareH;
            }
            else if (side == BoardTheme.RimSide.Right)
            {
                y = space.SquaresSpace.Y;
                x = space.SquaresSpace.X + space.SquaresSpace.Width + space.InnerRimTransitionThickness;
                w = rimThickness;
                h = squareH;
            }
            else if (side == BoardTheme.RimSide.Top)
            {
                y = space.SquaresSpace.Y - rimThickness - space.InnerRimTransitionThickness;
                x = space.SquaresSpace.X;
                w = squareW;
                h = rimThickness;
            }
            else if (side == BoardTheme.RimSide.Bottom)
            {
                y = space.SquaresSpace.Y + space.SquaresSpace.Height + space.InnerRimTransitionThickness;
                x = space.SquaresSpace.X;
                w = squareW;
                h = rimThickness;
            }

            int xIncr = isHorizontal ? squareW : 0;
            int yIncr = !isHorizontal ? squareH : 0;

            return(new Rectangle(x + file * xIncr, y + rank * yIncr, w, h));
        }
        private void DrawRimSquaresSide(Graphics g, DrawingSpaceUsage space, BoardTheme.RimSide side)
        {
            bool isHorizontal  = side == BoardTheme.RimSide.Bottom || side == BoardTheme.RimSide.Top;
            bool isSquareLight = side == BoardTheme.RimSide.Bottom || side == BoardTheme.RimSide.Right;

            int squareW      = space.SquaresSpace.Width / 8;
            int squareH      = space.SquaresSpace.Height / 8;
            int rimThickness = space.RimThickness + space.InnerRimTransitionThickness;

            int x = 0;
            int y = 0;
            int w = 0;
            int h = 0;

            if (side == BoardTheme.RimSide.Left)
            {
                y = space.SquaresSpace.Y;
                x = space.SquaresSpace.X - rimThickness;
                w = rimThickness;
                h = squareH;
            }
            else if (side == BoardTheme.RimSide.Right)
            {
                y = space.SquaresSpace.Y;
                x = space.SquaresSpace.X + space.SquaresSpace.Width;
                w = rimThickness;
                h = squareH;
            }
            else if (side == BoardTheme.RimSide.Top)
            {
                y = space.SquaresSpace.Y - rimThickness;
                x = space.SquaresSpace.X;
                w = squareW;
                h = rimThickness;
            }
            else if (side == BoardTheme.RimSide.Bottom)
            {
                y = space.SquaresSpace.Y + space.SquaresSpace.Height;
                x = space.SquaresSpace.X;
                w = squareW;
                h = rimThickness;
            }

            int xIncr = isHorizontal ? squareW : 0;
            int yIncr = !isHorizontal ? squareH : 0;

            for (int i = 0; i < 8; ++i)
            {
                var image =
                    isSquareLight
                    ? BoardImages.LightRimSide[side]
                    : BoardImages.DarkRimSide[side];

                var rect = new Rectangle(x, y, w, h);

                g.DrawImage(image, rect);

                isSquareLight = !isSquareLight;
                x            += xIncr;
                y            += yIncr;
            }
        }