aboutsummaryrefslogtreecommitdiff
path: root/src/game_tab/board/BoardCanvas.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game_tab/board/BoardCanvas.hpp')
-rw-r--r--src/game_tab/board/BoardCanvas.hpp68
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()
+};