diff options
Diffstat (limited to 'src/game_tab/board/BoardCanvas.hpp')
| -rw-r--r-- | src/game_tab/board/BoardCanvas.hpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/game_tab/board/BoardCanvas.hpp b/src/game_tab/board/BoardCanvas.hpp new file mode 100644 index 0000000..34c4911 --- /dev/null +++ b/src/game_tab/board/BoardCanvas.hpp @@ -0,0 +1,68 @@ +#pragma once + +#include "Theme.hpp" +#include "ochess.hpp" +#include <map> +#include <tuple> +#include <utility> +#include <vector> +#include <wx/artprov.h> + +// 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<short, short, short> 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<char, std::uint8_t> 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<char, std::uint8_t> captures); + void SetClockTime(short hours, short min, short sec, bool IsBlack); + DECLARE_EVENT_TABLE() +}; |
