88 lines
2.2 KiB
C
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);
|
|
}
|