From 194d0eb0fe1627936bbc25a0a14bf7751d6b5d75 Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan Date: Mon, 27 Nov 2023 20:02:46 +0530 Subject: [PATCH] vfo: more cleanup of display code One caveat is that NR2/NR3/NR4 handling is broken as of now as far as displaying the status is concerned. --- screen.c | 36 +++++++++++----------- screen.h | 5 ++-- vfo.c | 91 +++++++++----------------------------------------------- 3 files changed, 34 insertions(+), 98 deletions(-) diff --git a/screen.c b/screen.c index c3006fc..eb0e0ba 100644 --- a/screen.c +++ b/screen.c @@ -11,22 +11,22 @@ const colour_t dark_green = { DARK_GREEN_R, DARK_GREEN_G, DARK_GREEN_B }; widget_props_t default_widget_prop_table[NUM_ACTIVE_BUTTONS] = { // label, x, y, font_size, off_colour, on_colour - [SCR_VFO_A] = { "", 285, 95, 70, white, green }, - [SCR_VFO_B] = { "", 285, 18, 18, grey, cyan }, - [SCR_ACTIVE_VFO] = { "", 400, 20, 18, yellow, yellow }, - [SCR_MODE] = { "MODE", 70, 80, 30, yellow, yellow }, - [SCR_PS] = { "PS", 120, 50, 12, yellow, grey }, - [SCR_RIT] = { "RIT", 220, 40, 16, red, grey }, - [SCR_XIT] = { "XIT", 220, 20, 16, red, grey }, - [SCR_NB] = { "NB", 115, 40, 16, yellow, grey }, - [SCR_NR] = { "NR", 70, 40, 16, yellow, grey }, - [SCR_ANF] = { "ANF", 70, 20, 16, yellow, grey }, - [SCR_SNB] = { "SNB", 115, 20, 16, yellow, grey }, - [SCR_MIDI] = { "MIDI", 480, 20, 16, yellow, grey }, - [SCR_AGC] = { "AGC", 160, 20, 16, yellow, grey }, - [SCR_VOX] = { "VOX", 160, 40, 16, red, grey }, - [SCR_LOCK] = { "LOCK", 5, 80, 16, red, grey }, - [SCR_CTUN] = { "CTUN", 5, 40, 16, yellow, grey }, - [SCR_SPLIT] = { "SPLIT", 5, 20, 16, red, grey, }, - [SCR_DUP] = {"DUP", 5, 60, 16, red, grey }, + [SCR_VFO_A] = { 285, 95, 70, { green, white }, { "", "" } }, + [SCR_VFO_B] = { 285, 18, 18, { cyan, grey}, { "", "" } }, + [SCR_ACTIVE_VFO] = { 400, 20, 18, { yellow, yellow }, { "", "" } }, + [SCR_MODE] = { 70, 80, 30, { yellow, yellow }, { "MODE", "MODE" } }, + [SCR_PS] = { 120, 50, 12, { grey, yellow }, { "PS", "PS" } }, + [SCR_RIT] = { 220, 40, 16, { grey, red }, { "RIT", "RIT" } }, + [SCR_XIT] = { 220, 20, 16, { grey, red }, { "XIT", "XIT" } }, + [SCR_NB] = { 115, 40, 16, { grey, yellow }, { "NB", "NB", "NB2" } }, + [SCR_NR] = { 70, 40, 16, { grey, yellow, yellow, yellow, yellow }, { "NR", "NR", "NR2", "NR3", "NR4" } }, + [SCR_ANF] = { 70, 20, 16, { grey, yellow }, { "ANF", "ANF" } }, + [SCR_SNB] = { 115, 20, 16, { grey, yellow }, { "SNB", "SNB" } }, + [SCR_MIDI] = { 480, 20, 16, { grey, yellow }, { "MIDI", "MIDI" } }, + [SCR_AGC] = { 160, 20, 16, { grey, yellow, yellow, yellow, yellow }, { "AGC", "AGC L", "AGC S", "AGC M", "AGC F" } }, + [SCR_VOX] = { 160, 40, 16, { grey, red }, { "VOX", "VOX" } }, + [SCR_LOCK] = { 5, 80, 16, { grey, red }, { "LOCK", "LOCK" } }, + [SCR_CTUN] = { 5, 40, 16, { grey, yellow }, { "CTUN", "CTUN" } }, + [SCR_SPLIT] = { 5, 20, 16, { grey, red }, { "SPLIT", "SPLIT" } }, + [SCR_DUP] = { 5, 60, 16, { grey, red }, { "DUP", "DUP" } }, }; diff --git a/screen.h b/screen.h index 39d2dcf..7d165a3 100644 --- a/screen.h +++ b/screen.h @@ -23,12 +23,11 @@ typedef struct colour { } colour_t; typedef struct widget_props { - char *label; size_t x; size_t y; size_t font_size; - colour_t on; - colour_t off; + colour_t colours[5]; + char *label[5]; } widget_props_t; enum on_screen_buttons { diff --git a/vfo.c b/vfo.c index 1c4f657..bf9aef8 100644 --- a/vfo.c +++ b/vfo.c @@ -1006,20 +1006,13 @@ char **draw_vfo_val_fixed(char *vfo_str, int step) { // depending on the status, draw an item on the screen. // The font size, coordinates, colours etc are picked up // from a table and drawn -void draw_item(cairo_t *cr, size_t item, bool status) { - char temp_text[32]; - +void draw_item(cairo_t *cr, size_t item, uint status) { widget_props_t *entry = &default_widget_prop_table[item]; cairo_move_to(cr, entry->x, entry->y); - if (status) { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - } else { - cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b); - } + cairo_set_source_rgb(cr, entry->colours[status].r, entry->colours[status].g, entry->colours[status].b); - sprintf(temp_text, entry->label); cairo_set_font_size(cr, entry->font_size); - cairo_show_text(cr, temp_text); + cairo_show_text(cr, entry->label[status]); } void vfo_update(void) { @@ -1066,10 +1059,11 @@ void vfo_update(void) { } widget_props_t *entry; + // draw mode entry = &default_widget_prop_table[SCR_MODE]; cairo_set_font_size(cr, entry->font_size); - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); + cairo_set_source_rgb(cr, entry->colours[0].r, entry->colours[0].g, entry->colours[0].b); cairo_move_to(cr, entry->x, entry->y); cairo_show_text(cr, temp_text); @@ -1182,7 +1176,7 @@ void vfo_update(void) { sprintf(temp_text, "%c", active_receiver->active_vfo == 0 ? 'A' : 'B'); entry = &default_widget_prop_table[SCR_ACTIVE_VFO]; cairo_move_to(cr, entry->x, entry->y); - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); + cairo_set_source_rgb(cr, entry->colours[1].r, entry->colours[1].g, entry->colours[1].b); cairo_set_font_size(cr, entry->font_size); cairo_show_text(cr, temp_text); @@ -1195,11 +1189,7 @@ void vfo_update(void) { // RIT entry = &default_widget_prop_table[SCR_RIT]; cairo_move_to(cr, entry->x, entry->y); - if (vfo[id].rit_enabled == 0) { - cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b); - } else { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - } + cairo_set_source_rgb(cr, entry->colours[vfo[id].rit_enabled].r, entry->colours[vfo[id].rit_enabled].g, entry->colours[vfo[id].rit_enabled].b); sprintf(temp_text, "RIT: %lld", vfo[id].rit); cairo_set_font_size(cr, entry->font_size); cairo_show_text(cr, temp_text); @@ -1207,11 +1197,10 @@ void vfo_update(void) { if (can_transmit) { entry = &default_widget_prop_table[SCR_XIT]; cairo_move_to(cr, entry->x, entry->y); - if (transmitter->xit_enabled == 0) { - cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b); - } else { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - } + cairo_set_source_rgb(cr, + entry->colours[transmitter->xit_enabled].r, + entry->colours[transmitter->xit_enabled].g, + entry->colours[transmitter->xit_enabled].b); sprintf(temp_text, "XIT: %lld", transmitter->xit); cairo_set_font_size(cr, entry->font_size); @@ -1221,40 +1210,11 @@ void vfo_update(void) { // NB and NB2 are mutually exclusive, therefore // they are put to the same place in order to save // some space - entry = &default_widget_prop_table[SCR_NB]; - cairo_move_to(cr, entry->x, entry->y); - cairo_set_font_size(cr, entry->font_size); - if (active_receiver->nb) { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "NB"); - } else if (active_receiver->nb2) { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "NB2"); - } else { - cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b); - cairo_show_text(cr, "NB"); - } + draw_item(cr, SCR_NB, active_receiver->nb); // NR // NR, NR2, NR3 and NR4 are mutually exclusive - entry = &default_widget_prop_table[SCR_NR]; - cairo_move_to(cr, entry->x, entry->y); - if (active_receiver->nr) { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "NR"); - } else if (active_receiver->nr2) { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "NR2"); - } else if (active_receiver->nr3) { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "NR3"); - } else if (active_receiver->nr4) { - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "NR4"); - } else { - cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b); - cairo_show_text(cr, "NR"); - } + draw_item(cr, SCR_NR, active_receiver->nr); // anf draw_item(cr, SCR_ANF, active_receiver->anf); @@ -1263,30 +1223,7 @@ void vfo_update(void) { draw_item(cr, SCR_SNB, active_receiver->snb); // agc - entry = &default_widget_prop_table[SCR_AGC]; - cairo_move_to(cr, entry->x, entry->y); - switch (active_receiver->agc) { - case AGC_OFF: - cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b); - cairo_show_text(cr, "AGC"); - break; - case AGC_LONG: - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "AGC L"); - break; - case AGC_SLOW: - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "AGC S"); - break; - case AGC_MEDIUM: - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "AGC M"); - break; - case AGC_FAST: - cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b); - cairo_show_text(cr, "AGC F"); - break; - } + draw_item(cr, SCR_AGC, active_receiver->agc); #ifdef MIDI draw_item(cr, SCR_MIDI, midi_enabled); -- 2.45.2