private void DrawTile(int x, int y, bool addDirtyRect = true, ImageDrawingMode mode = ImageDrawingMode.IgnoreAlpha) { var tile = this.boardTiles[x, y]; var tilePoint = this.GetBoardCoordinatesFromTilePoint(x, y); var tileIsMine = tile.Type == TileType.Mine; if (!tile.Shown || tileIsMine) { if (this.useTileShader) { this.boardTop.FillRectangle(tilePoint.X, tilePoint.Y, tilePoint.X + this.tileWidth, tilePoint.Y + this.tileHeight, Colors.Transparent); } else { this.proxy.DrawImagePixels(this.tileUnsetData, tilePoint.X, tilePoint.Y, mode); } } else { if (!this.useTileShader) { this.proxy.DrawImagePixels(this.tileUnsetData, tilePoint.X, tilePoint.Y, ImageDrawingMode.IgnoreAlpha); this.proxy.DrawImagePixels(this.tileSetData, tilePoint.X, tilePoint.Y, ImageDrawingMode.IgnoreAlpha); } else { this.proxy.DrawImagePixels(this.tileSetData, tilePoint.X, tilePoint.Y, mode); } } if (tile.Type != TileType.EmptySpace) { if (tile.Type != TileType.Unset && tile.Shown) { this.DrawImageWithOffsets(TileBoard.tileTypeImageData[tile.Type], tilePoint, tile.Type == TileType.Mine ? false : true); } if (tile.ExtraTileData == ExtraTileData.Flag) { this.DrawImageWithOffsets(TileBoard.flagImageData, tilePoint); } else if (tile.ExtraTileData == ExtraTileData.QuestionMark) { this.DrawImageWithOffsets(TileBoard.questionMarkImageData, tilePoint); } } if (addDirtyRect) { this.proxy.AddDirtyRect(this.GetTileRectangleFromCoordinates(x, y)); } }