X-Git-Url: https://git.cworth.org/git?p=loa;a=blobdiff_plain;f=loa.c;fp=loa.c;h=49b4f16ff63dd2cfc30b5ba2cfa8135a55a8ce2b;hp=48b5b045c3fdf76e4418a03e773eb4157581fd3e;hb=8a4f047dec04d825e2074113a7c8f1ba3c602889;hpb=4ce79f50d09eb624783e864194669eb0862d6f7c diff --git a/loa.c b/loa.c index 48b5b04..49b4f16 100644 --- a/loa.c +++ b/loa.c @@ -20,6 +20,8 @@ #include #include +#include "loa-board.h" + #define BOARD_SIZE 8 typedef struct { @@ -30,6 +32,11 @@ 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, @@ -42,13 +49,19 @@ on_delete_event_quit (GtkWidget *widget, 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 || @@ -74,14 +87,34 @@ on_expose_event_draw (GtkWidget *widget, 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); } } @@ -90,15 +123,23 @@ on_expose_event_draw (GtkWidget *widget, 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); @@ -114,7 +155,7 @@ main (int argc, char *argv[]) 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);