#include #include #include static void draw_event(GtkDrawingArea *area, cairo_t *cr, int width, int height, gpointer data) { const double fieldSize = (double)(width < height ? width : height) / 8; const double xOffset = (width - fieldSize * 8) / 2; const double yOffset = (height - fieldSize * 8) / 2; for(int x = 0; x < 8; ++x) { for(int y = 0; y < 8; ++y) { cairo_rectangle(cr, xOffset + x * fieldSize, yOffset + y * fieldSize, fieldSize, fieldSize); if((x + y) & 1) cairo_set_source_rgb(cr, 0.46274, 0.5882, 0.3373); else cairo_set_source_rgb(cr, 0.9333, 0.9333, 0.8235); cairo_fill(cr); } } } static void app_activate(GApplication *app, gpointer user_data) { GtkWindow *win; GtkWidget *drawArea; win = GTK_WINDOW(gtk_window_new()); drawArea = gtk_drawing_area_new(); gtk_window_set_child(win, drawArea); gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(drawArea), draw_event, NULL, NULL); gtk_window_set_application(win, GTK_APPLICATION(app)); gtk_window_present(win); } int main(int argc, char **argv) { GtkApplication *app; int stat; app = gtk_application_new("org.zinkel.chess", G_APPLICATION_DEFAULT_FLAGS); g_signal_connect(app, "activate", G_CALLBACK (app_activate), NULL); stat = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref (app); return stat; }