Render gauges, honouring alpha channel

This commit is contained in:
XANTRONIX Development 2024-01-19 12:54:05 -05:00
parent 8a66a74b95
commit 29943037d3
7 changed files with 26 additions and 26 deletions

View file

@ -74,7 +74,7 @@ static int main_draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
}; };
/* Gauge face */ /* Gauge face */
cairo_set_source_rgba(cr, 0, 0, 0, 1); cairo_set_source_rgba(cr, 0, 0, 0, gauge->alpha);
cairo_arc(cr, arc[0], arc[1], arc[2], arc[3], arc[4]); cairo_arc(cr, arc[0], arc[1], arc[2], arc[3], arc[4]);
cairo_fill(cr); cairo_fill(cr);
@ -85,7 +85,7 @@ static int main_draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
cairo_stroke(cr); cairo_stroke(cr);
/* Gauge centre bezel */ /* Gauge centre bezel */
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
cairo_set_line_width(cr, DIAL_MAIN_BEZEL_WIDTH / 3.0); cairo_set_line_width(cr, DIAL_MAIN_BEZEL_WIDTH / 3.0);
cairo_arc(cr, dial->gauge.x, dial->gauge.y, dial->radius / 2, 0, 2.0 * M_PI); cairo_arc(cr, dial->gauge.x, dial->gauge.y, dial->radius / 2, 0, 2.0 * M_PI);
cairo_stroke(cr); cairo_stroke(cr);
@ -98,7 +98,7 @@ static int main_draw_fg(hexagram_gauge *gauge, cairo_t *cr) {
double angle = hexagram_dial_angle(dial, dial->value); double angle = hexagram_dial_angle(dial, dial->value);
cairo_set_line_width(cr, dial->radius * 0.375); cairo_set_line_width(cr, dial->radius * 0.375);
cairo_set_source_rgba(cr, 1, 0.4, 1, 0.25); cairo_set_source_rgba(cr, 1, 0.4, 1, 0.25 * gauge->alpha);
cairo_arc(cr, cairo_arc(cr,
dial->gauge.x, dial->gauge.x,
@ -118,7 +118,7 @@ static int bottom_draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
hexagram_dial *dial = (hexagram_dial *)gauge; hexagram_dial *dial = (hexagram_dial *)gauge;
cairo_set_line_width(cr, 24); cairo_set_line_width(cr, 24);
cairo_set_source_rgb(cr, 0.2, 0.2, 0.2); cairo_set_source_rgba(cr, 0.2, 0.2, 0.2, gauge->alpha);
cairo_arc(cr, cairo_arc(cr,
dial->gauge.x, dial->gauge.x,
@ -147,8 +147,8 @@ int hexagram_dial_init(hexagram_dial *dial,
double max_angle, double max_angle,
double min_value, double min_value,
double max_value) { double max_value) {
dial->gauge.x = x; hexagram_gauge_init(&dial->gauge, x, y, NULL, NULL);
dial->gauge.y = y;
dial->type = type; dial->type = type;
dial->radius = radius; dial->radius = radius;
dial->min_angle = min_angle; dial->min_angle = min_angle;
@ -280,7 +280,7 @@ int hexagram_dial_draw_needle(hexagram_dial *dial, cairo_t *cr, double value) {
max_radius = DIAL_RADIUS_NEEDLE_BOTTOM_MAX; max_radius = DIAL_RADIUS_NEEDLE_BOTTOM_MAX;
} }
cairo_set_source_rgba(cr, 1, 0.4, 1, 0.75); cairo_set_source_rgba(cr, 1, 0.4, 1, 0.75 * dial->gauge.alpha);
cairo_set_line_width(cr, 8); cairo_set_line_width(cr, 8);
cairo_move_to(cr, cairo_move_to(cr,

View file

@ -30,10 +30,10 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
cairo_set_font_size(cr, fuel->dial.radius * 0.1); cairo_set_font_size(cr, fuel->dial.radius * 0.1);
cairo_set_source_rgb(cr, 1, 0, 0); cairo_set_source_rgba(cr, 1, 0, 0, gauge->alpha);
hexagram_dial_draw_legend(&fuel->dial, cr, 0, "0"); hexagram_dial_draw_legend(&fuel->dial, cr, 0, "0");
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
hexagram_dial_draw_legend(&fuel->dial, cr, fuel->dial.max_value, "1"); hexagram_dial_draw_legend(&fuel->dial, cr, fuel->dial.max_value, "1");
cairo_set_line_width(cr, 6.0); cairo_set_line_width(cr, 6.0);
@ -42,13 +42,13 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
int large = 0; int large = 0;
if (level < 2) { if (level < 2) {
cairo_set_source_rgb(cr, 1, 0, 0); cairo_set_source_rgba(cr, 1, 0, 0, gauge->alpha);
} else if (level < 4) { } else if (level < 4) {
large = 1; large = 1;
cairo_set_source_rgb(cr, 1, 0, 0); cairo_set_source_rgba(cr, 1, 0, 0, gauge->alpha);
} else { } else {
large = 1; large = 1;
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
} }
hexagram_dial_draw_mark(&fuel->dial, cr, level, large); hexagram_dial_draw_mark(&fuel->dial, cr, level, large);

View file

@ -25,7 +25,7 @@ static int draw_text(hexagram_speedo *speedo,
CAIRO_FONT_WEIGHT_BOLD); CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size(cr, speedo->dial.radius * size); cairo_set_font_size(cr, speedo->dial.radius * size);
cairo_set_source_rgb(cr, 1, 0.4, 1); cairo_set_source_rgba(cr, 1, 0.4, 1, speedo->dial.gauge.alpha);
cairo_text_extents(cr, text, &extents); cairo_text_extents(cr, text, &extents);
@ -59,7 +59,7 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
CAIRO_FONT_WEIGHT_BOLD); CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size(cr, speedo->dial.radius * font_size); cairo_set_font_size(cr, speedo->dial.radius * font_size);
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
for (speed=0; speed<=max; speed += 5) { for (speed=0; speed<=max; speed += 5) {
int large = speed % 10 == 0? 1: 0; int large = speed % 10 == 0? 1: 0;

View file

@ -27,13 +27,13 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
CAIRO_FONT_WEIGHT_BOLD); CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size(cr, tacho->dial.radius * 0.15); cairo_set_font_size(cr, tacho->dial.radius * 0.15);
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
for (rpm=0; rpm<=(int)tacho->dial.max_value; rpm+=INTERVAL_MARK) { for (rpm=0; rpm<=(int)tacho->dial.max_value; rpm+=INTERVAL_MARK) {
int large = (rpm % INTERVAL_LEGEND) == 0? 1: 0; int large = (rpm % INTERVAL_LEGEND) == 0? 1: 0;
if (rpm >= tacho->redline) { if (rpm >= tacho->redline) {
cairo_set_source_rgb(cr, 0.6, 0.1, 0.1); cairo_set_source_rgba(cr, 0.6, 0.1, 0.1, gauge->alpha);
} }
cairo_set_line_width(cr, large? 6.0: 2.0); cairo_set_line_width(cr, large? 6.0: 2.0);
@ -41,13 +41,13 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
hexagram_dial_draw_mark(&tacho->dial, cr, rpm, large); hexagram_dial_draw_mark(&tacho->dial, cr, rpm, large);
} }
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
for (rpm=0; rpm<=(int)tacho->dial.max_value; rpm+=INTERVAL_LEGEND) { for (rpm=0; rpm<=(int)tacho->dial.max_value; rpm+=INTERVAL_LEGEND) {
char buf[8]; char buf[8];
if (rpm >= tacho->redline) { if (rpm >= tacho->redline) {
cairo_set_source_rgb(cr, 1.0, 0.1, 0.1); cairo_set_source_rgba(cr, 1.0, 0.1, 0.1, gauge->alpha);
} }
snprintf(buf, sizeof(buf), "%d", (int)(rpm / INTERVAL_LEGEND)); snprintf(buf, sizeof(buf), "%d", (int)(rpm / INTERVAL_LEGEND));
@ -115,7 +115,7 @@ static int draw_fg(hexagram_gauge *gauge, cairo_t *cr) {
CAIRO_FONT_WEIGHT_NORMAL); CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr, tacho->dial.radius * 0.4); cairo_set_font_size(cr, tacho->dial.radius * 0.4);
cairo_set_source_rgb(cr, 1, 0.4, 1); cairo_set_source_rgba(cr, 1, 0.4, 1, gauge->alpha);
cairo_text_extents(cr, buf, &extents); cairo_text_extents(cr, buf, &extents);
@ -209,7 +209,7 @@ static int shift_indicator_draw_level(hexagram_tacho_shift_indicator *shift,
b *= LIGHT_LOW; b *= LIGHT_LOW;
} }
cairo_set_source_rgb(cr, r, g, b); cairo_set_source_rgba(cr, r, g, b, shift->gauge.alpha);
for (i=0; i<2; i++) { for (i=0; i<2; i++) {
int l = light_levels[level][i]; int l = light_levels[level][i];

View file

@ -65,7 +65,7 @@ static int draw_fg(hexagram_gauge *gauge, cairo_t *cr) {
break; break;
} }
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
cairo_move_to(cr, text_x_offset, gauge->y); cairo_move_to(cr, text_x_offset, gauge->y);
cairo_show_text(cr, temp->text.buf); cairo_show_text(cr, temp->text.buf);

View file

@ -12,7 +12,7 @@ static int draw_fg(hexagram_gauge *gauge, cairo_t *cr) {
hexagram_text *text = (hexagram_text *)gauge; hexagram_text *text = (hexagram_text *)gauge;
cairo_text_extents_t extents; cairo_text_extents_t extents;
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
cairo_select_font_face(cr, cairo_select_font_face(cr,
FONT_FACE, FONT_FACE,

View file

@ -30,10 +30,10 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
cairo_set_font_size(cr, thermo->dial.radius * 0.1); cairo_set_font_size(cr, thermo->dial.radius * 0.1);
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
hexagram_dial_draw_legend(&thermo->dial, cr, thermo->dial.min_value, "C"); hexagram_dial_draw_legend(&thermo->dial, cr, thermo->dial.min_value, "C");
cairo_set_source_rgb(cr, 1, 0, 0); cairo_set_source_rgba(cr, 1, 0, 0, gauge->alpha);
hexagram_dial_draw_legend(&thermo->dial, cr, thermo->dial.max_value, "H"); hexagram_dial_draw_legend(&thermo->dial, cr, thermo->dial.max_value, "H");
cairo_set_line_width(cr, 6.0); cairo_set_line_width(cr, 6.0);
@ -44,9 +44,9 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) {
double level = thermo->dial.min_value + i * incr; double level = thermo->dial.min_value + i * incr;
if (level >= LEVEL_WARN) { if (level >= LEVEL_WARN) {
cairo_set_source_rgb(cr, 0.8, 0, 0); cairo_set_source_rgba(cr, 0.8, 0, 0, gauge->alpha);
} else { } else {
cairo_set_source_rgb(cr, 1, 1, 1); cairo_set_source_rgba(cr, 1, 1, 1, gauge->alpha);
} }
hexagram_dial_draw_mark(&thermo->dial, cr, level, 1); hexagram_dial_draw_mark(&thermo->dial, cr, level, 1);