diff --git a/src/game_tab/left_panel/board/BoardCanvas.cpp b/src/game_tab/left_panel/board/BoardCanvas.cpp index 4684f48..7d6a27a 100644 --- a/src/game_tab/left_panel/board/BoardCanvas.cpp +++ b/src/game_tab/left_panel/board/BoardCanvas.cpp @@ -74,6 +74,7 @@ void BoardCanvas::OnPaint(wxPaintEvent &event) { // Setting up required attributes REFRESH_MOUSE_LOCATION(); square_width = t->GetSquaresSizes(); + piece_width = t->GetPiecesSizes(); canvas_size = this->GetSize(); boardX = (canvas_size.x - (8 * square_width)) / 2; boardY = (canvas_size.y - (8 * square_width)) / 2; @@ -132,6 +133,7 @@ void BoardCanvas::SetupBoard(const GameState &new_gs) { gs.mat_black=new_gs.mat_black; gs.black_time=new_gs.black_time; gs.white_time=new_gs.white_time; + gs.squares_hl=new_gs.squares_hl; Refresh(); } @@ -146,7 +148,6 @@ void BoardCanvas::Animate(const GameState &new_gs, const std::string &src, const DrawBoard(memDC); // Now compute piece start position and translation vector - std::uint32_t piece_width = t->GetPiecesSizes(); std::uint32_t centrer_offset = (square_width - piece_width) / 2; if (!black_side) { prank = 7 - prank; @@ -192,7 +193,6 @@ void BoardCanvas::Animate(const GameState &new_gs, const std::string &src, const } void BoardCanvas::DrawBoard(wxDC &dc) { - std::uint32_t piece_width = t->GetPiecesSizes(); std::uint32_t centrer_offset = (square_width - piece_width) / 2; wxSize numbers_size=dc.GetTextExtent("0"); @@ -221,6 +221,21 @@ void BoardCanvas::DrawBoard(wxDC &dc) { } } + // Draw highlighted squares + for(const std::string &s:gs.squares_hl){ + std::uint8_t srank = s[0]-'a'; + std::uint8_t sfile = s[1]-'1'; + if (!black_side) { + srank = 7 - srank; + sfile = 7 - sfile; + } + if(srank == rank && sfile==file){ + dc.SetPen(wxPen(*wxWHITE, 1)); + dc.SetBrush(wxColour(255,0,0,100)); + dc.DrawRectangle(wxRect(x,y,square_width,square_width)); + } + } + // Draw numbers dc.SetFont(wxFont(*wxNORMAL_FONT).MakeBold()); if(file==7){ // Right numbers diff --git a/src/game_tab/left_panel/board/BoardCanvas.hpp b/src/game_tab/left_panel/board/BoardCanvas.hpp index 2d2b01c..f53bb8f 100644 --- a/src/game_tab/left_panel/board/BoardCanvas.hpp +++ b/src/game_tab/left_panel/board/BoardCanvas.hpp @@ -34,6 +34,7 @@ wxDECLARE_EVENT(PLAY_MOVE_EVENT, wxCommandEvent); #define CAPTURE_FACTOR 0.35 #define SQUARE_NUM_PADDING 5 + typedef std::tuple ClockTime; // Drawing buffer (ANIMATIONS) @@ -62,6 +63,7 @@ typedef struct GameState { std::string white, black; std::string board; std::map captures; + std::vector squares_hl; bool is_black_turn; bool mat_black; bool mat_white; @@ -78,7 +80,7 @@ class BoardCanvas : public wxPanel { // Various canvas state variables bool black_side, is_dragging, valid_drag, is_black_turn; - std::uint32_t boardX, boardY, square_width, mouseX, mouseY, lastClickX, + std::uint32_t boardX, boardY, square_width, piece_width, mouseX, mouseY, lastClickX, lastClickY; wxSize canvas_size; wxPoint active_square;