]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
vfo: more cleanup of display code
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 27 Nov 2023 14:32:46 +0000 (20:02 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 27 Nov 2023 14:32:46 +0000 (20:02 +0530)
One caveat is that NR2/NR3/NR4 handling is broken as of now as far as
displaying the status is concerned.

screen.c
screen.h
vfo.c

index c3006fc660cd3dac5eff77e9e944ea18ef7467d8..eb0e0ba811ad13309fda6d2b40e0af12158d18bb 100644 (file)
--- 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" } },
 };
index 39d2dcf078065df19c8c01f193c12eb318287b8a..7d165a3f329bfce6f636ced46659bd6f71f2db19 100644 (file)
--- 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 1c4f6577ce52e33c821b3d5ad287241400c117d9..bf9aef8f5c6f5a4ffb1eafb37b102c79fae2af57 100644 (file)
--- 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);