From 29943037d31d7a8503c726286a3ae91004be2c3e Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Fri, 19 Jan 2024 12:54:05 -0500 Subject: [PATCH] Render gauges, honouring alpha channel --- src/dial.c | 14 +++++++------- src/fuel.c | 10 +++++----- src/speedo.c | 4 ++-- src/tacho.c | 12 ++++++------ src/temp.c | 2 +- src/text.c | 2 +- src/thermo.c | 8 ++++---- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/dial.c b/src/dial.c index c279237..42c11bd 100644 --- a/src/dial.c +++ b/src/dial.c @@ -74,7 +74,7 @@ static int main_draw_bg(hexagram_gauge *gauge, cairo_t *cr) { }; /* 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_fill(cr); @@ -85,7 +85,7 @@ static int main_draw_bg(hexagram_gauge *gauge, cairo_t *cr) { cairo_stroke(cr); /* 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_arc(cr, dial->gauge.x, dial->gauge.y, dial->radius / 2, 0, 2.0 * M_PI); 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); 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, dial->gauge.x, @@ -118,7 +118,7 @@ static int bottom_draw_bg(hexagram_gauge *gauge, cairo_t *cr) { hexagram_dial *dial = (hexagram_dial *)gauge; 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, dial->gauge.x, @@ -147,8 +147,8 @@ int hexagram_dial_init(hexagram_dial *dial, double max_angle, double min_value, double max_value) { - dial->gauge.x = x; - dial->gauge.y = y; + hexagram_gauge_init(&dial->gauge, x, y, NULL, NULL); + dial->type = type; dial->radius = radius; 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; } - 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_move_to(cr, diff --git a/src/fuel.c b/src/fuel.c index e963067..345f20e 100644 --- a/src/fuel.c +++ b/src/fuel.c @@ -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_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"); - 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"); cairo_set_line_width(cr, 6.0); @@ -42,13 +42,13 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) { int large = 0; 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) { large = 1; - cairo_set_source_rgb(cr, 1, 0, 0); + cairo_set_source_rgba(cr, 1, 0, 0, gauge->alpha); } else { 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); diff --git a/src/speedo.c b/src/speedo.c index bedf138..5ebd278 100644 --- a/src/speedo.c +++ b/src/speedo.c @@ -25,7 +25,7 @@ static int draw_text(hexagram_speedo *speedo, CAIRO_FONT_WEIGHT_BOLD); 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); @@ -59,7 +59,7 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) { CAIRO_FONT_WEIGHT_BOLD); 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) { int large = speed % 10 == 0? 1: 0; diff --git a/src/tacho.c b/src/tacho.c index bb5b7b9..59f8f8f 100644 --- a/src/tacho.c +++ b/src/tacho.c @@ -27,13 +27,13 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) { CAIRO_FONT_WEIGHT_BOLD); 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) { int large = (rpm % INTERVAL_LEGEND) == 0? 1: 0; 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); @@ -41,13 +41,13 @@ static int draw_bg(hexagram_gauge *gauge, cairo_t *cr) { 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) { char buf[8]; 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)); @@ -115,7 +115,7 @@ static int draw_fg(hexagram_gauge *gauge, cairo_t *cr) { CAIRO_FONT_WEIGHT_NORMAL); 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); @@ -209,7 +209,7 @@ static int shift_indicator_draw_level(hexagram_tacho_shift_indicator *shift, 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++) { int l = light_levels[level][i]; diff --git a/src/temp.c b/src/temp.c index 8eb2ae4..2b057b6 100644 --- a/src/temp.c +++ b/src/temp.c @@ -65,7 +65,7 @@ static int draw_fg(hexagram_gauge *gauge, cairo_t *cr) { 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_show_text(cr, temp->text.buf); diff --git a/src/text.c b/src/text.c index bd54543..8e8fcc2 100644 --- a/src/text.c +++ b/src/text.c @@ -12,7 +12,7 @@ static int draw_fg(hexagram_gauge *gauge, cairo_t *cr) { hexagram_text *text = (hexagram_text *)gauge; 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, FONT_FACE, diff --git a/src/thermo.c b/src/thermo.c index 9a5bd02..899f247 100644 --- a/src/thermo.c +++ b/src/thermo.c @@ -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_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"); - 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"); 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; 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 { - 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);