mirror of
https://gitlab.com/manzerbredes/ochess.git
synced 2025-04-06 01:56:28 +02:00
Improve game tab
This commit is contained in:
commit
e40f98ccda
20 changed files with 391 additions and 214 deletions
|
@ -1 +1 @@
|
|||
Subproject commit 3271972f9eef3069bf80de8be4c057102fff1138
|
||||
Subproject commit 5e18d43a6ba4fd378178418de6b2ca7a67d64c21
|
|
@ -19,6 +19,8 @@ wxBitmap LoadPNG(std::string icon) {
|
|||
return (wxBITMAP_PNG(chesscom_8bits));
|
||||
} else if (icon == "hide") {
|
||||
return (wxBITMAP_PNG(hide));
|
||||
} else if (icon == "mat") {
|
||||
return (wxBITMAP_PNG(mat));
|
||||
}
|
||||
return (wxNullBitmap);
|
||||
}
|
|
@ -7,6 +7,7 @@
|
|||
#include "cburnett_png.hpp"
|
||||
#include "chesscom_8bits_png.hpp"
|
||||
#include "hide_png.hpp"
|
||||
#include "mat_png.hpp"
|
||||
|
||||
wxBitmap LoadPNG(std::string icon, wxSize size);
|
||||
wxBitmap LoadPNG(std::string icon);
|
BIN
src/binres/mat.png
Normal file
BIN
src/binres/mat.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
155
src/binres/mat_png.hpp
Normal file
155
src/binres/mat_png.hpp
Normal file
|
@ -0,0 +1,155 @@
|
|||
static unsigned char mat_png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
|
||||
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32,
|
||||
0x08, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x3f, 0x88, 0xb1, 0x00, 0x00, 0x00,
|
||||
0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0f, 0x33, 0x00, 0x00, 0x0f,
|
||||
0x33, 0x01, 0x61, 0xf4, 0x31, 0x43, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45,
|
||||
0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77,
|
||||
0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, 0x61, 0x70, 0x65, 0x2e,
|
||||
0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x06, 0xb6, 0x49,
|
||||
0x44, 0x41, 0x54, 0x68, 0x81, 0xd5, 0x5a, 0x6b, 0x4c, 0x1c, 0x55, 0x14,
|
||||
0xfe, 0xce, 0x9d, 0xd9, 0xa5, 0xb2, 0x50, 0xd0, 0x82, 0xd5, 0x1f, 0x0a,
|
||||
0xb5, 0x04, 0xdc, 0x56, 0xbb, 0x50, 0x8d, 0x68, 0xb1, 0x65, 0x60, 0x11,
|
||||
0xc5, 0x3f, 0xda, 0xc4, 0x47, 0xac, 0xb6, 0xc6, 0x47, 0x2d, 0x1a, 0x5f,
|
||||
0x31, 0x1a, 0x8d, 0xbf, 0x7c, 0x5b, 0x63, 0x7f, 0x18, 0x63, 0x7d, 0x44,
|
||||
0x8d, 0x89, 0xd8, 0x26, 0x86, 0x68, 0x8c, 0x1a, 0xa3, 0xd0, 0x5d, 0x96,
|
||||
0xad, 0x4d, 0xd5, 0xca, 0xa3, 0xad, 0x62, 0xa8, 0xf4, 0x45, 0x8d, 0x54,
|
||||
0x28, 0xb6, 0xb5, 0x05, 0x5d, 0xba, 0x33, 0xc7, 0x1f, 0xad, 0xc8, 0x30,
|
||||
0x77, 0x76, 0x67, 0x76, 0x16, 0x1b, 0xbf, 0x7f, 0xfb, 0xcd, 0xd9, 0x73,
|
||||
0xcf, 0x77, 0xe7, 0xdc, 0xb9, 0xf7, 0x9e, 0x7b, 0x89, 0x99, 0x91, 0x0d,
|
||||
0x44, 0xa3, 0xd1, 0x12, 0x21, 0x50, 0x07, 0xf0, 0xa5, 0x04, 0x54, 0x00,
|
||||
0x5c, 0x0a, 0xd0, 0x1c, 0x00, 0x79, 0xa7, 0x4c, 0x8e, 0x03, 0x3c, 0x0a,
|
||||
0xd0, 0x5e, 0x06, 0x76, 0x09, 0x60, 0x9b, 0x92, 0xe4, 0x8e, 0x9a, 0x86,
|
||||
0x86, 0xc1, 0x6c, 0xb4, 0x4f, 0x5e, 0x84, 0xc4, 0xe3, 0x6d, 0xf3, 0x58,
|
||||
0x57, 0x56, 0x42, 0xe0, 0x56, 0x30, 0xca, 0x33, 0x74, 0xd3, 0x0f, 0xc2,
|
||||
0x06, 0x66, 0xa5, 0x45, 0xd3, 0xb4, 0x7d, 0x99, 0xc6, 0x92, 0x91, 0x90,
|
||||
0xcd, 0x91, 0xc8, 0x22, 0x43, 0xf0, 0xa3, 0x20, 0x5a, 0x01, 0x40, 0xc9,
|
||||
0xb4, 0x71, 0x13, 0x18, 0x06, 0x08, 0x5f, 0x80, 0xf0, 0x4c, 0x6d, 0x6d,
|
||||
0x78, 0x9b, 0xdb, 0xbf, 0xbb, 0x12, 0x12, 0x89, 0x44, 0xe6, 0xaa, 0x82,
|
||||
0x5f, 0x06, 0xd1, 0x6d, 0x00, 0xc8, 0x6d, 0x63, 0x2e, 0xd0, 0x9a, 0xd4,
|
||||
0xf1, 0x40, 0x38, 0x1c, 0xfe, 0xcd, 0xe9, 0x1f, 0x1c, 0x0b, 0xe9, 0xec,
|
||||
0x8c, 0xde, 0x02, 0xe6, 0xd7, 0x01, 0x14, 0x66, 0x1a, 0x9d, 0x4b, 0x1c,
|
||||
0x26, 0xe0, 0xde, 0x65, 0x5a, 0xf8, 0x43, 0x27, 0xc6, 0x69, 0x85, 0xf4,
|
||||
0xb5, 0xb6, 0xfa, 0x47, 0x8a, 0xe6, 0xbc, 0x06, 0xe2, 0xd5, 0x59, 0x09,
|
||||
0xcf, 0x25, 0x08, 0xfc, 0x66, 0xd1, 0xc8, 0xe1, 0x87, 0x16, 0xdc, 0x78,
|
||||
0xe3, 0x44, 0x4a, 0xbb, 0x54, 0x42, 0xda, 0xda, 0xda, 0x02, 0xb3, 0xfc,
|
||||
0xca, 0x47, 0x0c, 0x5c, 0x9d, 0xf5, 0x08, 0xdd, 0x80, 0x10, 0x9d, 0x35,
|
||||
0x3e, 0xb1, 0xbc, 0xba, 0xa9, 0xe9, 0x0f, 0x5b, 0x13, 0x3b, 0x21, 0x5b,
|
||||
0xb6, 0x6c, 0xc9, 0xd7, 0x4f, 0xfc, 0xd9, 0xce, 0xa0, 0xea, 0x19, 0x0b,
|
||||
0xd0, 0x1d, 0xbe, 0x61, 0x28, 0x57, 0x69, 0x9a, 0x76, 0x5c, 0xf6, 0x50,
|
||||
0x2a, 0xa4, 0xaf, 0xb5, 0xd5, 0x7f, 0xa8, 0xf8, 0xac, 0x4f, 0x33, 0x7d,
|
||||
0x13, 0x87, 0x46, 0x47, 0x31, 0x31, 0x61, 0xce, 0x84, 0xb3, 0x8b, 0x8b,
|
||||
0xa1, 0xaa, 0xaa, 0x89, 0x63, 0x66, 0x0c, 0x1d, 0x3c, 0x68, 0xe2, 0x7c,
|
||||
0xaa, 0x8a, 0xe2, 0xe2, 0x62, 0xb9, 0x63, 0x42, 0x74, 0x7c, 0x7c, 0xe2,
|
||||
0xda, 0xa6, 0xa6, 0xa6, 0xc4, 0xf4, 0x47, 0xaa, 0xcc, 0x7e, 0xa4, 0x68,
|
||||
0xce, 0x6b, 0x00, 0x67, 0x9c, 0x4e, 0xcd, 0x6b, 0xee, 0xc3, 0xa1, 0xd1,
|
||||
0xd1, 0xc9, 0xdf, 0x7e, 0xbf, 0x1f, 0x9f, 0x7f, 0xf6, 0x89, 0xc5, 0x6e,
|
||||
0xef, 0xde, 0x7d, 0xb8, 0xf3, 0x2e, 0xf3, 0xd0, 0xbb, 0xf2, 0xca, 0x1a,
|
||||
0x3c, 0xf7, 0xec, 0xd3, 0x72, 0xc7, 0x8c, 0xfa, 0xc0, 0x19, 0xbe, 0x57,
|
||||
0x00, 0xdc, 0x3b, 0xfd, 0x91, 0x98, 0x4e, 0xc4, 0x3b, 0x36, 0xdd, 0xe4,
|
||||
0x65, 0x60, 0x0f, 0x0e, 0x1e, 0x30, 0x89, 0x00, 0x80, 0x85, 0x0b, 0x17,
|
||||
0xc0, 0xef, 0xf7, 0x5b, 0x6c, 0x7b, 0x7a, 0x7b, 0x2d, 0x5c, 0x65, 0x65,
|
||||
0x28, 0xa5, 0x7f, 0x06, 0x35, 0xc7, 0x63, 0x91, 0x5b, 0xa7, 0xf3, 0x26,
|
||||
0x21, 0x91, 0x48, 0x64, 0x2e, 0x13, 0xbd, 0xe5, 0x2c, 0x64, 0x39, 0x7a,
|
||||
0x25, 0xc1, 0x85, 0x42, 0x8b, 0x6c, 0x6c, 0xb7, 0x5b, 0xb8, 0xaa, 0xaa,
|
||||
0xca, 0xb4, 0x6d, 0x30, 0xb0, 0x7e, 0xf3, 0xe6, 0xaf, 0xce, 0x9d, 0xca,
|
||||
0x99, 0x84, 0xa8, 0x0a, 0xd6, 0xc1, 0xe3, 0x3c, 0xd1, 0xbb, 0x7d, 0x87,
|
||||
0x85, 0xab, 0x0c, 0x59, 0x7b, 0x99, 0x99, 0xb1, 0x63, 0xc7, 0x4e, 0x13,
|
||||
0x37, 0x3b, 0x3f, 0x1f, 0xf3, 0x4a, 0xe7, 0x39, 0x69, 0xa6, 0x40, 0xd7,
|
||||
0xd5, 0x17, 0xa7, 0x12, 0x93, 0x42, 0x36, 0x47, 0xa3, 0x8b, 0x01, 0x58,
|
||||
0x5e, 0x99, 0x5b, 0xec, 0x98, 0x26, 0xc4, 0xe7, 0xf3, 0x21, 0x18, 0xbc,
|
||||
0xd0, 0x62, 0xb7, 0x67, 0xcf, 0x1e, 0x1c, 0x3d, 0x7a, 0xd4, 0xc4, 0x55,
|
||||
0x56, 0x86, 0x20, 0x84, 0xb3, 0x05, 0x03, 0x01, 0xab, 0x3a, 0x3a, 0x3a,
|
||||
0x26, 0x7b, 0x68, 0x52, 0x08, 0x0b, 0x7e, 0x12, 0x1e, 0x97, 0x1d, 0x07,
|
||||
0x0e, 0xc8, 0xc7, 0x47, 0x4e, 0x4e, 0x8e, 0xc5, 0xb6, 0xa7, 0x47, 0x36,
|
||||
0x3e, 0xd2, 0xa7, 0xd5, 0x14, 0x90, 0x38, 0x19, 0x33, 0x80, 0x53, 0x42,
|
||||
0xe2, 0xf1, 0xb6, 0x79, 0xcc, 0x58, 0xee, 0xc6, 0x8b, 0x0c, 0x3d, 0x92,
|
||||
0x9c, 0x97, 0xa5, 0x95, 0x9d, 0xad, 0x93, 0xf1, 0x61, 0x82, 0xc1, 0x37,
|
||||
0x44, 0xa3, 0xd1, 0x12, 0xe0, 0x9f, 0x37, 0x62, 0xa8, 0xab, 0x40, 0xd6,
|
||||
0x2f, 0x98, 0x5b, 0x6c, 0x97, 0x8d, 0x0f, 0xc9, 0x57, 0xc8, 0x30, 0x18,
|
||||
0x3b, 0x77, 0xfe, 0x60, 0xe2, 0x66, 0xcf, 0x9e, 0x8d, 0x92, 0x92, 0x12,
|
||||
0x77, 0x0d, 0x12, 0x84, 0x2a, 0x70, 0x1b, 0x70, 0x6a, 0x42, 0xec, 0xec,
|
||||
0x8c, 0xf4, 0x3b, 0xd9, 0x4f, 0x0c, 0x0c, 0xec, 0xc6, 0x07, 0x1b, 0x36,
|
||||
0xda, 0x3e, 0xdf, 0xb6, 0xed, 0x7b, 0x8c, 0x8d, 0x8d, 0x99, 0xb8, 0x25,
|
||||
0x4b, 0xae, 0xb0, 0x7c, 0x7a, 0x13, 0x89, 0x04, 0xb6, 0x6e, 0xfd, 0xc6,
|
||||
0xc4, 0x15, 0x16, 0x16, 0x48, 0x53, 0xeb, 0x9c, 0x73, 0xe6, 0xa2, 0x79,
|
||||
0xcd, 0x3d, 0xa9, 0xc2, 0xfa, 0xa9, 0x56, 0x0b, 0x2f, 0xa0, 0xaf, 0xdb,
|
||||
0xdb, 0xcf, 0x4f, 0xaa, 0xb4, 0x3f, 0x9d, 0x08, 0x00, 0xf8, 0xf6, 0xdb,
|
||||
0xef, 0xf0, 0xf8, 0x13, 0x4f, 0xa6, 0x37, 0xcc, 0x22, 0xca, 0xca, 0xe6,
|
||||
0xe3, 0x9d, 0xb7, 0x53, 0xcf, 0x08, 0x6a, 0x92, 0x4b, 0x44, 0xd2, 0x27,
|
||||
0xc2, 0xff, 0x51, 0x4c, 0x33, 0x06, 0x5d, 0x81, 0x26, 0x98, 0xf9, 0x92,
|
||||
0xd3, 0x1d, 0x88, 0x57, 0xb0, 0xa0, 0x4b, 0xc4, 0xc9, 0x42, 0xc1, 0xff,
|
||||
0x1b, 0xc4, 0xa8, 0xa0, 0x58, 0x6c, 0xd3, 0x6e, 0x30, 0x2e, 0xf0, 0xe2,
|
||||
0xe8, 0xe7, 0x9f, 0x07, 0xb0, 0xfa, 0x9e, 0x66, 0x13, 0x77, 0x79, 0x75,
|
||||
0x35, 0xd6, 0xae, 0x7d, 0xde, 0x62, 0xdb, 0xf2, 0xc1, 0x06, 0xbc, 0xfb,
|
||||
0xee, 0x7b, 0x26, 0xee, 0xa1, 0x07, 0xef, 0xc7, 0xf2, 0xe5, 0xd7, 0x7b,
|
||||
0x88, 0x80, 0x07, 0x04, 0xb2, 0xb0, 0x75, 0x95, 0x2d, 0xfe, 0xaa, 0xaa,
|
||||
0x6c, 0xe6, 0x0f, 0xef, 0x13, 0xa1, 0x04, 0x54, 0x28, 0xf0, 0x6f, 0xdd,
|
||||
0x29, 0x63, 0xc8, 0x82, 0x93, 0x4d, 0x6e, 0x27, 0x92, 0x49, 0xf4, 0xfd,
|
||||
0xd8, 0x67, 0xe2, 0x0a, 0x0b, 0x0b, 0x50, 0x5a, 0xea, 0x72, 0xfe, 0xb0,
|
||||
0x22, 0xdf, 0xf3, 0x24, 0xa8, 0xeb, 0xba, 0x65, 0x7d, 0x95, 0x97, 0x97,
|
||||
0x87, 0xb2, 0xb2, 0x32, 0x8b, 0x6d, 0xdf, 0x8f, 0x7d, 0xf8, 0x2b, 0x61,
|
||||
0xde, 0x13, 0x85, 0x42, 0x21, 0x10, 0x79, 0x2f, 0xc8, 0x08, 0x00, 0xd2,
|
||||
0xad, 0xa3, 0x53, 0xec, 0xda, 0xb5, 0x0b, 0x63, 0xe3, 0xe3, 0x26, 0x2e,
|
||||
0x14, 0x5a, 0x04, 0x21, 0xac, 0x7d, 0x24, 0x4f, 0xab, 0xd4, 0xfb, 0x0f,
|
||||
0x87, 0x38, 0x26, 0x00, 0x1c, 0xf1, 0xe2, 0xa1, 0xbb, 0xdb, 0x59, 0x5a,
|
||||
0x01, 0xce, 0x53, 0xd0, 0x3d, 0xf8, 0x08, 0xc5, 0x3a, 0x36, 0xb5, 0x03,
|
||||
0x68, 0x48, 0x65, 0x76, 0xf7, 0xea, 0x35, 0x18, 0x18, 0xd8, 0x9d, 0x85,
|
||||
0x06, 0x9d, 0xe3, 0xa5, 0xb5, 0x2f, 0xa0, 0xba, 0xfa, 0x32, 0x47, 0xb6,
|
||||
0x04, 0x7c, 0x25, 0x18, 0xe8, 0x9f, 0xe1, 0x98, 0x66, 0x1c, 0x4c, 0xe8,
|
||||
0x17, 0x44, 0xd4, 0x75, 0xba, 0x03, 0xf1, 0x0a, 0x32, 0xb8, 0x4b, 0xa8,
|
||||
0x27, 0x8c, 0xc8, 0xe9, 0x0e, 0xc4, 0x2b, 0x0c, 0x52, 0xa3, 0x6a, 0x4d,
|
||||
0x43, 0xc3, 0x60, 0x67, 0x2c, 0xd2, 0x8f, 0x14, 0x4b, 0x95, 0x05, 0xc1,
|
||||
0x20, 0x0a, 0x0a, 0x0a, 0x2c, 0xfc, 0xc0, 0xc0, 0x6e, 0xcb, 0x76, 0x35,
|
||||
0x18, 0x0c, 0x22, 0x37, 0xf7, 0x0c, 0x8b, 0x6d, 0x77, 0x77, 0x0f, 0xa6,
|
||||
0xd6, 0xd0, 0x72, 0x72, 0x72, 0x70, 0xd1, 0x45, 0x0b, 0x6d, 0x83, 0x93,
|
||||
0xb5, 0x27, 0x05, 0xa1, 0x4f, 0xab, 0xd5, 0x7e, 0x39, 0x59, 0xd7, 0x62,
|
||||
0x6c, 0x04, 0xc1, 0xa6, 0x98, 0x04, 0x3c, 0xf2, 0xc8, 0xc3, 0x52, 0x7e,
|
||||
0xc5, 0x8a, 0x95, 0x26, 0x21, 0x8a, 0xa2, 0x60, 0xdd, 0xba, 0x97, 0x10,
|
||||
0xc8, 0xcd, 0x35, 0xd9, 0x0d, 0x0e, 0x1e, 0xc0, 0xaa, 0xdb, 0xef, 0x30,
|
||||
0x71, 0x8b, 0x17, 0x57, 0xe1, 0xc5, 0x17, 0x9e, 0x73, 0x16, 0x6c, 0x2a,
|
||||
0x18, 0xd8, 0x00, 0x9c, 0xda, 0x21, 0x32, 0x29, 0xef, 0x83, 0x61, 0xb8,
|
||||
0xf9, 0xff, 0xf0, 0xf0, 0x08, 0x7e, 0x1d, 0x1a, 0x32, 0x71, 0xe5, 0xe5,
|
||||
0xe5, 0x16, 0x11, 0x80, 0xbc, 0x44, 0x94, 0xa5, 0xf9, 0x43, 0xd7, 0x99,
|
||||
0xfe, 0x15, 0xa2, 0x69, 0xda, 0x3e, 0x10, 0x3e, 0x76, 0xe3, 0xa1, 0xbb,
|
||||
0xa7, 0xc7, 0xc2, 0x55, 0xd9, 0x04, 0x27, 0xad, 0x5f, 0x65, 0x47, 0x48,
|
||||
0x6b, 0x7d, 0x7d, 0xfd, 0x7e, 0x60, 0x6a, 0x15, 0x05, 0xc6, 0xf3, 0x00,
|
||||
0x1c, 0x9f, 0xfa, 0x38, 0xdd, 0x9f, 0x03, 0xb0, 0xd4, 0xaf, 0x02, 0x81,
|
||||
0x80, 0x74, 0x09, 0xe3, 0x12, 0x2c, 0x74, 0x4c, 0xd6, 0xb6, 0x26, 0x85,
|
||||
0x68, 0xda, 0x55, 0xbd, 0x20, 0xb4, 0x38, 0xf5, 0x32, 0x3d, 0x5d, 0x14,
|
||||
0x45, 0x91, 0x0e, 0xde, 0xfd, 0xfb, 0x07, 0x2d, 0x25, 0x22, 0xbb, 0x25,
|
||||
0x8c, 0x2b, 0x10, 0xde, 0x5b, 0x1a, 0x0e, 0x4f, 0xf6, 0xa6, 0xc9, 0x9b,
|
||||
0x2f, 0xa1, 0x3f, 0x06, 0xe0, 0x70, 0x3a, 0x1f, 0xc3, 0xc3, 0x23, 0x18,
|
||||
0x1a, 0x32, 0x57, 0xd1, 0x2b, 0x2a, 0xca, 0x91, 0x2b, 0x1d, 0x1f, 0xd6,
|
||||
0xb4, 0xb2, 0x2b, 0xa1, 0xba, 0xc0, 0x61, 0x21, 0x26, 0x9e, 0x98, 0x4a,
|
||||
0x98, 0x84, 0x2c, 0x69, 0x6c, 0x1c, 0x06, 0xd1, 0x9a, 0x74, 0x5e, 0x64,
|
||||
0xe3, 0xc3, 0x2e, 0xad, 0x64, 0x03, 0xdd, 0xeb, 0xfa, 0x8a, 0x98, 0xef,
|
||||
0x5f, 0xba, 0xb4, 0x69, 0x64, 0x2a, 0x67, 0x79, 0xbf, 0xb5, 0xb5, 0xf5,
|
||||
0xad, 0x04, 0x7e, 0x33, 0x95, 0x23, 0x59, 0x2f, 0xdb, 0xd5, 0x77, 0xa7,
|
||||
0xd7, 0x82, 0x03, 0x81, 0x00, 0xca, 0xe6, 0xcf, 0x77, 0x18, 0xb2, 0x15,
|
||||
0x0c, 0xac, 0x5f, 0x56, 0xd7, 0x60, 0xa9, 0x49, 0x49, 0x0f, 0x7a, 0xba,
|
||||
0xba, 0xba, 0x7c, 0xc7, 0x8f, 0x1d, 0xf9, 0x14, 0xc0, 0x35, 0x32, 0x67,
|
||||
0x4e, 0x0f, 0x72, 0x0c, 0x83, 0x71, 0xf0, 0x37, 0x73, 0x0a, 0xfa, 0x7d,
|
||||
0x3e, 0x14, 0x15, 0x15, 0xb9, 0x16, 0x00, 0x00, 0x04, 0x8a, 0x14, 0x8d,
|
||||
0x8c, 0x5e, 0x2b, 0x3b, 0x4f, 0xb4, 0x3d, 0x7a, 0x8b, 0xc5, 0x62, 0x79,
|
||||
0x04, 0xbd, 0x1d, 0xc0, 0xe5, 0x19, 0xb5, 0x9a, 0x7d, 0x6c, 0x65, 0x28,
|
||||
0x8d, 0x76, 0x47, 0x6f, 0xb6, 0x9f, 0x0e, 0x4d, 0xd3, 0x8e, 0x27, 0x26,
|
||||
0xf4, 0x06, 0x00, 0x5f, 0xce, 0x58, 0x68, 0x0e, 0x41, 0xa0, 0x88, 0xea,
|
||||
0x9b, 0x75, 0xb5, 0x9d, 0x08, 0x20, 0x85, 0x10, 0x00, 0x68, 0x6c, 0x6c,
|
||||
0x1c, 0x2b, 0x1e, 0xf9, 0xfd, 0xba, 0x74, 0x63, 0x66, 0x26, 0xc1, 0xc0,
|
||||
0xfa, 0x40, 0x7e, 0x41, 0x53, 0x4d, 0x4d, 0xcd, 0xb1, 0x54, 0x76, 0x8e,
|
||||
0x2f, 0x0c, 0xc4, 0x63, 0x91, 0x9b, 0x19, 0x78, 0x03, 0xc0, 0x99, 0xd9,
|
||||
0x08, 0x30, 0x2d, 0x08, 0xbf, 0x03, 0xd4, 0x5c, 0x5b, 0x5b, 0xdf, 0xea,
|
||||
0xc4, 0xdc, 0xf1, 0xac, 0xb4, 0x4c, 0x0b, 0x7f, 0xe8, 0x4f, 0x24, 0xcb,
|
||||
0x40, 0x78, 0xd5, 0xed, 0xba, 0xcc, 0x25, 0x18, 0xcc, 0x2d, 0xbe, 0x84,
|
||||
0x1e, 0x74, 0x2a, 0x02, 0xc8, 0xf0, 0x52, 0x4d, 0x3c, 0xbe, 0xe9, 0x62,
|
||||
0xd6, 0xf1, 0xd8, 0x4c, 0x5c, 0xaa, 0x31, 0x58, 0x3c, 0x55, 0x57, 0x57,
|
||||
0xe7, 0x7a, 0xb3, 0xe7, 0xe9, 0x9a, 0xd3, 0xc9, 0x3b, 0x5a, 0xc6, 0x4a,
|
||||
0x02, 0xad, 0x00, 0x10, 0xcc, 0xc8, 0x09, 0xa1, 0x8f, 0x98, 0x36, 0x2a,
|
||||
0x49, 0xa3, 0xc5, 0xcb, 0xdd, 0x2d, 0x4f, 0x42, 0xa6, 0x22, 0x1e, 0x6f,
|
||||
0x3b, 0x0f, 0xba, 0xa8, 0x63, 0x88, 0x4b, 0x21, 0x8c, 0x0a, 0x80, 0x4a,
|
||||
0x01, 0x14, 0xc1, 0x74, 0xf1, 0x0c, 0x87, 0x88, 0xb1, 0x97, 0x09, 0xfd,
|
||||
0x64, 0x70, 0x97, 0x41, 0x6a, 0x54, 0xd3, 0xb4, 0x5f, 0xb2, 0xd1, 0xfe,
|
||||
0xdf, 0x10, 0xf6, 0x83, 0xdb, 0x46, 0x42, 0xfd, 0xc8, 0x00, 0x00, 0x00,
|
||||
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
|
@ -92,6 +92,14 @@ void Game::SetMoveAsMainline(HalfMove *m) {
|
|||
}
|
||||
}
|
||||
|
||||
bool Game::IsCheckmate(bool forBlack){
|
||||
arbiter.Setup(GetFen());
|
||||
if(forBlack){
|
||||
return arbiter.IsBlackTurn() && arbiter.IsCheckMate();
|
||||
}
|
||||
return !arbiter.IsBlackTurn() && arbiter.IsCheckMate();
|
||||
}
|
||||
|
||||
bool Game::Play(std::string move) {
|
||||
wxLogDebug("Playing move %s", move);
|
||||
std::string fen = GetFen();
|
||||
|
@ -142,6 +150,12 @@ void Game::Next() {
|
|||
}
|
||||
}
|
||||
|
||||
HalfMove *Game::GetNextMove(){
|
||||
if(current!=nullptr)
|
||||
return current->GetMainline();
|
||||
return moves;
|
||||
}
|
||||
|
||||
void Game::SetCurrent(HalfMove *m) { current = m; }
|
||||
|
||||
std::string Game::GetFen() {
|
||||
|
|
|
@ -25,11 +25,13 @@ public:
|
|||
void SetTag(std::string tagname, std::string value);
|
||||
void DeleteTag(std::string tagname);
|
||||
HalfMove *GetCurrentMove();
|
||||
HalfMove *GetNextMove();
|
||||
HalfMove *GetMoves();
|
||||
std::string GetFen();
|
||||
std::string GetResult();
|
||||
bool Play(std::string move);
|
||||
bool IsBlackToPlay();
|
||||
bool IsCheckmate(bool forBlack);
|
||||
void Previous();
|
||||
void Next();
|
||||
void DeleteMove(HalfMove *m);
|
||||
|
|
|
@ -21,7 +21,7 @@ GameTab::GameTab(wxFrame *parent, std::shared_ptr<Game> game)
|
|||
|
||||
// Refresh panels
|
||||
RefreshTabTitle();
|
||||
board_panel->Notify(false, false);
|
||||
board_panel->Notify();
|
||||
editor_panel->Notify();
|
||||
|
||||
board_panel->Bind(wxEVT_TOOL,&GameTab::OnToolClick,this);
|
||||
|
@ -57,6 +57,7 @@ void GameTab::OnGameChange(wxCommandEvent &event) {
|
|||
else {
|
||||
editor_panel->Notify();
|
||||
board_panel->Notify();
|
||||
RefreshTabTitle();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
#include "HalfMove.hpp"
|
||||
|
||||
HalfMove::HalfMove(std::string move_absolute,std::string move_san) : capture(' ') {
|
||||
this->move_absolute=move_absolute;
|
||||
SetAbsoluteMove(move_absolute);
|
||||
this->move = move_san;
|
||||
fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
|
||||
}
|
||||
|
||||
HalfMove::HalfMove(std::string move_absolute, std::string move_san, std::string fen) : fen(fen), capture(' ') {
|
||||
this->move_absolute=move_absolute;
|
||||
SetAbsoluteMove(move_absolute);
|
||||
this->move = move_san;
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,8 @@ HalfMove::~HalfMove() {
|
|||
}
|
||||
|
||||
HalfMove::HalfMove(HalfMove *m){
|
||||
move_absolute=m->move_absolute;
|
||||
src=m->src;
|
||||
dst=m->dst;
|
||||
move=m->move;
|
||||
fen=m->fen;
|
||||
capture=m->capture;
|
||||
|
@ -137,6 +138,11 @@ void HalfMove::SetAsMainline() {
|
|||
|
||||
HalfMove *HalfMove::GetMainline() { return (mainline); }
|
||||
|
||||
void HalfMove::SetAbsoluteMove(const std::string &move_absolute){
|
||||
this->src=move_absolute.substr(0,2);
|
||||
this->dst=move_absolute.substr(2,2);
|
||||
}
|
||||
|
||||
HalfMove::HalfMove(pgnp::HalfMove *m) : capture(' ') {
|
||||
this->move = m->move;
|
||||
this->nag = m->NAG;
|
||||
|
@ -151,6 +157,11 @@ HalfMove::HalfMove(pgnp::HalfMove *m) : capture(' ') {
|
|||
}
|
||||
}
|
||||
|
||||
void HalfMove::GetAbsoluteMove(std::string &src,std::string &dst){
|
||||
src=this->src;
|
||||
dst=this->dst;
|
||||
}
|
||||
|
||||
void HalfMove::SetFen(std::string fen) { this->fen = fen; }
|
||||
|
||||
void HalfMove::Promote() {
|
||||
|
@ -177,6 +188,23 @@ void HalfMove::Promote() {
|
|||
}
|
||||
}
|
||||
|
||||
bool HalfMove::HasParent(HalfMove*m){
|
||||
return m==parent;
|
||||
}
|
||||
|
||||
bool HalfMove::HasChild(HalfMove*m){
|
||||
if(m==nullptr)
|
||||
return false;
|
||||
if(mainline==m){
|
||||
return true;
|
||||
}
|
||||
for(auto var: variations){
|
||||
if(var == m)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool HalfMove::IsVariation() {
|
||||
HalfMove *m = this;
|
||||
HalfMove *p = HalfMove::parent;
|
||||
|
@ -198,8 +226,9 @@ bool HalfMove::IsABlackMove() { return (IsBlack); }
|
|||
|
||||
void HalfMove::BuildAndVerify(HalfMove *m, std::string fen) {
|
||||
arbiter.Setup(fen);
|
||||
m->move_absolute=arbiter.ParseSAN(m->move);
|
||||
bool work = arbiter.Play(m->move_absolute,arbiter.ParseSANPromotion(m->move));
|
||||
std::string move_absolute=arbiter.ParseSAN(m->move);
|
||||
m->SetAbsoluteMove(move_absolute);
|
||||
bool work = arbiter.Play(move_absolute,arbiter.ParseSANPromotion(m->move));
|
||||
if (!work) {
|
||||
wxLogDebug("Bug! %s", m->move);
|
||||
}
|
||||
|
|
|
@ -21,11 +21,9 @@ class HalfMove : public cgeditor::CGEHalfMove {
|
|||
std::string fen;
|
||||
char capture;
|
||||
void BuildAndVerify(HalfMove *m, std::string fen);
|
||||
std::string move_absolute;
|
||||
std::string src,dst;
|
||||
|
||||
public:
|
||||
|
||||
|
||||
HalfMove(HalfMove *m);
|
||||
HalfMove(std::string move_absolute,std::string move_san);
|
||||
HalfMove(std::string move_absolute,std::string move_san, std::string fen);
|
||||
|
@ -46,6 +44,8 @@ public:
|
|||
/// @brief Check if current half move is within a variation
|
||||
bool IsVariation();
|
||||
/// @brief Get the root of a variation
|
||||
bool HasParent(HalfMove*m);
|
||||
bool HasChild(HalfMove*m);
|
||||
HalfMove *GetRoot();
|
||||
/// @brief Get parent of the current move
|
||||
HalfMove *GetParent();
|
||||
|
@ -60,7 +60,8 @@ public:
|
|||
void SetFen(std::string fen);
|
||||
void SetCapture(char c);
|
||||
bool IsABlackMove();
|
||||
std::string GetAbsoluteMove(){return move_absolute;};
|
||||
void GetAbsoluteMove(std::string &src,std::string &dst);
|
||||
void SetAbsoluteMove(const std::string &move_absolute);
|
||||
|
||||
/**
|
||||
* @brief Build current move
|
||||
|
|
|
@ -21,6 +21,7 @@ GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, std::shared_ptr<Game> game)
|
|||
|
||||
// Configure FEN field
|
||||
fen_text_field->SetFont(wxFont(*wxNORMAL_FONT).Bold().Larger());
|
||||
last_move=game->GetCurrentMove();
|
||||
|
||||
// Bind events:
|
||||
Bind(PLAY_MOVE_EVENT, &GameTabLeftPanel::OnPlay, this, wxID_ANY);
|
||||
|
@ -31,11 +32,11 @@ GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, std::shared_ptr<Game> game)
|
|||
Bind(wxEVT_KEY_DOWN, [p=this](wxKeyEvent &e){
|
||||
if(e.GetKeyCode() == WXK_RIGHT){
|
||||
p->game->Next();
|
||||
p->Notify(true,false);
|
||||
p->Notify();
|
||||
p->repeat=true;
|
||||
} else if(e.GetKeyCode() == WXK_LEFT){
|
||||
p->game->Previous();
|
||||
p->Notify(true,true);
|
||||
p->Notify();
|
||||
p->repeat=true;
|
||||
}
|
||||
// Notify other classes
|
||||
|
@ -46,10 +47,10 @@ GameTabLeftPanel::GameTabLeftPanel(wxFrame *parent, std::shared_ptr<Game> game)
|
|||
Bind(wxEVT_MOUSEWHEEL, [p=this](wxMouseEvent& e){
|
||||
if(e.GetWheelRotation()<0){
|
||||
p->game->Next();
|
||||
p->Notify(true,false);
|
||||
p->Notify();
|
||||
}else {
|
||||
p->game->Previous();
|
||||
p->Notify(true,true);
|
||||
p->Notify();
|
||||
}
|
||||
// Notify other classes
|
||||
wxCommandEvent event(GAME_CHANGE, p->GetId());
|
||||
|
@ -67,54 +68,53 @@ void GameTabLeftPanel::OnPlay(wxCommandEvent &event) {
|
|||
event.SetEventObject(this);
|
||||
ProcessEvent(event);
|
||||
}
|
||||
// Refresh board canvas:
|
||||
Notify();
|
||||
Notify(true); // Redraw event is move failed! Otherwise piece not resets to it initial position after dragging
|
||||
}
|
||||
|
||||
void GameTabLeftPanel::Notify(bool animate, bool backward) {
|
||||
void GameTabLeftPanel::Notify(bool skip_animation) {
|
||||
// Update fen and captures
|
||||
std::string fen = game->GetFen();
|
||||
std::map<char, std::uint8_t> captures;
|
||||
bool animate=false;
|
||||
HalfMove *m = game->GetCurrentMove();
|
||||
if (m != nullptr) {
|
||||
std::string src,dst;
|
||||
// Update capture and check if we should to animations during moves change:
|
||||
if (m){
|
||||
captures = m->GetLineCaptures();
|
||||
if(m->HasParent(last_move)){
|
||||
m->GetAbsoluteMove(src,dst);
|
||||
animate=true;
|
||||
}else if(m->HasChild(last_move)){
|
||||
// Accessing last_move here is safe since it is still
|
||||
// in the tree of moves (since HasChild found it so not deleted)
|
||||
last_move->GetAbsoluteMove(dst,src);
|
||||
animate=true;
|
||||
}
|
||||
} else if(game->GetNextMove()){ // First move animation
|
||||
HalfMove *next=game->GetNextMove();
|
||||
if(next==last_move){
|
||||
game->GetNextMove()->GetAbsoluteMove(dst,src);
|
||||
animate=true;
|
||||
}
|
||||
}
|
||||
|
||||
// Update board canvas:
|
||||
if(!animate){
|
||||
if(m){
|
||||
last_absolute_move=m->GetAbsoluteMove();
|
||||
}
|
||||
board_canvas->SetupBoard(chessarbiter::FENParser::Parse(fen).board,
|
||||
game->IsBlackToPlay(), captures,
|
||||
game->GetTag("White"),game->GetTag("Black"));
|
||||
GameState gs;
|
||||
gs.board=chessarbiter::FENParser::Parse(fen).board;
|
||||
gs.is_black_turn=game->IsBlackToPlay();
|
||||
gs.captures=captures;
|
||||
gs.white=game->GetTag("White");
|
||||
gs.black=game->GetTag("Black");
|
||||
gs.mat_black=game->IsCheckmate(true);
|
||||
gs.mat_white=game->IsCheckmate(false);
|
||||
if(skip_animation || !animate){
|
||||
board_canvas->SetupBoard(gs);
|
||||
}
|
||||
else{
|
||||
if(backward && last_absolute_move.size()>0){
|
||||
std::string dst=last_absolute_move.substr(0,2);
|
||||
std::string src=last_absolute_move.substr(2,2);
|
||||
board_canvas->Animate(chessarbiter::FENParser::Parse(fen).board,
|
||||
game->IsBlackToPlay(), captures,src,dst,repeat);
|
||||
if(m){
|
||||
last_absolute_move=m->GetAbsoluteMove();
|
||||
}
|
||||
}
|
||||
else if(!backward && m){
|
||||
std::string new_absolute_move=m->GetAbsoluteMove();
|
||||
if(last_absolute_move!=new_absolute_move){
|
||||
last_absolute_move=new_absolute_move;
|
||||
std::string src=last_absolute_move.substr(0,2);
|
||||
std::string dst=last_absolute_move.substr(2,2);
|
||||
board_canvas->Animate(chessarbiter::FENParser::Parse(fen).board,
|
||||
game->IsBlackToPlay(), captures,src,dst,repeat);
|
||||
}
|
||||
}
|
||||
// If m undefined
|
||||
if(!m){
|
||||
last_absolute_move="";
|
||||
}
|
||||
board_canvas->Animate(gs, src,dst,repeat);
|
||||
}
|
||||
|
||||
// Update last move
|
||||
last_move=m;
|
||||
// Update fen field:
|
||||
fen_text_field->SetValue(game->GetFen());
|
||||
}
|
||||
|
|
|
@ -11,12 +11,12 @@ wxDECLARE_EVENT(GAME_CHANGE, wxCommandEvent);
|
|||
class GameTabLeftPanel : public TabGameLeftPanel {
|
||||
std::shared_ptr<Game> game;
|
||||
BoardCanvas *board_canvas;
|
||||
std::string last_absolute_move;
|
||||
bool repeat;
|
||||
HalfMove *last_move;
|
||||
|
||||
public:
|
||||
GameTabLeftPanel(wxFrame *parent, std::shared_ptr<Game> game);
|
||||
void Notify(bool animate=false,bool backward=false);
|
||||
void Notify(bool skip_animation=false);
|
||||
void OnPlay(wxCommandEvent &event);
|
||||
void OnGotoMove(wxCommandEvent &event);
|
||||
void OnRefreshBoard(wxCommandEvent &event);
|
||||
|
|
|
@ -3,25 +3,50 @@
|
|||
wxDEFINE_EVENT(PLAY_MOVE_EVENT, wxCommandEvent);
|
||||
|
||||
BoardCanvas::BoardCanvas(wxFrame *parent)
|
||||
: wxPanel(parent), black_side(false), is_black_turn(true), frozen(false),
|
||||
: wxPanel(parent), black_side(false), frozen(false),
|
||||
lock_square_size(false), t(new Theme()), t_captures(new Theme()) {
|
||||
board = "rnbqkbnrpppppppp PPPPPPPPRNBQKBNR";
|
||||
is_dragging = false;
|
||||
valid_drag = false;
|
||||
adata.reuseBuffer=false;
|
||||
adata.buffer=nullptr;
|
||||
t_captures->ResizePieces(t->GetPiecesSizes() * CAPTURE_FACTOR);
|
||||
SetClockTime(-1, -1, -1, false);
|
||||
SetClockTime(-1, -1, -1, true);
|
||||
ApplyPreferences();
|
||||
// The following should be called when using an EVT_PAINT handler
|
||||
SetBackgroundStyle(wxBG_STYLE_PAINT);
|
||||
// Init animation data
|
||||
adata.duration=200;
|
||||
adata.duration_fast=80;
|
||||
adata.fps=30;
|
||||
adata.buffer=new wxBitmap(500,500,32);
|
||||
adata.reuseBuffer=false;
|
||||
adata.buffer=nullptr;
|
||||
// Init game state
|
||||
gs.is_black_turn=false;
|
||||
gs.board = "rnbqkbnrpppppppp PPPPPPPPRNBQKBNR";
|
||||
gs.mat_black=false;
|
||||
gs.mat_white=false;
|
||||
// Init clocks
|
||||
SetClockTime(-1, -1, -1, false);
|
||||
SetClockTime(-1, -1, -1, true);
|
||||
// Init capture pieces
|
||||
t_captures->ResizePieces(t->GetPiecesSizes() * CAPTURE_FACTOR);
|
||||
// Load preferences
|
||||
ApplyPreferences();
|
||||
// The following should be called when using an EVT_PAINT handler
|
||||
SetBackgroundStyle(wxBG_STYLE_PAINT);
|
||||
// Let GameTableLeftPanel process keyboard events:
|
||||
Bind(wxEVT_KEY_DOWN, [p=this](wxKeyEvent &e){e.ResumePropagation(1);e.Skip();});
|
||||
Bind(wxEVT_KEY_UP, [p=this](wxKeyEvent &e){e.ResumePropagation(1);e.Skip();});
|
||||
Bind(wxEVT_PAINT, &BoardCanvas::OnPaint, this);
|
||||
Bind(wxEVT_SIZE, &BoardCanvas::OnResize, this);
|
||||
// Mouse events:
|
||||
Bind(wxEVT_MOTION, &BoardCanvas::MouseEvent, this);
|
||||
Bind(wxEVT_LEFT_DOWN, &BoardCanvas::MouseEvent, this);
|
||||
Bind(wxEVT_LEFT_UP, &BoardCanvas::MouseEvent, this);
|
||||
}
|
||||
|
||||
void BoardCanvas::OnResize(wxSizeEvent &e){
|
||||
wxSize size=e.GetSize();
|
||||
if(size.x>100 && size.y>100){
|
||||
// Setup buffer (use for animations)
|
||||
if(adata.buffer!=nullptr)
|
||||
free(adata.buffer);
|
||||
adata.buffer=new wxBitmap(size.x,size.y,32);
|
||||
}
|
||||
}
|
||||
|
||||
BoardCanvas::~BoardCanvas() {
|
||||
|
@ -43,7 +68,6 @@ BoardCanvas::BoardCanvas(wxFrame *parent, std::uint32_t square_width,
|
|||
void BoardCanvas::OnPaint(wxPaintEvent &event) {
|
||||
wxBufferedPaintDC dc(this);
|
||||
dc.SetBackground(*wxWHITE_BRUSH);
|
||||
dc.Clear();
|
||||
|
||||
if(!adata.reuseBuffer){
|
||||
// Setting up required attributes
|
||||
|
@ -56,12 +80,8 @@ void BoardCanvas::OnPaint(wxPaintEvent &event) {
|
|||
boardX = 0;
|
||||
if (boardY > canvas_size.y)
|
||||
boardY = 0;
|
||||
|
||||
// Setup buffer (later use for animations)
|
||||
if(adata.buffer!=nullptr)
|
||||
free(adata.buffer);
|
||||
adata.buffer=new wxBitmap(canvas_size.x,canvas_size.y,32);
|
||||
wxMemoryDC memDC(*adata.buffer);
|
||||
memDC.Clear();
|
||||
DrawBoard(memDC);
|
||||
dc.Blit(0,0,canvas_size.x,canvas_size.y,(wxDC*)&memDC,0,0);
|
||||
}
|
||||
|
@ -73,7 +93,7 @@ void BoardCanvas::OnPaint(wxPaintEvent &event) {
|
|||
dc.DrawBitmap(*t->Get(adata.piece_moved),
|
||||
adata.src.x + adata.frame*(adata.transVect.x/adata.frames),
|
||||
adata.src.y + adata.frame*(adata.transVect.y/adata.frames), false);
|
||||
// end drawing
|
||||
// End drawing
|
||||
adata.frame++;
|
||||
}
|
||||
}
|
||||
|
@ -100,24 +120,26 @@ void BoardCanvas::ApplyPreferences() {
|
|||
Refresh();
|
||||
}
|
||||
|
||||
void BoardCanvas::SetupBoard(std::string board, bool is_black_turn,
|
||||
std::map<char, std::uint8_t> captures,
|
||||
std::string white_player, std::string black_player) {
|
||||
this->board = board;
|
||||
this->is_black_turn = is_black_turn;
|
||||
this->captures = captures;
|
||||
this->white_player=white_player;
|
||||
this->black_player=black_player;
|
||||
void BoardCanvas::SetupBoard(const GameState &new_gs) {
|
||||
gs.board = new_gs.board;
|
||||
gs.is_black_turn = new_gs.is_black_turn;
|
||||
gs.captures = new_gs.captures;
|
||||
gs.white=new_gs.white;
|
||||
gs.black=new_gs.black;
|
||||
gs.mat_white=new_gs.mat_white;
|
||||
gs.mat_black=new_gs.mat_black;
|
||||
gs.black_time=new_gs.black_time;
|
||||
gs.white_time=new_gs.white_time;
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void BoardCanvas::Animate(const std::string &board, bool is_black_turn, std::map<char, std::uint8_t> captures, std::string src, std::string dst,bool faster){
|
||||
void BoardCanvas::Animate(const GameState &new_gs, std::string src, std::string dst, bool faster){
|
||||
std::uint8_t pfile = src[0]-'a';
|
||||
std::uint8_t prank = src[1]-'1';
|
||||
adata.piece_moved = this->board[pfile + 8 * (7-prank)]; // Piece to move
|
||||
adata.piece_moved = gs.board[pfile + 8 * (7-prank)]; // Piece to move
|
||||
|
||||
// Now remove the piece that will be moved
|
||||
this->board[pfile + 8 * (7-prank)]=' ';
|
||||
gs.board[pfile + 8 * (7-prank)]=' ';
|
||||
wxMemoryDC memDC(*adata.buffer);
|
||||
DrawBoard(memDC);
|
||||
|
||||
|
@ -164,7 +186,7 @@ void BoardCanvas::Animate(const std::string &board, bool is_black_turn, std::map
|
|||
}
|
||||
adata.duration=faster ? duration_backup : duration_backup;
|
||||
adata.reuseBuffer=false;
|
||||
SetupBoard(board, is_black_turn, captures,white_player,black_player);
|
||||
SetupBoard(new_gs);
|
||||
}
|
||||
|
||||
void BoardCanvas::DrawBoard(wxDC &dc) {
|
||||
|
@ -217,7 +239,7 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
|
|||
}
|
||||
std::uint32_t px = x + centrer_offset;
|
||||
std::uint32_t py = y + centrer_offset;
|
||||
char piece = board[(7 - pfile) + 8 * prank];
|
||||
char piece = gs.board[(7 - pfile) + 8 * prank];
|
||||
if (is_dragging && (7 - pfile) == active_square.x &&
|
||||
(7 - prank) == active_square.y) {
|
||||
dp = piece;
|
||||
|
@ -228,6 +250,8 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
|
|||
}
|
||||
if (piece != ' ') {
|
||||
dc.DrawBitmap(*t->Get(piece), px, py, false);
|
||||
if((piece == 'k' && gs.mat_black) || (piece == 'K' && gs.mat_white))
|
||||
dc.DrawBitmap(*t->Get('#'), x+square_width/2+centrer_offset, y+centrer_offset, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -236,7 +260,7 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
|
|||
dc.SetPen(wxPen(*wxBLACK, 3));
|
||||
std::uint32_t badgeY = boardY;
|
||||
std::uint32_t badgeWidth = square_width / 2;
|
||||
if (is_black_turn) {
|
||||
if (gs.is_black_turn) {
|
||||
dc.SetBrush(*wxBLACK_BRUSH);
|
||||
if (black_side) {
|
||||
badgeY = boardY + (8 * square_width) - badgeWidth;
|
||||
|
@ -265,15 +289,15 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
|
|||
offsetYPlayerName = offsetY+captures_size;
|
||||
}
|
||||
for (char p : {'P', 'N', 'B', 'R', 'Q'}) {
|
||||
if (captures.find(p) != captures.end()) {
|
||||
for (std::uint8_t i = 0; i < captures[p]; i++) {
|
||||
if (gs.captures.find(p) != gs.captures.end()) {
|
||||
for (std::uint8_t i = 0; i < gs.captures[p]; i++) {
|
||||
dc.DrawBitmap(*t_captures->Get(p), boardX + offsetX, boardY + offsetY);
|
||||
offsetX += captures_size / 2;
|
||||
}
|
||||
offsetX += captures_size / 2;
|
||||
}
|
||||
}
|
||||
dc.DrawText(wxString(black_player),boardX,boardY + offsetYPlayerName);
|
||||
dc.DrawText(wxString(gs.black),boardX,boardY + offsetYPlayerName);
|
||||
// Black (white's captures):
|
||||
offsetX = 0;
|
||||
if (black_side) {
|
||||
|
@ -284,15 +308,15 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
|
|||
offsetYPlayerName = offsetY+captures_size;
|
||||
}
|
||||
for (char p : {'p', 'n', 'b', 'r', 'q'}) {
|
||||
if (captures.find(p) != captures.end()) {
|
||||
for (std::uint8_t i = 0; i < captures[p]; i++) {
|
||||
if (gs.captures.find(p) != gs.captures.end()) {
|
||||
for (std::uint8_t i = 0; i < gs.captures[p]; i++) {
|
||||
dc.DrawBitmap(*t_captures->Get(p), boardX + offsetX, boardY + offsetY);
|
||||
offsetX += captures_size / 2;
|
||||
}
|
||||
offsetX += captures_size / 2;
|
||||
}
|
||||
}
|
||||
dc.DrawText(wxString(white_player),boardX,boardY + offsetYPlayerName);
|
||||
dc.DrawText(wxString(gs.white),boardX,boardY + offsetYPlayerName);
|
||||
|
||||
// Draw dragging piece
|
||||
if (DrawDraggingPiece) {
|
||||
|
@ -306,9 +330,9 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
|
|||
}
|
||||
|
||||
// Draw Clocks
|
||||
if (std::get<0>(black_time) >= 0) {
|
||||
if (std::get<0>(gs.black_time) >= 0) {
|
||||
wxFont font = dc.GetFont();
|
||||
ClockTime clock = black_side ? white_time : black_time;
|
||||
ClockTime clock = black_side ? gs.white_time : gs.black_time;
|
||||
wxString time =
|
||||
wxString::Format("%ds", std::get<1>(clock), std::get<2>(clock));
|
||||
if (std::get<0>(clock) > 0) {
|
||||
|
@ -321,7 +345,7 @@ void BoardCanvas::DrawBoard(wxDC &dc) {
|
|||
dc.GetTextExtent(time, &width, &height);
|
||||
dc.DrawText(time,
|
||||
wxPoint(boardX + square_width * 8 - width, boardY - height - numbers_size.y*2));
|
||||
clock = black_side ? black_time : white_time;
|
||||
clock = black_side ? gs.black_time : gs.white_time;
|
||||
time = wxString::Format("%ds", std::get<1>(clock), std::get<2>(clock));
|
||||
if (std::get<0>(clock) > 0) {
|
||||
time = wxString::Format("%d:%d", std::get<0>(clock), std::get<1>(clock));
|
||||
|
@ -359,6 +383,9 @@ void BoardCanvas::MouseEvent(wxMouseEvent &event) {
|
|||
((char)('a' + file)) + std::to_string(rank + 1);
|
||||
event.SetString(move);
|
||||
ProcessEvent(event);
|
||||
} else {
|
||||
// If square not valid just redraw (place piece back to its square)
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
if (event.LeftDown()) {
|
||||
|
@ -370,7 +397,7 @@ void BoardCanvas::MouseEvent(wxMouseEvent &event) {
|
|||
if (IsCurrentSquareValid) {
|
||||
active_square.x = file;
|
||||
active_square.y = rank;
|
||||
if (board[(7 - rank) * 8 + file] != ' ') {
|
||||
if (gs.board[(7 - rank) * 8 + file] != ' ') {
|
||||
wxLogDebug("Drag start on square (%d,%d)", file, rank);
|
||||
valid_drag = true;
|
||||
}
|
||||
|
@ -385,7 +412,8 @@ void BoardCanvas::MouseEvent(wxMouseEvent &event) {
|
|||
}
|
||||
|
||||
void BoardCanvas::Zoom(std::int32_t zoom) {
|
||||
t->Zoom(zoom);
|
||||
if(!t->Zoom(zoom))
|
||||
return;
|
||||
t_captures->ResizePieces(t->GetPiecesSizes() * CAPTURE_FACTOR);
|
||||
Refresh();
|
||||
}
|
||||
|
@ -398,12 +426,8 @@ void BoardCanvas::Swap() {
|
|||
void BoardCanvas::SetClockTime(short hours, short min, short sec,
|
||||
bool IsBlack) {
|
||||
if (IsBlack) {
|
||||
black_time = std::make_tuple(hours, min, sec);
|
||||
gs.black_time = std::make_tuple(hours, min, sec);
|
||||
} else {
|
||||
white_time = std::make_tuple(hours, min, sec);
|
||||
gs.white_time = std::make_tuple(hours, min, sec);
|
||||
}
|
||||
}
|
||||
|
||||
wxBEGIN_EVENT_TABLE(BoardCanvas, wxPanel) EVT_PAINT(BoardCanvas::OnPaint)
|
||||
EVT_MOUSE_EVENTS(BoardCanvas::MouseEvent)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
|
|
@ -58,6 +58,16 @@ typedef struct AnimState {
|
|||
wxPoint transVect;
|
||||
} AnimState;
|
||||
|
||||
typedef struct GameState {
|
||||
std::string white, black;
|
||||
std::string board;
|
||||
std::map<char, std::uint8_t> captures;
|
||||
bool is_black_turn;
|
||||
bool mat_black;
|
||||
bool mat_white;
|
||||
ClockTime black_time, white_time;
|
||||
} GameState;
|
||||
|
||||
class BoardCanvas : public wxPanel {
|
||||
// *t is theme for board+pieces and
|
||||
// *t_captures is theme for captured pieces (scale down version of t)
|
||||
|
@ -73,11 +83,11 @@ class BoardCanvas : public wxPanel {
|
|||
wxSize canvas_size;
|
||||
wxPoint active_square;
|
||||
std::map<char, std::uint8_t> captures;
|
||||
ClockTime black_time, white_time;
|
||||
bool frozen,lock_square_size;
|
||||
|
||||
// Current animation state
|
||||
AnimState adata;
|
||||
GameState gs;
|
||||
|
||||
public:
|
||||
BoardCanvas(wxFrame *parent);
|
||||
|
@ -89,10 +99,8 @@ public:
|
|||
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,
|
||||
std::string white_player, std::string black_player);
|
||||
void Animate(const std::string &board, bool is_black_turn, std::map<char, std::uint8_t> captures, std::string src, std::string dst,bool faster);
|
||||
void OnResize(wxSizeEvent &e);
|
||||
void SetupBoard(const GameState &new_gs);
|
||||
void Animate(const GameState &new_gs, std::string src, std::string dst,bool faster);
|
||||
void SetClockTime(short hours, short min, short sec, bool IsBlack);
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
|
|
@ -11,6 +11,8 @@ Theme::Theme() : square_radius(10) {
|
|||
config->Read("board/theme/squares/path", "default").ToStdString();
|
||||
wxFileName square_file(square);
|
||||
CONFIG_CLOSE(config);
|
||||
// Mat
|
||||
skin['#']=LoadPNG("mat").ConvertToImage();
|
||||
// Piece
|
||||
if (piece == "default" || !piece_file.FileExists()) {
|
||||
wxLogDebug("Loading piece skin from binres");
|
||||
|
@ -95,12 +97,18 @@ wxBitmap *Theme::Get(char c) { return (skin_scaled[c]); }
|
|||
|
||||
void Theme::ResizePieces(std::uint32_t width) {
|
||||
for (std::pair<char, wxImage> c : skin) {
|
||||
if (c.first != 's' && c.first != 'S') {
|
||||
if (c.first != 's' && c.first != 'S' && c.first != '#') {
|
||||
if (skin_scaled.count(c.first))
|
||||
delete skin_scaled[c.first];
|
||||
skin_scaled[c.first] =
|
||||
new wxBitmap(c.second.Scale(width, width, wxIMAGE_QUALITY_HIGH));
|
||||
}
|
||||
else if(c.first == '#'){
|
||||
if (skin_scaled.count(c.first))
|
||||
delete skin_scaled[c.first];
|
||||
skin_scaled[c.first] =
|
||||
new wxBitmap(c.second.Scale(width*MAT_SIZE_FACTOR, width*MAT_SIZE_FACTOR, wxIMAGE_QUALITY_HIGH));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -130,10 +138,15 @@ void Theme::ResizeSquares(std::uint32_t width) {
|
|||
skin_scaled['3']->SetMask(RoundedMask(width, 3));
|
||||
}
|
||||
|
||||
void Theme::Zoom(int amount) {
|
||||
bool Theme::Zoom(int amount) {
|
||||
double width = skin_scaled['s']->GetWidth() + amount;
|
||||
if(width<=20)
|
||||
return false;
|
||||
if(width>=180)
|
||||
return false;
|
||||
ResizeSquares(std::max(width, 1.0));
|
||||
ResizePieces(std::max(width * PIECE_SIZE_FACTOR, 1.0));
|
||||
return true;
|
||||
}
|
||||
|
||||
void Theme::SetSquareRadius(std::uint8_t radius) {
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#define ELT_DIM 200
|
||||
#define DEFAULT_SIZE 80
|
||||
#define PIECE_SIZE_FACTOR 0.8 // Should be between 0 and 1
|
||||
#define MAT_SIZE_FACTOR 0.4
|
||||
#define DEFAULT_PIECE_THEME "assets/pieces/cburnett.png"
|
||||
#define DEFAULT_SQUARE_THEME "assets/boards/chesscom_8bits.png"
|
||||
|
||||
|
@ -29,7 +30,7 @@ public:
|
|||
void ResizeSquaresAndPieces(std::uint32_t width);
|
||||
void SetSquareRadius(std::uint8_t radius);
|
||||
std::uint8_t GetSquareRadius();
|
||||
void Zoom(int amount);
|
||||
bool Zoom(int amount);
|
||||
double GetPiecesSizes();
|
||||
double GetSquaresSizes();
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ wxDEFINE_EVENT(NEXT_MOVE_EVENT, wxCommandEvent);
|
|||
GameTabRightPanel::GameTabRightPanel(wxFrame *parent, std::shared_ptr<Game> game)
|
||||
: TabGameRightPanel(parent), game(game), selected_item(-1),
|
||||
live_engine(nullptr) {
|
||||
editor_canvas = new EditorCanvas((wxFrame *)editor_page);
|
||||
editor_canvas = new EditorCanvas((wxFrame *)editor_page,game);
|
||||
editor_canvas_sizer->Add(editor_canvas, 1, wxEXPAND);
|
||||
tags_list->InsertColumn(0, L"Name", wxLIST_FORMAT_LEFT, 200);
|
||||
tags_list->InsertColumn(1, L"Value", wxLIST_FORMAT_LEFT, 500);
|
||||
|
@ -22,16 +22,6 @@ GameTabRightPanel::GameTabRightPanel(wxFrame *parent, std::shared_ptr<Game> game
|
|||
// Bind events
|
||||
this->Bind(wxEVT_TEXT, &GameTabRightPanel::OnCommentChange, this,
|
||||
COMMENT_INPUT_BOX);
|
||||
this->Bind(GOTO_MOVE_EVENT, &GameTabRightPanel::OnGotoMove, this, wxID_ANY);
|
||||
this->Bind(DELETE_MOVE_EVENT, &GameTabRightPanel::OnMoveDelete, this,
|
||||
wxID_ANY);
|
||||
this->Bind(PROMOTE_MOVE_EVENT, &GameTabRightPanel::OnMovePromote, this,
|
||||
wxID_ANY);
|
||||
this->Bind(SET_AS_MAINLINE_EVENT, &GameTabRightPanel::OnMoveSetAsMainline,
|
||||
this, wxID_ANY);
|
||||
/*this->Bind(NEXT_MOVE_EVENT, &GameTabRightPanel::OnNextMove, this, wxID_ANY);
|
||||
this->Bind(PREVIOUS_MOVE_EVENT, &GameTabRightPanel::OnPreviousMove, this,
|
||||
wxID_ANY);*/
|
||||
this->Bind(wxEVT_LIST_ITEM_SELECTED, &GameTabRightPanel::OnTagSelected, this,
|
||||
wxID_ANY);
|
||||
this->Bind(wxEVT_LIST_ITEM_DESELECTED, &GameTabRightPanel::OnTagDeselected,
|
||||
|
@ -90,12 +80,6 @@ void GameTabRightPanel::OnTagDeselected(wxListEvent &event) {
|
|||
delete_button->Enable(false);
|
||||
}
|
||||
|
||||
void GameTabRightPanel::NotifyBoard() {
|
||||
wxCommandEvent previousEvent(GAME_CHANGE, GetId());
|
||||
previousEvent.SetEventObject(this);
|
||||
ProcessEvent(previousEvent);
|
||||
}
|
||||
|
||||
void GameTabRightPanel::OnLiveEngineClose(wxCloseEvent &e) {
|
||||
live_engine = nullptr;
|
||||
e.Skip();
|
||||
|
@ -105,7 +89,12 @@ void GameTabRightPanel::OnCommentChange(wxCommandEvent &event) {
|
|||
wxLogDebug("GameTabRightPanel: comment input change");
|
||||
HalfMove *m = game->GetCurrentMove();
|
||||
if (m != nullptr) {
|
||||
m->comment=event.GetString().ToStdString();
|
||||
m->comment=event.GetString().Trim().ToStdString();
|
||||
// Remove newlines:
|
||||
for(char &c:m->comment){
|
||||
if(c=='\n')
|
||||
c=' ';
|
||||
}
|
||||
}
|
||||
editor_canvas->Refresh();
|
||||
}
|
||||
|
@ -143,29 +132,6 @@ void GameTabRightPanel::OnDelete(wxCommandEvent &event) {
|
|||
}
|
||||
}
|
||||
|
||||
void GameTabRightPanel::OnGotoMove(wxCommandEvent &event) {
|
||||
wxLogDebug("GameTabRightPanel: received GOTO_MOVE_EVENT");
|
||||
game->SetCurrent((HalfMove *)event.GetClientData());
|
||||
Notify();
|
||||
}
|
||||
|
||||
void GameTabRightPanel::OnMoveDelete(wxCommandEvent &event) {
|
||||
game->DeleteMove((HalfMove *)event.GetClientData());
|
||||
Notify();
|
||||
}
|
||||
|
||||
void GameTabRightPanel::OnMovePromote(wxCommandEvent &event) {
|
||||
wxLogDebug("GameTabRightPanel: promote move called");
|
||||
game->PromoteMove((HalfMove *)event.GetClientData());
|
||||
Notify();
|
||||
}
|
||||
|
||||
void GameTabRightPanel::OnMoveSetAsMainline(wxCommandEvent &event) {
|
||||
wxLogDebug("GameTabRightPanel: set move as mainline called");
|
||||
game->SetMoveAsMainline((HalfMove *)event.GetClientData());
|
||||
Notify();
|
||||
}
|
||||
|
||||
void GameTabRightPanel::Notify() {
|
||||
HalfMove *m = game->GetCurrentMove();
|
||||
if (m != nullptr) {
|
||||
|
@ -177,7 +143,6 @@ void GameTabRightPanel::Notify() {
|
|||
if (live_engine != nullptr) {
|
||||
live_engine->SetFEN(game->GetFen());
|
||||
}
|
||||
NotifyBoard();
|
||||
}
|
||||
|
||||
void GameTabRightPanel::ApplyPreferences() {
|
||||
|
@ -206,18 +171,6 @@ void GameTabRightPanel::RefreshTagsList() {
|
|||
}
|
||||
}
|
||||
|
||||
void GameTabRightPanel::OnPreviousMove(wxCommandEvent &event) {
|
||||
game->Previous();
|
||||
Notify();
|
||||
NotifyBoard();
|
||||
}
|
||||
|
||||
void GameTabRightPanel::OnNextMove(wxCommandEvent &event) {
|
||||
game->Next();
|
||||
Notify();
|
||||
NotifyBoard();
|
||||
}
|
||||
|
||||
std::string GameTabRightPanel::GetNagFromStr(std::string str){
|
||||
// TODO: Bind more NAG!
|
||||
if(str=="!")
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#include <algorithm>
|
||||
|
||||
#include "../Game.hpp"
|
||||
#include "LiveEngineDialog.hpp"
|
||||
#include "editor/EditorCanvas.hpp"
|
||||
|
@ -23,20 +25,13 @@ class GameTabRightPanel : public TabGameRightPanel {
|
|||
|
||||
public:
|
||||
GameTabRightPanel(wxFrame *parent, std::shared_ptr<Game> game);
|
||||
void NotifyBoard();
|
||||
void Notify();
|
||||
void OnCommentChange(wxCommandEvent &event);
|
||||
void OnGotoMove(wxCommandEvent &event);
|
||||
void OnMoveDelete(wxCommandEvent &event);
|
||||
void OnMovePromote(wxCommandEvent &event);
|
||||
void OnMoveSetAsMainline(wxCommandEvent &event);
|
||||
void RefreshTagsList();
|
||||
void OnTagSelected(wxListEvent &event);
|
||||
void OnTagDeselected(wxListEvent &event);
|
||||
void OnApply(wxCommandEvent &event);
|
||||
void OnDelete(wxCommandEvent &event);
|
||||
void OnPreviousMove(wxCommandEvent &event);
|
||||
void OnNextMove(wxCommandEvent &event);
|
||||
void OnLiveAnalysis(wxCommandEvent &event);
|
||||
void ApplyPreferences();
|
||||
void OnLiveEngineClose(wxCloseEvent &e);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "EditorCanvas.hpp"
|
||||
|
||||
EditorCanvas::EditorCanvas(wxFrame *parent)
|
||||
: wxPanel(parent), NeedRedraw(false) {
|
||||
EditorCanvas::EditorCanvas(wxFrame *parent, std::shared_ptr<Game> game)
|
||||
: wxPanel(parent), game(game) {
|
||||
hide_icon = LoadPNG("hide", wxSize(CGEditor::status.MoveIconWidth,
|
||||
CGEditor::status.MoveIconWidth));
|
||||
t.ResizePieces(CGEditor::status.MoveIconWidth);
|
||||
|
@ -14,13 +14,17 @@ EditorCanvas::EditorCanvas(wxFrame *parent)
|
|||
color_comments_bg=wxColour(255, 255, 204);
|
||||
color_current_move_bg=wxColour(216, 216, 216);
|
||||
color_menu_item_bg=wxColour(216, 216, 216);
|
||||
|
||||
// The following should be called when using an EVT_PAINT handler
|
||||
SetBackgroundStyle(wxBG_STYLE_PAINT);
|
||||
|
||||
Bind(wxEVT_KEY_DOWN, [p=this](wxKeyEvent &e){e.ResumePropagation(1);e.Skip();});
|
||||
Bind(wxEVT_KEY_UP, [p=this](wxKeyEvent &e){e.ResumePropagation(1);e.Skip();});
|
||||
}
|
||||
|
||||
void EditorCanvas::OnPaint(wxPaintEvent &event) {
|
||||
wxPaintDC current_dc(this);
|
||||
current_dc.SetBackground(*wxWHITE_BRUSH);
|
||||
current_dc.Clear();
|
||||
dc = ¤t_dc;
|
||||
|
||||
// Refresh canvas size
|
||||
|
@ -173,28 +177,18 @@ void EditorCanvas::DrawElement(const cgeditor::Element &e) {
|
|||
}
|
||||
}
|
||||
void EditorCanvas::HandleEvent(const cgeditor::Event &e) {
|
||||
wxLogDebug("Editor event!");
|
||||
if (e.type == cgeditor::Event::Goto) {
|
||||
wxCommandEvent event(GOTO_MOVE_EVENT, GetId());
|
||||
event.SetEventObject(this);
|
||||
event.SetClientData(e.move);
|
||||
ProcessEvent(event);
|
||||
game->SetCurrent((HalfMove *)e.move);
|
||||
} else if (e.type == cgeditor::Event::Delete) {
|
||||
wxCommandEvent event(DELETE_MOVE_EVENT, GetId());
|
||||
event.SetEventObject(this);
|
||||
event.SetClientData(e.move);
|
||||
ProcessEvent(event);
|
||||
game->DeleteMove((HalfMove *)e.move);
|
||||
} else if (e.type == cgeditor::Event::Promote) {
|
||||
wxCommandEvent event(PROMOTE_MOVE_EVENT, GetId());
|
||||
event.SetEventObject(this);
|
||||
event.SetClientData(e.move);
|
||||
ProcessEvent(event);
|
||||
game->PromoteMove((HalfMove *)e.move);
|
||||
} else if (e.type == cgeditor::Event::SetAsMainline) {
|
||||
wxCommandEvent event(SET_AS_MAINLINE_EVENT, GetId());
|
||||
event.SetEventObject(this);
|
||||
event.SetClientData(e.move);
|
||||
ProcessEvent(event);
|
||||
game->SetMoveAsMainline((HalfMove *)e.move);
|
||||
}
|
||||
wxCommandEvent event(GAME_CHANGE, GetId());
|
||||
event.SetEventObject(this);
|
||||
ProcessEvent(event);
|
||||
}
|
||||
|
||||
void EditorCanvas::MouseEvent(wxMouseEvent &event) {
|
||||
|
@ -220,10 +214,11 @@ void EditorCanvas::MouseEvent(wxMouseEvent &event) {
|
|||
Refresh();
|
||||
}
|
||||
|
||||
// Should another draw of CGEditor be made?
|
||||
if (NeedRedraw) {
|
||||
// Handle editor events
|
||||
Update();
|
||||
if(ProcessEvents()){
|
||||
Refresh();
|
||||
NeedRedraw = false;
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -234,17 +229,5 @@ void EditorCanvas::SetMoves(HalfMove *moves, HalfMove *current) {
|
|||
Refresh();
|
||||
}
|
||||
|
||||
void EditorCanvas::OnKeyEvent(wxKeyEvent &event) {
|
||||
/*if (event.GetKeyCode() == WXK_LEFT) {
|
||||
wxCommandEvent previousEvent(PREVIOUS_MOVE_EVENT, GetId());
|
||||
previousEvent.SetEventObject(this);
|
||||
ProcessEvent(previousEvent);
|
||||
} else if (event.GetKeyCode() == WXK_RIGHT) {
|
||||
wxCommandEvent nextEvent(NEXT_MOVE_EVENT, GetId());
|
||||
nextEvent.SetEventObject(this);
|
||||
ProcessEvent(nextEvent);
|
||||
}*/
|
||||
}
|
||||
|
||||
wxBEGIN_EVENT_TABLE(EditorCanvas, wxPanel) EVT_PAINT(EditorCanvas::OnPaint)
|
||||
EVT_MOUSE_EVENTS(EditorCanvas::MouseEvent) wxEND_EVENT_TABLE()
|
||||
|
|
|
@ -4,22 +4,18 @@
|
|||
#include "CGEditor.hpp"
|
||||
#include "ochess.hpp"
|
||||
#include "../../left_panel/board/Theme.hpp"
|
||||
#include "game_tab/Game.hpp"
|
||||
|
||||
// Foreign events
|
||||
wxDECLARE_EVENT(GOTO_MOVE_EVENT, wxCommandEvent);
|
||||
wxDECLARE_EVENT(PREVIOUS_MOVE_EVENT, wxCommandEvent);
|
||||
wxDECLARE_EVENT(NEXT_MOVE_EVENT, wxCommandEvent);
|
||||
wxDECLARE_EVENT(DELETE_MOVE_EVENT, wxCommandEvent);
|
||||
wxDECLARE_EVENT(PROMOTE_MOVE_EVENT, wxCommandEvent);
|
||||
wxDECLARE_EVENT(SET_AS_MAINLINE_EVENT, wxCommandEvent);
|
||||
wxDECLARE_EVENT(GAME_CHANGE, wxCommandEvent);
|
||||
|
||||
class EditorCanvas : public wxPanel, public cgeditor::CGEditor {
|
||||
wxPaintDC *dc;
|
||||
bool NeedRedraw;
|
||||
wxPoint Middle(cgeditor::Element e);
|
||||
wxBitmap hide_icon;
|
||||
Theme t;
|
||||
wxFont default_font;
|
||||
std::shared_ptr<Game> game;
|
||||
|
||||
wxColour color_scrollbar_bg;
|
||||
wxColour color_scrollbar;
|
||||
|
@ -29,13 +25,12 @@ class EditorCanvas : public wxPanel, public cgeditor::CGEditor {
|
|||
wxColour color_menu_item_bg;
|
||||
|
||||
public:
|
||||
EditorCanvas(wxFrame *parent);
|
||||
EditorCanvas(wxFrame *parent, std::shared_ptr<Game> game);
|
||||
void OnPaint(wxPaintEvent &event);
|
||||
void MouseEvent(wxMouseEvent &event);
|
||||
void DrawElement(const cgeditor::Element &e);
|
||||
void HandleEvent(const cgeditor::Event &e);
|
||||
void SetMoves(HalfMove *moves, HalfMove *current);
|
||||
void OnKeyEvent(wxKeyEvent &event);
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue