private Rectangle[] GetOuterRimTransitionRectangles(DrawingSpaceUsage space) { return(GetRimTransitionRectangles( space.SquaresSpace, space.InnerRimTransitionThickness + space.RimThickness, space.OuterRimTransitionThickness )); }
private void DrawRimSquares(Graphics g, DrawingSpaceUsage space) { DrawRimSquaresSide(g, space, BoardTheme.RimSide.Left); DrawRimSquaresSide(g, space, BoardTheme.RimSide.Right); DrawRimSquaresSide(g, space, BoardTheme.RimSide.Top); DrawRimSquaresSide(g, space, BoardTheme.RimSide.Bottom); DrawRimSquaresCorner(g, space, BoardTheme.RimCorner.TopLeft); DrawRimSquaresCorner(g, space, BoardTheme.RimCorner.TopRight); DrawRimSquaresCorner(g, space, BoardTheme.RimCorner.BottomLeft); DrawRimSquaresCorner(g, space, BoardTheme.RimCorner.BottomRight); }
private void DrawIndicators(Graphics g, DrawingSpaceUsage space) { var rimConfig = BoardImages.Config.Rim; if (rimConfig != null && rimConfig.DrawIndicatorsOnRim) { DrawIndicatorsOnRim(g, space); } else { DrawIndicatorsOnSquares(g, space); } }
private void DrawRimSquaresCorner(Graphics g, DrawingSpaceUsage space, BoardTheme.RimCorner corner) { bool isSquareLight = corner == BoardTheme.RimCorner.BottomRight || corner == BoardTheme.RimCorner.TopLeft; int rimThickness = space.RimThickness + space.InnerRimTransitionThickness; int x = 0; int y = 0; if (corner == BoardTheme.RimCorner.TopLeft) { y = space.SquaresSpace.Y - rimThickness; x = space.SquaresSpace.X - rimThickness; } else if (corner == BoardTheme.RimCorner.TopRight) { y = space.SquaresSpace.Y - rimThickness; x = space.SquaresSpace.X + space.SquaresSpace.Width; } else if (corner == BoardTheme.RimCorner.BottomLeft) { y = space.SquaresSpace.Y + space.SquaresSpace.Height; x = space.SquaresSpace.X - rimThickness; } else if (corner == BoardTheme.RimCorner.BottomRight) { y = space.SquaresSpace.Y + space.SquaresSpace.Height; x = space.SquaresSpace.X + space.SquaresSpace.Width; } var image = isSquareLight ? BoardImages.LightRimCorner[corner] : BoardImages.DarkRimCorner[corner]; var rect = new Rectangle(x, y, rimThickness, rimThickness); g.DrawImage(image, rect); }
private void DrawRim(Graphics g, DrawingSpaceUsage space) { var rimConfig = BoardImages.Config.Rim; if (rimConfig == null) { return; } DrawRimSquares(g, space); if (rimConfig.InnerTransition != null) { var innerTransitionRects = GetInnerRimTransitionRectangles(space); g.FillRectangles(rimConfig.InnerTransition.Brush, innerTransitionRects); } if (rimConfig.OuterTransition != null) { var outerTransitionRects = GetOuterRimTransitionRectangles(space); g.FillRectangles(rimConfig.OuterTransition.Brush, outerTransitionRects); } }
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; } }
private void DrawIndicatorsOnSquares(Graphics g, DrawingSpaceUsage space) { var indicatorFile = IsBoardFlipped ? 7 - BoardImages.Config.Indicators.RelativeFile : BoardImages.Config.Indicators.RelativeFile; var indicatorRank = IsBoardFlipped ? 7 - BoardImages.Config.Indicators.RelativeRank : BoardImages.Config.Indicators.RelativeRank; int squareSize = space.SquaresSpace.Height / 8; var font = BoardImages.Config.Indicators.GetScaledFont(squareSize); for (int file = 0; file < 8; ++file) { var rank = indicatorRank; var squareRect = GetSquareHitbox(file, rank, space.SquaresSpace); bool isLightSquare = (file + rank) % 2 == 0; var brush = isLightSquare ? BoardImages.Config.Indicators.LightSquareBrush : BoardImages.Config.Indicators.DarkSquareBrush; var text = string.Empty + BoardImages.Config.Indicators.FileIndicators[file]; g.DrawString( text, font, brush, squareRect, BoardImages.Config.Indicators.FileIndicatorFormat ); } for (int rank = 0; rank < 8; ++rank) { var file = indicatorFile; var squareRect = GetSquareHitbox(file, rank, space.SquaresSpace); bool isLightSquare = (file + rank) % 2 == 0; var brush = isLightSquare ? BoardImages.Config.Indicators.LightSquareBrush : BoardImages.Config.Indicators.DarkSquareBrush; if (file == indicatorFile) { var text = string.Empty + BoardImages.Config.Indicators.RankIndicators[7 - rank]; g.DrawString( text, font, brush, squareRect, BoardImages.Config.Indicators.RankIndicatorFormat ); } } }
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 DrawIndicatorsOnRim(Graphics g, DrawingSpaceUsage space) { var rimConfig = BoardImages.Config.Rim; if (rimConfig == null) { return; } var rankIndicatorSides = new List <BoardTheme.RimSide>(); if (rimConfig.IndicatorsOnBothSides) { rankIndicatorSides.Add(BoardTheme.RimSide.Left); rankIndicatorSides.Add(BoardTheme.RimSide.Right); } else { rankIndicatorSides.Add( BoardImages.Config.Indicators.RelativeFile == 0 ? BoardTheme.RimSide.Left : BoardTheme.RimSide.Right ); } var fileIndicatorSides = new List <BoardTheme.RimSide>(); if (rimConfig.IndicatorsOnBothSides) { fileIndicatorSides.Add(BoardTheme.RimSide.Bottom); fileIndicatorSides.Add(BoardTheme.RimSide.Top); } else { fileIndicatorSides.Add( BoardImages.Config.Indicators.RelativeRank == 0 ? BoardTheme.RimSide.Top : BoardTheme.RimSide.Bottom ); } int squareSize = space.SquaresSpace.Height / 8; var font = BoardImages.Config.Indicators.GetScaledFont(squareSize); for (int relativeFile = 0; relativeFile < 8; ++relativeFile) { foreach (var side in fileIndicatorSides) { int relativeRank = side == BoardTheme.RimSide.Top ? 0 : 7; int file = IsBoardFlipped ? 7 - relativeFile : relativeFile; int rank = IsBoardFlipped ? 7 - relativeRank : relativeRank; bool isLightSquare = (file + rank) % 2 == 1; var rect = GetRimSideHitbox(file, rank, side, space); var brush = isLightSquare ? BoardImages.Config.Indicators.LightSquareBrush : BoardImages.Config.Indicators.DarkSquareBrush; var text = string.Empty + BoardImages.Config.Indicators.FileIndicators[relativeFile]; g.DrawString( text, font, brush, rect, BoardImages.Config.Indicators.FileIndicatorFormat ); } } for (int relativeRank = 0; relativeRank < 8; ++relativeRank) { foreach (var side in rankIndicatorSides) { int relativeFile = side == BoardTheme.RimSide.Left ? 0 : 7; int file = IsBoardFlipped ? 7 - relativeFile : relativeFile; int rank = IsBoardFlipped ? 7 - relativeRank : relativeRank; bool isLightSquare = (file + rank) % 2 == 1; var rect = GetRimSideHitbox(file, rank, side, space); var brush = isLightSquare ? BoardImages.Config.Indicators.LightSquareBrush : BoardImages.Config.Indicators.DarkSquareBrush; var text = string.Empty + BoardImages.Config.Indicators.RankIndicators[7 - relativeRank]; g.DrawString( text, font, brush, rect, BoardImages.Config.Indicators.FileIndicatorFormat ); } } }