#include #include hexagram_cluster *hexagram_cluster_new(double width, double height) { hexagram_cluster *cluster; if ((cluster = malloc(sizeof(*cluster))) == NULL) { goto error_malloc_cluster; } hexagram_tacho_init(&cluster->tacho, width * 0.2, height * 0.5, height * 0.4, 6500.0); hexagram_speedo_init(&cluster->speedo, width * 0.8, height * 0.5, height * 0.4); hexagram_thermo_init(&cluster->thermo, width * 0.43, height * 0.76, height * 0.13, 240.0); hexagram_fuel_init(&cluster->fuel, width * 0.57, height * 0.76, height * 0.13, 0.125); hexagram_mfd_init(&cluster->mfd, width * 0.42, height * 0.10, width * 0.16, height * 0.50); cluster->width = width; cluster->height = height; return cluster; error_malloc_cluster: return NULL; } void hexagram_cluster_draw_bg(hexagram_cluster *cluster, cairo_t *cr) { /* * Paint canvas black */ cairo_set_source_rgb(cr, 0, 0, 0); cairo_paint(cr); hexagram_tacho_draw_face(&cluster->tacho, cr); hexagram_speedo_draw_face(&cluster->speedo, cr); hexagram_thermo_draw_face(&cluster->thermo, cr); hexagram_fuel_draw_face(&cluster->fuel, cr); hexagram_mfd_draw(&cluster->mfd, cr); } void hexagram_cluster_draw_fg(hexagram_cluster *cluster, cairo_t *cr, hexagram_cluster_state *state) { hexagram_tacho_draw_needle(&cluster->tacho, cr, state->rpm); hexagram_speedo_draw_needle(&cluster->speedo, cr, (2.032 * state->rps * 3600) / 1000.0); hexagram_thermo_draw_needle(&cluster->thermo, cr, state->temp); hexagram_fuel_draw_needle(&cluster->fuel, cr, state->fuel); }