#include <gtk/gtk.h>
#include <math.h>
+#include "loa-board.h"
+
#define BOARD_SIZE 8
typedef struct {
int cell_size;
} layout_t;
+typedef struct {
+ layout_t layout;
+ loa_board_t board;
+} loa_game_t;
+
static gboolean
on_delete_event_quit (GtkWidget *widget,
GdkEvent *event,
return FALSE;
}
+/* Something like buff */
+#define LIGHT_SQUARE_COLOR 0.89, 0.70, 0.40
+/* Something like mahogany */
+#define DARK_SQUARE_COLOR 0.26, 0.02, 0.01
+
static gboolean
on_expose_event_draw (GtkWidget *widget,
GdkEventExpose *event,
gpointer user_data)
{
+ loa_game_t *game = user_data;
+ layout_t *layout = &game->layout;
cairo_t *cr;
- layout_t *layout = user_data;
int x, y;
if (layout->width != widget->allocation.width ||
for (y = 0; y < BOARD_SIZE; y++) {
for (x = 0; x < BOARD_SIZE; x++) {
+ loa_cell_t cell;
+ cairo_save (cr);
+ cairo_translate(cr, x * layout->cell_size, y * layout->cell_size);
if ((x + y) % 2 == 0)
- cairo_set_source_rgb (cr, 0.89, 0.70, 0.40);
+ cairo_set_source_rgb (cr, LIGHT_SQUARE_COLOR);
else
- cairo_set_source_rgb (cr, 0.26, 0.02, 0.01);
- cairo_rectangle (cr,
- x * layout->cell_size, y * layout->cell_size,
- layout->cell_size, layout->cell_size);
+ cairo_set_source_rgb (cr, DARK_SQUARE_COLOR);
+ cairo_rectangle (cr, 0, 0, layout->cell_size, layout->cell_size);
cairo_fill (cr);
+ cell = game->board.cells[x][y];
+ if (cell != LOA_CELL_EMPTY) {
+ cairo_arc (cr,
+ layout->cell_size / 2.0, layout->cell_size / 2.0,
+ layout->cell_size / 2.5,
+ 0, 2 * M_PI);
+ if (cell == LOA_CELL_BLACK)
+ cairo_set_source_rgb (cr, 0, 0, 0); /* black */
+ else
+ cairo_set_source_rgb (cr, 1, 1, 1); /* white */
+ cairo_fill_preserve (cr);
+ cairo_set_line_width (cr, 2.0);
+ if (cell == LOA_CELL_BLACK)
+ cairo_set_source_rgb (cr, LIGHT_SQUARE_COLOR);
+ else
+ cairo_set_source_rgb (cr, DARK_SQUARE_COLOR);
+ cairo_stroke (cr);
+ }
+ cairo_restore (cr);
}
}
return TRUE;
}
+static void
+loa_game_init (loa_game_t *game)
+{
+ game->layout.width = 0;
+ game->layout.height = 0;
+
+ loa_board_init (&game->board);
+}
+
int
main (int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *drawing_area;
- layout_t layout;
+ loa_game_t game;
- layout.width = 0;
- layout.height = 0;
+ loa_game_init (&game);
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_default_size (GTK_WINDOW (window), 100, 100);
+ gtk_window_set_default_size (GTK_WINDOW (window), 256, 256);
g_signal_connect (window, "delete-event",
G_CALLBACK (on_delete_event_quit), NULL);
gtk_container_add (GTK_CONTAINER (window), drawing_area);
g_signal_connect (drawing_area, "expose-event",
- G_CALLBACK (on_expose_event_draw), &layout);
+ G_CALLBACK (on_expose_event_draw), &game);
gtk_widget_show_all (window);