00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef USE_PCH
00025 #include "sys.h"
00026 #endif
00027
00028 #include "ChessboardWidget.h"
00029 #include "CwChessboardCodes.h"
00030
00031 namespace cwmm {
00032
00033 void ChessboardWidget::S_draw_turn_indicator_hook(CwChessboard* chessboard, gboolean white, gboolean on)
00034 {
00035 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_turn_indicator(white, on);
00036 }
00037
00038 void ChessboardWidget::S_draw_border_hook(CwChessboard* chessboard)
00039 {
00040 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_border();
00041 }
00042
00043 void ChessboardWidget::S_draw_hud_layer_hook(CwChessboard* chessboard, cairo_t* cr, gint sside, guint hud)
00044 {
00045 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_hud_layer(cr, sside, hud);
00046 }
00047
00048 gboolean ChessboardWidget::S_draw_hud_square_hook(CwChessboard* chessboard, cairo_t* cr, gint col, gint row, gint sside, guint hud)
00049 {
00050 return static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_hud_square(cr, col, row, sside, hud);
00051 }
00052
00053 void ChessboardWidget::S_draw_pawn_hook(CwChessboard* chessboard, cairo_t* cr, gdouble x, gdouble y, gdouble sside, gboolean white)
00054 {
00055 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_pawn(cr, x, y, sside, white);
00056 }
00057
00058 void ChessboardWidget::S_draw_rook_hook(CwChessboard* chessboard, cairo_t* cr, gdouble x, gdouble y, gdouble sside, gboolean white)
00059 {
00060 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_rook(cr, x, y, sside, white);
00061 }
00062
00063 void ChessboardWidget::S_draw_knight_hook(CwChessboard* chessboard, cairo_t* cr, gdouble x, gdouble y, gdouble sside, gboolean white)
00064 {
00065 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_knight(cr, x, y, sside, white);
00066 }
00067
00068 void ChessboardWidget::S_draw_bishop_hook(CwChessboard* chessboard, cairo_t* cr, gdouble x, gdouble y, gdouble sside, gboolean white)
00069 {
00070 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_bishop(cr, x, y, sside, white);
00071 }
00072
00073 void ChessboardWidget::S_draw_queen_hook(CwChessboard* chessboard, cairo_t* cr, gdouble x, gdouble y, gdouble sside, gboolean white)
00074 {
00075 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_queen(cr, x, y, sside, white);
00076 }
00077
00078 void ChessboardWidget::S_draw_king_hook(CwChessboard* chessboard, cairo_t* cr, gdouble x, gdouble y, gdouble sside, gboolean white)
00079 {
00080 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->draw_king(cr, x, y, sside, white);
00081 }
00082
00083 void ChessboardWidget::S_on_cursor_left_chessboard_hook(CwChessboard* chessboard, gint prev_col, gint prev_row)
00084 {
00085 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->on_cursor_left_chessboard(prev_col, prev_row);
00086 }
00087
00088 void ChessboardWidget::S_on_cursor_entered_square_hook(CwChessboard* chessboard, gint prev_col, gint prev_row, gint col, gint row)
00089 {
00090 static_cast<ChessboardWidget*>(chessboard->gtkmm_widget)->on_cursor_entered_square(prev_col, prev_row, col, row);
00091 }
00092
00093 ChessboardWidget::ChessboardWidget() : Gtk::DrawingArea(&M_chessboard->parent)
00094 {
00095
00096 M_chessboard->gtkmm_widget = static_cast<void*>(this);
00097
00098
00099 signal_button_press_event().connect(sigc::mem_fun(*this,& ChessboardWidget::on_button_press_event));
00100 signal_button_release_event().connect(sigc::mem_fun(*this,& ChessboardWidget::on_button_release_event));
00101 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_turn_indicator = S_draw_turn_indicator_hook;
00102 CW_CHESSBOARD_GET_CLASS(M_chessboard)->cursor_left_chessboard = S_on_cursor_left_chessboard_hook;
00103 CW_CHESSBOARD_GET_CLASS(M_chessboard)->cursor_entered_square = S_on_cursor_entered_square_hook;
00104 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_border = S_draw_border_hook;
00105 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_hud_layer = S_draw_hud_layer_hook;
00106 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_hud_square = S_draw_hud_square_hook;
00107 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_piece[(::white_pawn >> 1) - 1] = S_draw_pawn_hook;
00108 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_piece[(::white_rook >> 1) - 1] = S_draw_rook_hook;
00109 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_piece[(::white_knight >> 1) - 1] = S_draw_knight_hook;
00110 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_piece[(::white_bishop >> 1) - 1] = S_draw_bishop_hook;
00111 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_piece[(::white_queen >> 1) - 1] = S_draw_queen_hook;
00112 CW_CHESSBOARD_GET_CLASS(M_chessboard)->draw_piece[(::white_king >> 1) - 1] = S_draw_king_hook;
00113 }
00114
00115 ChessboardWidget::~ChessboardWidget()
00116 {
00117 }
00118
00119 }