hexagram/src/fuel.c
XANTRONIX Development b2de1920dd Gauge face adjustments
2019-06-28 18:10:01 -05:00

88 lines
2.2 KiB
C

#include <math.h>
#include <hexagram/gauge.h>
#include <hexagram/fuel.h>
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++) {
double min_radius = (i <= 4)?
(i % 2? 0.8: 0.7):
(i % 4? 0.8: 0.7);
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,
min_radius,
0.9,
(double)i / 16.0);
}
}
void hexagram_fuel_draw_needle(hexagram_fuel *fuel,
cairo_t *cr,
double level) {
if (level < 0.0) {
level = 0.0;
} else if (level > 1.0) {
level = 1.0;
}
cairo_stroke(cr);
hexagram_gauge_draw_needle(&fuel->gauge,
cr,
0.9,
level);
}