aboutsummaryrefslogtreecommitdiff
path: root/src/game_tab/left_panel/board
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2023-01-06 16:01:11 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2023-01-06 16:01:11 +0100
commit8703e306f7649dbff15eb0b5fe61ab7ee1423c01 (patch)
treec3d0445d24eb595436920dbc1febe74caadc6158 /src/game_tab/left_panel/board
parentb97dedf9f1d2a2e4cf68f9324090f3ceacc294e1 (diff)
Improve BoardCanvas
Diffstat (limited to 'src/game_tab/left_panel/board')
-rw-r--r--src/game_tab/left_panel/board/BoardCanvas.cpp19
-rw-r--r--src/game_tab/left_panel/board/BoardCanvas.hpp4
2 files changed, 20 insertions, 3 deletions
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<short, short, short> ClockTime;
// Drawing buffer (ANIMATIONS)
@@ -62,6 +63,7 @@ typedef struct GameState {
std::string white, black;
std::string board;
std::map<char, std::uint8_t> captures;
+ std::vector<std::string> 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;