1
/* chess-view-2d.c generated by valac 0.12.0, the Vala compiler
2
* generated from chess-view-2d.vala, do not modify */
6
#include <glib-object.h>
14
#include <librsvg/rsvg.h>
19
#define TYPE_CHESS_VIEW (chess_view_get_type ())
20
#define CHESS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_VIEW, ChessView))
21
#define CHESS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_VIEW, ChessViewClass))
22
#define IS_CHESS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_VIEW))
23
#define IS_CHESS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_VIEW))
24
#define CHESS_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_VIEW, ChessViewClass))
26
typedef struct _ChessView ChessView;
27
typedef struct _ChessViewClass ChessViewClass;
28
typedef struct _ChessViewPrivate ChessViewPrivate;
30
#define TYPE_CHESS_VIEW2_D (chess_view2_d_get_type ())
31
#define CHESS_VIEW2_D(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_VIEW2_D, ChessView2D))
32
#define CHESS_VIEW2_D_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_VIEW2_D, ChessView2DClass))
33
#define IS_CHESS_VIEW2_D(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_VIEW2_D))
34
#define IS_CHESS_VIEW2_D_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_VIEW2_D))
35
#define CHESS_VIEW2_D_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_VIEW2_D, ChessView2DClass))
37
typedef struct _ChessView2D ChessView2D;
38
typedef struct _ChessView2DClass ChessView2DClass;
39
typedef struct _ChessView2DPrivate ChessView2DPrivate;
40
#define _cairo_surface_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_surface_destroy (var), NULL)))
41
#define _g_free0(var) (var = (g_free (var), NULL))
43
#define TYPE_CHESS_SCENE (chess_scene_get_type ())
44
#define CHESS_SCENE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_SCENE, ChessScene))
45
#define CHESS_SCENE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_SCENE, ChessSceneClass))
46
#define IS_CHESS_SCENE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_SCENE))
47
#define IS_CHESS_SCENE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_SCENE))
48
#define CHESS_SCENE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_SCENE, ChessSceneClass))
50
typedef struct _ChessScene ChessScene;
51
typedef struct _ChessSceneClass ChessSceneClass;
52
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
53
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
54
#define _cairo_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_destroy (var), NULL)))
55
typedef struct _ChessScenePrivate ChessScenePrivate;
57
#define TYPE_CHESS_MODEL (chess_model_get_type ())
58
#define CHESS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_MODEL, ChessModel))
59
#define CHESS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_MODEL, ChessModelClass))
60
#define IS_CHESS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_MODEL))
61
#define IS_CHESS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_MODEL))
62
#define CHESS_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_MODEL, ChessModelClass))
64
typedef struct _ChessModel ChessModel;
65
typedef struct _ChessModelClass ChessModelClass;
66
typedef struct _ChessModelPrivate ChessModelPrivate;
68
#define TYPE_CHESS_PIECE (chess_piece_get_type ())
69
#define CHESS_PIECE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_PIECE, ChessPiece))
70
#define CHESS_PIECE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_PIECE, ChessPieceClass))
71
#define IS_CHESS_PIECE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_PIECE))
72
#define IS_CHESS_PIECE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_PIECE))
73
#define CHESS_PIECE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_PIECE, ChessPieceClass))
75
typedef struct _ChessPiece ChessPiece;
76
typedef struct _ChessPieceClass ChessPieceClass;
77
#define _chess_model_unref0(var) ((var == NULL) ? NULL : (var = (chess_model_unref (var), NULL)))
78
#define _chess_piece_unref0(var) ((var == NULL) ? NULL : (var = (chess_piece_unref (var), NULL)))
80
#define TYPE_COLOR (color_get_type ())
81
typedef struct _ChessPiecePrivate ChessPiecePrivate;
83
#define TYPE_CHESS_PLAYER (chess_player_get_type ())
84
#define CHESS_PLAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_PLAYER, ChessPlayer))
85
#define CHESS_PLAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_PLAYER, ChessPlayerClass))
86
#define IS_CHESS_PLAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_PLAYER))
87
#define IS_CHESS_PLAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_PLAYER))
88
#define CHESS_PLAYER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_PLAYER, ChessPlayerClass))
90
typedef struct _ChessPlayer ChessPlayer;
91
typedef struct _ChessPlayerClass ChessPlayerClass;
93
#define TYPE_PIECE_TYPE (piece_type_get_type ())
95
#define TYPE_CHESS_GAME (chess_game_get_type ())
96
#define CHESS_GAME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CHESS_GAME, ChessGame))
97
#define CHESS_GAME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CHESS_GAME, ChessGameClass))
98
#define IS_CHESS_GAME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CHESS_GAME))
99
#define IS_CHESS_GAME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CHESS_GAME))
100
#define CHESS_GAME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CHESS_GAME, ChessGameClass))
102
typedef struct _ChessGame ChessGame;
103
typedef struct _ChessGameClass ChessGameClass;
106
GtkDrawingArea parent_instance;
107
ChessViewPrivate * priv;
110
struct _ChessViewClass {
111
GtkDrawingAreaClass parent_class;
114
struct _ChessView2D {
115
ChessView parent_instance;
116
ChessView2DPrivate * priv;
119
struct _ChessView2DClass {
120
ChessViewClass parent_class;
123
struct _ChessView2DPrivate {
126
gint selected_square_size;
127
cairo_surface_t* model_surface;
128
cairo_surface_t* selected_model_surface;
129
gchar* loaded_theme_name;
133
GObject parent_instance;
134
ChessScenePrivate * priv;
141
struct _ChessSceneClass {
142
GObjectClass parent_class;
146
GTypeInstance parent_instance;
147
volatile int ref_count;
148
ChessModelPrivate * priv;
154
gboolean under_threat;
155
gboolean is_selected;
158
struct _ChessModelClass {
159
GTypeClass parent_class;
160
void (*finalize) (ChessModel *self);
178
GTypeInstance parent_instance;
179
volatile int ref_count;
180
ChessPiecePrivate * priv;
185
struct _ChessPieceClass {
186
GTypeClass parent_class;
187
void (*finalize) (ChessPiece *self);
191
static gpointer chess_view2_d_parent_class = NULL;
193
GType chess_view_get_type (void) G_GNUC_CONST;
194
GType chess_view2_d_get_type (void) G_GNUC_CONST;
195
#define CHESS_VIEW2_D_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_CHESS_VIEW2_D, ChessView2DPrivate))
197
CHESS_VIEW2_D_DUMMY_PROPERTY
199
ChessView2D* chess_view2_d_new (void);
200
ChessView2D* chess_view2_d_construct (GType object_type);
201
ChessView* chess_view_new (void);
202
ChessView* chess_view_construct (GType object_type);
203
static gboolean chess_view2_d_real_configure_event (GtkWidget* base, GdkEventConfigure* event);
204
static void chess_view2_d_render_piece (ChessView2D* self, cairo_t* c1, cairo_t* c2, const gchar* name, gint offset);
205
GType chess_scene_get_type (void) G_GNUC_CONST;
206
ChessScene* chess_view_get_scene (ChessView* self);
207
const gchar* chess_scene_get_theme_name (ChessScene* self);
208
static void chess_view2_d_load_theme (ChessView2D* self);
209
static gboolean chess_view2_d_real_draw (GtkWidget* base, cairo_t* c);
210
gdouble chess_scene_get_board_angle (ChessScene* self);
211
static gdouble chess_view2_d_get_border_size (ChessView2D* self);
212
gboolean chess_scene_get_show_numbering (ChessScene* self);
213
gpointer chess_model_ref (gpointer instance);
214
void chess_model_unref (gpointer instance);
215
GParamSpec* param_spec_chess_model (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
216
void value_set_chess_model (GValue* value, gpointer v_object);
217
void value_take_chess_model (GValue* value, gpointer v_object);
218
gpointer value_get_chess_model (const GValue* value);
219
GType chess_model_get_type (void) G_GNUC_CONST;
220
gpointer chess_piece_ref (gpointer instance);
221
void chess_piece_unref (gpointer instance);
222
GParamSpec* param_spec_chess_piece (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
223
void value_set_chess_piece (GValue* value, gpointer v_object);
224
void value_take_chess_piece (GValue* value, gpointer v_object);
225
gpointer value_get_chess_piece (const GValue* value);
226
GType chess_piece_get_type (void) G_GNUC_CONST;
227
gboolean chess_scene_get_show_move_hints (ChessScene* self);
228
static void chess_view2_d_draw_piece (ChessView2D* self, cairo_t* c, cairo_surface_t* surface, ChessPiece* piece, gdouble alpha);
229
gboolean chess_scene_can_move (ChessScene* self, gint rank, gint file);
230
ChessPiece* chess_scene_get_selected_piece (ChessScene* self);
231
const gchar* chess_scene_get_board_side (ChessScene* self);
232
GType color_get_type (void) G_GNUC_CONST;
233
Color chess_piece_get_color (ChessPiece* self);
234
GType chess_player_get_type (void) G_GNUC_CONST;
235
GType piece_type_get_type (void) G_GNUC_CONST;
236
static gboolean chess_view2_d_real_button_press_event (GtkWidget* base, GdkEventButton* event);
237
gpointer chess_game_ref (gpointer instance);
238
void chess_game_unref (gpointer instance);
239
GParamSpec* param_spec_chess_game (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
240
void value_set_chess_game (GValue* value, gpointer v_object);
241
void value_take_chess_game (GValue* value, gpointer v_object);
242
gpointer value_get_chess_game (const GValue* value);
243
GType chess_game_get_type (void) G_GNUC_CONST;
244
ChessGame* chess_scene_get_game (ChessScene* self);
245
void chess_scene_select_square (ChessScene* self, gint file, gint rank);
246
static void chess_view2_d_finalize (GObject* obj);
247
static void _vala_chess_view2_d_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
248
static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
249
static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
252
ChessView2D* chess_view2_d_construct (GType object_type) {
253
ChessView2D * self = NULL;
254
self = (ChessView2D*) chess_view_construct (object_type);
255
gtk_widget_add_events ((GtkWidget*) self, (gint) GDK_BUTTON_PRESS_MASK);
260
ChessView2D* chess_view2_d_new (void) {
261
return chess_view2_d_construct (TYPE_CHESS_VIEW2_D);
265
static gboolean chess_view2_d_real_configure_event (GtkWidget* base, GdkEventConfigure* event) {
267
gboolean result = FALSE;
274
self = (ChessView2D*) base;
275
_tmp0_ = gtk_widget_get_allocated_width ((GtkWidget*) self);
276
_tmp1_ = gtk_widget_get_allocated_height ((GtkWidget*) self);
277
_tmp2_ = MIN (_tmp0_, _tmp1_);
279
_tmp3_ = floor ((short_edge - (2 * self->priv->border)) / 9.0);
280
self->priv->square_size = (gint) _tmp3_;
281
extra = self->priv->square_size * 0.1;
285
self->priv->selected_square_size = self->priv->square_size + (2 * ((gint) (extra + 0.5)));
291
static void chess_view2_d_render_piece (ChessView2D* self, cairo_t* c1, cairo_t* c2, const gchar* name, gint offset) {
292
RsvgHandle* handle = NULL;
293
ChessScene* _tmp0_ = NULL;
294
const gchar* _tmp1_ = NULL;
297
gchar* _tmp4_ = NULL;
299
RsvgHandle* _tmp6_ = NULL;
306
GError * _inner_error_ = NULL;
307
g_return_if_fail (self != NULL);
308
g_return_if_fail (c1 != NULL);
309
g_return_if_fail (c2 != NULL);
310
g_return_if_fail (name != NULL);
311
_tmp0_ = chess_view_get_scene ((ChessView*) self);
312
_tmp1_ = chess_scene_get_theme_name (_tmp0_);
313
_tmp2_ = g_strconcat (name, ".svg", NULL);
315
_tmp4_ = g_build_filename (PKGDATADIR, "pieces", _tmp1_, _tmp3_, NULL, NULL);
317
_tmp6_ = rsvg_handle_new_from_file (_tmp5_, &_inner_error_);
322
if (_inner_error_ != NULL) {
323
goto __catch12_g_error;
325
_g_object_unref0 (handle);
332
_inner_error_ = NULL;
333
fprintf (stderr, "Failed to load piece svg: %s", e->message);
335
_g_object_unref0 (handle);
339
if (_inner_error_ != NULL) {
340
_g_object_unref0 (handle);
341
g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
342
g_clear_error (&_inner_error_);
346
cairo_translate (c1, (gdouble) (self->priv->square_size * offset), (gdouble) 0);
347
g_object_get (handle, "width", &_tmp9_, NULL);
348
g_object_get (handle, "height", &_tmp10_, NULL);
349
cairo_scale (c1, ((gdouble) self->priv->square_size) / _tmp9_, ((gdouble) self->priv->square_size) / _tmp10_);
350
rsvg_handle_render_cairo (handle, c1);
353
cairo_translate (c2, (gdouble) (self->priv->selected_square_size * offset), (gdouble) 0);
354
g_object_get (handle, "width", &_tmp11_, NULL);
355
g_object_get (handle, "height", &_tmp12_, NULL);
356
cairo_scale (c2, ((gdouble) self->priv->selected_square_size) / _tmp11_, ((gdouble) self->priv->selected_square_size) / _tmp12_);
357
rsvg_handle_render_cairo (handle, c2);
359
_g_object_unref0 (handle);
363
static void chess_view2_d_load_theme (ChessView2D* self) {
364
gboolean _tmp0_ = FALSE;
365
gboolean _tmp1_ = FALSE;
366
ChessScene* _tmp2_ = NULL;
367
const gchar* _tmp3_ = NULL;
368
cairo_surface_t* _tmp5_ = NULL;
369
cairo_surface_t* _tmp6_ = NULL;
370
cairo_t* _tmp7_ = NULL;
372
cairo_t* _tmp8_ = NULL;
374
ChessScene* _tmp9_ = NULL;
375
const gchar* _tmp10_ = NULL;
377
g_return_if_fail (self != NULL);
378
_tmp2_ = chess_view_get_scene ((ChessView*) self);
379
_tmp3_ = chess_scene_get_theme_name (_tmp2_);
380
if (g_strcmp0 (_tmp3_, self->priv->loaded_theme_name) == 0) {
381
_tmp1_ = self->priv->model_surface != NULL;
387
_tmp4_ = cairo_image_surface_get_height (self->priv->model_surface);
388
_tmp0_ = self->priv->square_size == _tmp4_;
395
_tmp5_ = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 12 * self->priv->square_size, self->priv->square_size);
396
_cairo_surface_destroy0 (self->priv->model_surface);
397
self->priv->model_surface = _tmp5_;
398
_tmp6_ = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 12 * self->priv->selected_square_size, self->priv->selected_square_size);
399
_cairo_surface_destroy0 (self->priv->selected_model_surface);
400
self->priv->selected_model_surface = _tmp6_;
401
_tmp7_ = cairo_create (self->priv->model_surface);
403
_tmp8_ = cairo_create (self->priv->selected_model_surface);
405
chess_view2_d_render_piece (self, c1, c2, "whitePawn", 0);
406
chess_view2_d_render_piece (self, c1, c2, "whiteRook", 1);
407
chess_view2_d_render_piece (self, c1, c2, "whiteKnight", 2);
408
chess_view2_d_render_piece (self, c1, c2, "whiteBishop", 3);
409
chess_view2_d_render_piece (self, c1, c2, "whiteQueen", 4);
410
chess_view2_d_render_piece (self, c1, c2, "whiteKing", 5);
411
chess_view2_d_render_piece (self, c1, c2, "blackPawn", 6);
412
chess_view2_d_render_piece (self, c1, c2, "blackRook", 7);
413
chess_view2_d_render_piece (self, c1, c2, "blackKnight", 8);
414
chess_view2_d_render_piece (self, c1, c2, "blackBishop", 9);
415
chess_view2_d_render_piece (self, c1, c2, "blackQueen", 10);
416
chess_view2_d_render_piece (self, c1, c2, "blackKing", 11);
417
_tmp9_ = chess_view_get_scene ((ChessView*) self);
418
_tmp10_ = chess_scene_get_theme_name (_tmp9_);
419
_tmp11_ = g_strdup (_tmp10_);
420
_g_free0 (self->priv->loaded_theme_name);
421
self->priv->loaded_theme_name = _tmp11_;
422
_cairo_destroy0 (c2);
423
_cairo_destroy0 (c1);
427
static gpointer _chess_model_ref0 (gpointer self) {
428
return self ? chess_model_ref (self) : NULL;
432
static gboolean chess_view2_d_real_draw (GtkWidget* base, cairo_t* c) {
434
gboolean result = FALSE;
437
ChessScene* _tmp2_ = NULL;
442
ChessScene* _tmp8_ = NULL;
444
ChessScene* _tmp37_ = NULL;
445
self = (ChessView2D*) base;
446
g_return_val_if_fail (c != NULL, FALSE);
447
chess_view2_d_load_theme (self);
448
_tmp0_ = gtk_widget_get_allocated_width ((GtkWidget*) self);
449
_tmp1_ = gtk_widget_get_allocated_height ((GtkWidget*) self);
450
cairo_translate (c, (gdouble) (_tmp0_ / 2), (gdouble) (_tmp1_ / 2));
451
_tmp2_ = chess_view_get_scene ((ChessView*) self);
452
_tmp3_ = chess_scene_get_board_angle (_tmp2_);
453
cairo_rotate (c, (G_PI * _tmp3_) / 180.0);
454
_tmp4_ = chess_view2_d_get_border_size (self);
455
_tmp5_ = ceil ((self->priv->square_size * 4) + _tmp4_);
456
board_size = (gint) _tmp5_;
457
cairo_set_source_rgb (c, 0x2e / 255.0, 0x34 / 255.0, 0x36 / 255.0);
458
cairo_rectangle (c, (gdouble) (-board_size), (gdouble) (-board_size), (gdouble) (board_size * 2), (gdouble) (board_size * 2));
490
x = (gint) ((file - 4) * self->priv->square_size);
491
y = (gint) ((3 - rank) * self->priv->square_size);
492
cairo_rectangle (c, (gdouble) x, (gdouble) y, (gdouble) self->priv->square_size, (gdouble) self->priv->square_size);
493
if (((file + rank) % 2) == 0) {
494
cairo_set_source_rgb (c, 0xba / 255.0, 0xbd / 255.0, 0xb6 / 255.0);
496
cairo_set_source_rgb (c, 0xee / 255.0, 0xee / 255.0, 0xec / 255.0);
505
_tmp8_ = chess_view_get_scene ((ChessView*) self);
506
_tmp9_ = chess_scene_get_show_numbering (_tmp8_);
516
gchar** _tmp18_ = NULL;
528
gchar** _tmp27_ = NULL;
533
cairo_text_extents_t extents = {0};
534
cairo_text_extents_t _tmp29_ = {0};
541
_tmp10_ = g_strdup ("a");
542
_tmp11_ = g_strdup ("b");
543
_tmp12_ = g_strdup ("c");
544
_tmp13_ = g_strdup ("d");
545
_tmp14_ = g_strdup ("e");
546
_tmp15_ = g_strdup ("f");
547
_tmp16_ = g_strdup ("g");
548
_tmp17_ = g_strdup ("h");
549
_tmp18_ = g_new0 (gchar*, 8 + 1);
550
_tmp18_[0] = _tmp10_;
551
_tmp18_[1] = _tmp11_;
552
_tmp18_[2] = _tmp12_;
553
_tmp18_[3] = _tmp13_;
554
_tmp18_[4] = _tmp14_;
555
_tmp18_[5] = _tmp15_;
556
_tmp18_[6] = _tmp16_;
557
_tmp18_[7] = _tmp17_;
561
_tmp19_ = g_strdup ("8");
562
_tmp20_ = g_strdup ("7");
563
_tmp21_ = g_strdup ("6");
564
_tmp22_ = g_strdup ("5");
565
_tmp23_ = g_strdup ("4");
566
_tmp24_ = g_strdup ("3");
567
_tmp25_ = g_strdup ("2");
568
_tmp26_ = g_strdup ("1");
569
_tmp27_ = g_new0 (gchar*, 8 + 1);
570
_tmp27_[0] = _tmp19_;
571
_tmp27_[1] = _tmp20_;
572
_tmp27_[2] = _tmp21_;
573
_tmp27_[3] = _tmp22_;
574
_tmp27_[4] = _tmp23_;
575
_tmp27_[5] = _tmp24_;
576
_tmp27_[6] = _tmp25_;
577
_tmp27_[7] = _tmp26_;
581
cairo_set_source_rgb (c, 0x88 / 255.0, 0x8a / 255.0, 0x85 / 255.0);
582
_tmp28_ = chess_view2_d_get_border_size (self);
583
cairo_set_font_size (c, _tmp28_ * 0.6);
584
cairo_select_font_face (c, "sans-serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
585
cairo_text_extents (c, "abcdefgh", &_tmp29_);
587
y_offset = ((((self->priv->square_size / 2) - extents.height) / 2) + extents.height) + extents.y_bearing;
588
top = -((self->priv->square_size * 4) + y_offset);
589
_tmp30_ = chess_view2_d_get_border_size (self);
590
bottom = ((self->priv->square_size * 4) + _tmp30_) - y_offset;
591
file_offset = -(self->priv->square_size * 3.5);
592
rank_offset = -(self->priv->square_size * 3.5);
600
cairo_text_extents_t _tmp32_ = {0};
601
cairo_text_extents_t _tmp33_ = {0};
612
cairo_text_extents (c, ranks[i], &_tmp32_);
615
cairo_move_to (c, file_offset - (extents.width / 2), top);
616
cairo_show_text (c, files[i]);
619
cairo_move_to (c, file_offset - (extents.width / 2), bottom);
620
cairo_show_text (c, files[i]);
622
cairo_text_extents (c, ranks[i], &_tmp33_);
624
y_offset = -(extents.y_bearing + (extents.height / 2));
626
_tmp34_ = chess_view2_d_get_border_size (self);
627
_tmp35_ = chess_view2_d_get_border_size (self);
628
cairo_move_to (c, -(((((gdouble) self->priv->square_size) * 4) + _tmp34_) - ((_tmp35_ - extents.width) / 2)), rank_offset + y_offset);
629
cairo_show_text (c, ranks[i]);
632
_tmp36_ = chess_view2_d_get_border_size (self);
633
cairo_move_to (c, (((gdouble) self->priv->square_size) * 4) + ((_tmp36_ - extents.width) / 2), rank_offset + y_offset);
634
cairo_show_text (c, ranks[i]);
636
file_offset = file_offset + ((gdouble) self->priv->square_size);
637
rank_offset = rank_offset + ((gdouble) self->priv->square_size);
641
ranks = (_vala_array_free (ranks, ranks_length1, (GDestroyNotify) g_free), NULL);
642
files = (_vala_array_free (files, files_length1, (GDestroyNotify) g_free), NULL);
644
_tmp37_ = chess_view_get_scene ((ChessView*) self);
646
GList* model_collection;
648
model_collection = _tmp37_->pieces;
649
for (model_it = model_collection; model_it != NULL; model_it = model_it->next) {
652
_tmp38_ = _chess_model_ref0 ((ChessModel*) model_it->data);
655
ChessScene* _tmp39_ = NULL;
657
cairo_surface_t* _tmp41_ = NULL;
658
gdouble _tmp42_ = 0.0;
659
gboolean _tmp43_ = FALSE;
661
cairo_translate (c, (model->x - 4) * self->priv->square_size, (3 - model->y) * self->priv->square_size);
662
cairo_translate (c, (gdouble) (self->priv->square_size / 2), (gdouble) (self->priv->square_size / 2));
663
_tmp39_ = chess_view_get_scene ((ChessView*) self);
664
_tmp40_ = chess_scene_get_board_angle (_tmp39_);
665
cairo_rotate (c, ((-G_PI) * _tmp40_) / 180.0);
666
if (model->is_selected) {
667
_tmp41_ = self->priv->selected_model_surface;
669
_tmp41_ = self->priv->model_surface;
671
if (model->under_threat) {
672
ChessScene* _tmp44_ = NULL;
674
_tmp44_ = chess_view_get_scene ((ChessView*) self);
675
_tmp45_ = chess_scene_get_show_move_hints (_tmp44_);
685
chess_view2_d_draw_piece (self, c, _tmp41_, model->piece, _tmp42_);
687
_chess_model_unref0 (model);
712
gboolean _tmp48_ = FALSE;
713
ChessScene* _tmp49_ = NULL;
722
_tmp49_ = chess_view_get_scene ((ChessView*) self);
723
_tmp50_ = chess_scene_get_show_move_hints (_tmp49_);
725
ChessScene* _tmp51_ = NULL;
727
_tmp51_ = chess_view_get_scene ((ChessView*) self);
728
_tmp52_ = chess_scene_can_move (_tmp51_, rank, file);
734
ChessScene* _tmp53_ = NULL;
736
ChessScene* _tmp55_ = NULL;
737
ChessPiece* _tmp56_ = NULL;
740
cairo_translate (c, (gdouble) ((file - 4) * self->priv->square_size), (gdouble) ((3 - rank) * self->priv->square_size));
741
cairo_translate (c, (gdouble) (self->priv->square_size / 2), (gdouble) (self->priv->square_size / 2));
742
_tmp53_ = chess_view_get_scene ((ChessView*) self);
743
_tmp54_ = chess_scene_get_board_angle (_tmp53_);
744
cairo_rotate (c, ((-G_PI) * _tmp54_) / 180.0);
745
_tmp55_ = chess_view_get_scene ((ChessView*) self);
746
_tmp56_ = chess_scene_get_selected_piece (_tmp55_);
748
chess_view2_d_draw_piece (self, c, self->priv->model_surface, _tmp57_, 0.1);
749
_chess_piece_unref0 (_tmp57_);
763
static void chess_view2_d_draw_piece (ChessView2D* self, cairo_t* c, cairo_surface_t* surface, ChessPiece* piece, gdouble alpha) {
764
gboolean _tmp0_ = FALSE;
765
ChessScene* _tmp1_ = NULL;
766
const gchar* _tmp2_ = NULL;
771
g_return_if_fail (self != NULL);
772
g_return_if_fail (c != NULL);
773
g_return_if_fail (surface != NULL);
774
g_return_if_fail (piece != NULL);
775
_tmp1_ = chess_view_get_scene ((ChessView*) self);
776
_tmp2_ = chess_scene_get_board_side (_tmp1_);
777
if (g_strcmp0 (_tmp2_, "facetoface") == 0) {
779
_tmp3_ = chess_piece_get_color (piece);
780
_tmp0_ = _tmp3_ == COLOR_BLACK;
785
cairo_rotate (c, G_PI);
787
_tmp4_ = cairo_image_surface_get_height (surface);
789
cairo_translate (c, (gdouble) ((-size) / 2), (gdouble) ((-size) / 2));
790
offset = (gint) piece->type;
791
_tmp5_ = chess_piece_get_color (piece);
792
if (_tmp5_ == COLOR_BLACK) {
795
cairo_set_source_surface (c, surface, (gdouble) ((-offset) * size), (gdouble) 0);
796
cairo_rectangle (c, (gdouble) 0, (gdouble) 0, (gdouble) size, (gdouble) size);
798
cairo_paint_with_alpha (c, alpha);
802
static gboolean chess_view2_d_real_button_press_event (GtkWidget* base, GdkEventButton* event) {
804
gboolean result = FALSE;
805
gboolean _tmp0_ = FALSE;
806
ChessScene* _tmp1_ = NULL;
807
ChessGame* _tmp2_ = NULL;
814
ChessScene* _tmp7_ = NULL;
816
gboolean _tmp9_ = FALSE;
817
gboolean _tmp10_ = FALSE;
818
gboolean _tmp11_ = FALSE;
819
ChessScene* _tmp12_ = NULL;
820
self = (ChessView2D*) base;
821
_tmp1_ = chess_view_get_scene ((ChessView*) self);
822
_tmp2_ = chess_scene_get_game (_tmp1_);
823
if (_tmp2_ == NULL) {
826
_tmp0_ = (*event).button != 1;
832
_tmp3_ = gtk_widget_get_allocated_width ((GtkWidget*) self);
833
_tmp4_ = floor ((((*event).x - (0.5 * _tmp3_)) + (self->priv->square_size * 4)) / self->priv->square_size);
834
file = (gint) _tmp4_;
835
_tmp5_ = gtk_widget_get_allocated_height ((GtkWidget*) self);
836
_tmp6_ = floor ((((*event).y - (0.5 * _tmp5_)) + (self->priv->square_size * 4)) / self->priv->square_size);
837
rank = 7 - ((gint) _tmp6_);
838
_tmp7_ = chess_view_get_scene ((ChessView*) self);
839
_tmp8_ = chess_scene_get_board_angle (_tmp7_);
840
if (_tmp8_ == 180.0) {
863
_tmp12_ = chess_view_get_scene ((ChessView*) self);
864
chess_scene_select_square (_tmp12_, file, rank);
870
static gdouble chess_view2_d_get_border_size (ChessView2D* self) {
872
g_return_val_if_fail (self != NULL, 0.0);
873
result = (gdouble) (self->priv->square_size / 2);
878
static void chess_view2_d_class_init (ChessView2DClass * klass) {
879
chess_view2_d_parent_class = g_type_class_peek_parent (klass);
880
g_type_class_add_private (klass, sizeof (ChessView2DPrivate));
881
GTK_WIDGET_CLASS (klass)->configure_event = chess_view2_d_real_configure_event;
882
GTK_WIDGET_CLASS (klass)->draw = chess_view2_d_real_draw;
883
GTK_WIDGET_CLASS (klass)->button_press_event = chess_view2_d_real_button_press_event;
884
G_OBJECT_CLASS (klass)->get_property = _vala_chess_view2_d_get_property;
885
G_OBJECT_CLASS (klass)->finalize = chess_view2_d_finalize;
889
static void chess_view2_d_instance_init (ChessView2D * self) {
891
self->priv = CHESS_VIEW2_D_GET_PRIVATE (self);
892
self->priv->border = 6;
893
_tmp0_ = g_strdup ("");
894
self->priv->loaded_theme_name = _tmp0_;
898
static void chess_view2_d_finalize (GObject* obj) {
900
self = CHESS_VIEW2_D (obj);
901
_cairo_surface_destroy0 (self->priv->model_surface);
902
_cairo_surface_destroy0 (self->priv->selected_model_surface);
903
_g_free0 (self->priv->loaded_theme_name);
904
G_OBJECT_CLASS (chess_view2_d_parent_class)->finalize (obj);
908
GType chess_view2_d_get_type (void) {
909
static volatile gsize chess_view2_d_type_id__volatile = 0;
910
if (g_once_init_enter (&chess_view2_d_type_id__volatile)) {
911
static const GTypeInfo g_define_type_info = { sizeof (ChessView2DClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) chess_view2_d_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ChessView2D), 0, (GInstanceInitFunc) chess_view2_d_instance_init, NULL };
912
GType chess_view2_d_type_id;
913
chess_view2_d_type_id = g_type_register_static (TYPE_CHESS_VIEW, "ChessView2D", &g_define_type_info, 0);
914
g_once_init_leave (&chess_view2_d_type_id__volatile, chess_view2_d_type_id);
916
return chess_view2_d_type_id__volatile;
920
static void _vala_chess_view2_d_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
922
self = CHESS_VIEW2_D (object);
923
switch (property_id) {
925
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
931
static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
932
if ((array != NULL) && (destroy_func != NULL)) {
934
for (i = 0; i < array_length; i = i + 1) {
935
if (((gpointer*) array)[i] != NULL) {
936
destroy_func (((gpointer*) array)[i]);
943
static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
944
_vala_array_destroy (array, array_length, destroy_func);