#include #include #include void hexagram_fuel_init(hexagram_fuel *fuel, double x, double y, double radius, double redline) { hexagram_gauge_init(&fuel->gauge, x, y, radius, 300.0 * (M_PI / 180.0), 420.0 * (M_PI / 180.0)); fuel->redline = redline; } void hexagram_fuel_draw_face(hexagram_fuel *fuel, cairo_t *cr) { int i; cairo_set_source_rgb(cr, 1, 1, 1); cairo_arc(cr, fuel->gauge.x, fuel->gauge.y, fuel->gauge.radius, 0, 2.0 * M_PI); cairo_stroke(cr); cairo_move_to(cr, fuel->gauge.x - 0.8 * fuel->gauge.radius, fuel->gauge.y - 0.1 * fuel->gauge.radius); cairo_show_text(cr, "0"); cairo_move_to(cr, fuel->gauge.x - 0.15 * fuel->gauge.radius, fuel->gauge.y - 0.50 * fuel->gauge.radius); cairo_show_text(cr, "1/2"); cairo_move_to(cr, fuel->gauge.x + 0.65 * fuel->gauge.radius, fuel->gauge.y - 0.10 * fuel->gauge.radius); cairo_show_text(cr, "1"); /* * Draw gauge graduations */ for (i=0; i<=16; i++) { if (i <= (16.0 * fuel->redline)) { cairo_set_source_rgb(cr, 1, 0, 0); } else { cairo_set_source_rgb(cr, 1, 1, 1); } hexagram_gauge_draw_mark(&fuel->gauge, cr, (i % 4)? 0.8: 0.7, 0.9, (double)i / 16.0); } } void hexagram_fuel_draw_needle(hexagram_fuel *fuel, cairo_t *cr, double level) { if (level > 1.0) { level = 1.0; } /* * Draw a tiny boi circle */ cairo_set_source_rgb(cr, 1, 1, 1); cairo_arc(cr, fuel->gauge.x, fuel->gauge.y, fuel->gauge.radius * 0.08, 0, 2.0 * M_PI); cairo_stroke(cr); hexagram_gauge_draw_needle(&fuel->gauge, cr, 0.9, level / 1.0); }