From bf485fa577a76731f9eac97de3b0a647cd492e49 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 28 Feb 2022 13:44:27 +0100 Subject: Refactoring game tab --- src/game_tab/left_panel/board/BoardCanvas.hpp | 68 +++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/game_tab/left_panel/board/BoardCanvas.hpp (limited to 'src/game_tab/left_panel/board/BoardCanvas.hpp') diff --git a/src/game_tab/left_panel/board/BoardCanvas.hpp b/src/game_tab/left_panel/board/BoardCanvas.hpp new file mode 100644 index 0000000..34c4911 --- /dev/null +++ b/src/game_tab/left_panel/board/BoardCanvas.hpp @@ -0,0 +1,68 @@ +#pragma once + +#include "Theme.hpp" +#include "ochess.hpp" +#include +#include +#include +#include +#include + +// Local events +wxDECLARE_EVENT(PLAY_MOVE_EVENT, wxCommandEvent); + +// Foreign events +wxDECLARE_EVENT(PREVIOUS_MOVE_EVENT, wxCommandEvent); +wxDECLARE_EVENT(NEXT_MOVE_EVENT, wxCommandEvent); + +#define REFRESH_MOUSE_LOCATION() \ + { \ + const wxPoint pt = wxGetMousePosition(); \ + mouseX = pt.x - this->GetScreenPosition().x; \ + mouseY = pt.y - this->GetScreenPosition().y; \ + } + +#define INIT_CURRENT_SQUARE() \ + std::uint32_t file = 7 - (mouseX - boardX) / square_width; \ + std::uint32_t rank = (mouseY - boardY) / square_width; \ + if (!black_side) { \ + file = 7 - file; \ + rank = 7 - rank; \ + } \ + bool IsCurrentSquareValid = file >= 0 && file <= 7 && rank >= 0 && rank <= 7; + +#define MOUSE_ON(x, y, width, height) \ + (mouseX >= (x) && mouseX <= ((x) + (width)) && mouseY >= (y) && \ + mouseY <= ((y) + (height))) + +#define CAPTURE_FACTOR 0.5 + +typedef std::tuple ClockTime; + +class BoardCanvas : public wxPanel { + Theme *t, *t_captures; + std::string board; + bool black_side, is_dragging, valid_drag, is_black_turn; + std::uint32_t boardX, boardY, square_width, mouseX, mouseY, lastClickX, + lastClickY; + wxSize canvas_size; + wxPoint active_square; + std::map captures; + ClockTime black_time, white_time; + bool frozen,lock_square_size; + +public: + BoardCanvas(wxFrame *parent); + BoardCanvas(wxFrame *parent,std::uint32_t square_width, bool frozen); + void ApplyPreferences(); + void DrawBoard(wxPaintDC &dc); + void OnPaint(wxPaintEvent &event); + void OnKeyEvent(wxKeyEvent &event); + void MouseEvent(wxMouseEvent &event); + void Zoom(std::int32_t zoom); + void Swap(); + void SetupBoard(std::string board, bool is_black_turn, + std::map captures); + void SetClockTime(short hours, short min, short sec, bool IsBlack); + DECLARE_EVENT_TABLE() +}; -- cgit v1.2.3