]> git.rkrishnan.org Git - pihpsdr.git/commitdiff
move vfo coordinates, colours etc into another file maint
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Wed, 22 Nov 2023 15:13:38 +0000 (20:43 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Wed, 22 Nov 2023 15:13:38 +0000 (20:43 +0530)
Ideally these should go into a CSS file, but that would be the next
step.

Makefile
screen.c [new file with mode: 0644]
screen.h
vfo.c

index a7a930704271c598a27b4f1057f0eca1fc2129b3..d0e5ef1e57d89aa0a73175aa1cbbe49edb00999d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -258,9 +258,8 @@ i2c.c \
 gpio.c \
 encoder_menu.c \
 switch_menu.c \
-toolbar_menu.c
-
-
+toolbar_menu.c \
+screen.c
 
 HEADERS= \
 agc.h \
@@ -340,7 +339,6 @@ switch_menu.h \
 toolbar_menu.h \
 screen.h
 
-
 OBJS= \
 band.o \
 discovered.o \
@@ -415,7 +413,8 @@ i2c.o \
 gpio.o \
 encoder_menu.o \
 switch_menu.o \
-toolbar_menu.o
+toolbar_menu.o \
+screen.o
 
 $(PROGRAM):  $(OBJS) $(AUDIO_OBJS) $(REMOTE_OBJS) $(USBOZY_OBJS) \
                $(LOCALCW_OBJS) $(PURESIGNAL_OBJS) \
diff --git a/screen.c b/screen.c
new file mode 100644 (file)
index 0000000..c3006fc
--- /dev/null
+++ b/screen.c
@@ -0,0 +1,32 @@
+#include "screen.h"
+
+const colour_t grey = { GREY_R, GREY_G, GREY_B };
+const colour_t red = { RED_R, RED_G, RED_B};
+const colour_t black = { BLACK_R, BLACK_G, BLACK_B };
+const colour_t white = { WHITE_R, WHITE_G, WHITE_B };
+const colour_t yellow = { YELLOW_R, YELLOW_G, YELLOW_B };
+const colour_t cyan = { CYAN_R, CYAN_G, CYAN_B };
+const colour_t green = { GREEN_R, GREEN_G, GREEN_B };
+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 },
+};
index c61c49c2ca646787956ad8b9505b4370e277d972..39d2dcf078065df19c8c01f193c12eb318287b8a 100644 (file)
--- a/screen.h
+++ b/screen.h
@@ -1,9 +1,12 @@
 #ifndef _SCREEN_H
 #define _SCREEN_H
 
+#include <stddef.h>
+
 #define MENU_HEIGHT (50)
 #define MENU_WIDTH (50)
-// so menu height x 2 == meter height (but we still have 20 pixels
+
+// menu height x 2 == meter height (but we still have 20 pixels
 // empty.
 #define METER_HEIGHT (100) // edit default = 60
 #define METER_WIDTH (240)
 #define TOOLBAR_HEIGHT (30)
 #define WATERFALL_HEIGHT (105)
 
+typedef struct colour {
+    float r;
+    float g;
+    float b;
+} colour_t;
+
+typedef struct widget_props {
+    char *label;
+    size_t x;
+    size_t y;
+    size_t font_size;
+    colour_t on;
+    colour_t off;
+} widget_props_t;
+
+enum on_screen_buttons {
+    SCR_VFO_A = 0,
+    SCR_VFO_B,
+    SCR_ACTIVE_VFO,
+    SCR_MODE,
+    SCR_PS,
+    SCR_RIT,
+    SCR_XIT,
+    SCR_NB,
+    SCR_NR,
+    SCR_ANF,
+    SCR_SNB,
+    SCR_MIDI,
+    SCR_AGC,
+    SCR_VOX,
+    SCR_LOCK,
+    SCR_CTUN,
+    SCR_SPLIT,
+    SCR_DUP,
+    NUM_ACTIVE_BUTTONS,
+};
+
 // define a type and coordinates for various widgets on the screen.
 #define  VFO_HEIGHT (100)
 #define  VFO_WIDTH  (display_width - METER_WIDTH - MENU_WIDTH)
 #define  GREY_G (0.7)
 #define  GREY_B (0.7)
 
-// font/typeface sizes
-
-#define  MODE_RENDER_FONT_SIZE      (30)
-#define  VFO_A_RENDER_FONT_SIZE     (70)
-#define  VFO_B_RENDER_FONT_SIZE     (18)
-#define  ACTIVE_VFO_INDICATION_SIZE (18)
-#define  PS_RENDER_FONT_SIZE        (12)
-#define  RIT_RENDER_FONT_SIZE       (16)
-#define  XIT_RENDER_FONT_SIZE       (16)
-#define  NB_RENDER_FONT_SIZE        (16)
-#define  NR_RENDER_FONT_SIZE        (16)
-#define  DUP_RENDER_FONT_SIZE       (16)
-#define  SPLIT_RENDER_FONT_SIZE     (16)
-// coordinates
-
-#define  MODE_X     70
-#define  MODE_Y     80
-
-#define  VFO_A_X    285
-#define  VFO_A_Y    95
-
-#define  VFO_B_X    285
-#define  VFO_B_Y    18
-
-#define  ACTIVE_VFO_INDICATION_X  400
-#define  ACTIVE_VFO_INDICATION_Y   20
-
-#define  PS_X       130
-#define  PS_Y       50
-
-#define  RIT_X      220
-#define  RIT_Y      40
-
-#define  XIT_X      220
-#define  XIT_Y      20
-
-#define  NB_X       115
-#define  NB_Y       40
-
-#define  NR_X       70
-#define  NR_Y       40
-
-#define  ANF_X      70
-#define  ANF_Y      20
-
-#define  SNB_X      115
-#define  SNB_Y      20
-
-#define  AGC_X      160
-#define  AGC_Y      20
-
-#define  MIDI_X     480
-#define  MIDI_Y     20
-
-#define  VOX_X      160
-#define  VOX_Y      40
-
-#define  LOCK_X      5
-#define  LOCK_Y      80
-
-#define  SPLIT_X     5
-#define  SPLIT_Y     20
-
-#define  CTUN_X      5
-#define  CTUN_Y      40
-
-#define  DUP_X       5
-#define  DUP_Y       60
+extern widget_props_t default_widget_prop_table[];
 
 #endif // _SCREEN_H
diff --git a/vfo.c b/vfo.c
index d020e3f2c01d900b27bed4acd08d942418ff9713..015ced6cb6af55b082aca27953d89285bc7a54bc 100644 (file)
--- a/vfo.c
+++ b/vfo.c
@@ -1046,10 +1046,12 @@ void vfo_update(void) {
             break;
         }
 
+       widget_props_t *entry;
         // draw mode
-        cairo_set_font_size(cr, MODE_RENDER_FONT_SIZE);
-        cairo_set_source_rgb(cr, YELLOW_R, YELLOW_G, YELLOW_B);
-        cairo_move_to(cr, MODE_X, MODE_Y);
+       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_move_to(cr, entry->x, entry->y);
         cairo_show_text(cr, temp_text);
 
         // In what follows, we want to display the VFO frequency
@@ -1082,6 +1084,7 @@ void vfo_update(void) {
         if (s >= STEPS)
             s = 0;
 
+       entry = &default_widget_prop_table[SCR_VFO_A];
         // draw VFO A
         cairo_select_font_face(cr, "Cantarell", CAIRO_FONT_SLANT_NORMAL,
                                CAIRO_FONT_WEIGHT_NORMAL);
@@ -1103,8 +1106,8 @@ void vfo_update(void) {
                 cairo_set_source_rgb(cr, DARK_GREEN_R, DARK_GREEN_G, DARK_GREEN_B);
             }
         }
-        cairo_move_to(cr, VFO_A_X, VFO_A_Y);
-        cairo_set_font_size(cr, VFO_A_RENDER_FONT_SIZE);
+        cairo_move_to(cr, entry->x, entry->y);
+        cairo_set_font_size(cr, entry->font_size);
         // cairo_show_text(cr, temp_text);
 
         // try to show VFO text according to step value
@@ -1150,202 +1153,207 @@ void vfo_update(void) {
             }
         }
 
-        cairo_move_to(cr, VFO_B_X, VFO_B_Y);
-        cairo_set_font_size(cr, VFO_B_RENDER_FONT_SIZE);
+       // show vfo-b
+       entry = &default_widget_prop_table[SCR_VFO_B];
+        cairo_move_to(cr, entry->x, entry->y);
+        cairo_set_font_size(cr, entry->font_size);
         cairo_show_text(cr, temp_text);
 
         // show the currently active VFO.
-        cairo_set_source_rgb(cr,
-                            YELLOW_R,
-                            YELLOW_G,
-                            YELLOW_B);
         sprintf(temp_text, "%c", active_receiver->active_vfo == 0 ? 'A' : 'B');
-        cairo_move_to(cr,
-                     ACTIVE_VFO_INDICATION_X,
-                     ACTIVE_VFO_INDICATION_Y);
-        cairo_set_font_size(cr, ACTIVE_VFO_INDICATION_SIZE);
+       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_font_size(cr, entry->font_size);
         cairo_show_text(cr, temp_text);
 
 #ifdef PURESIGNAL
         if (can_transmit) {
-            cairo_move_to(cr, PS_X, PS_Y);
+           entry = &default_widget_prop_table[SCR_PS];
+           cairo_move_to(cr, entry->x, entry->y);
             if (transmitter->puresignal) {
-                cairo_set_source_rgb(cr,
-                                    YELLOW_R,
-                                    YELLOW_G,
-                                    YELLOW_B);
+               cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
             } else {
-                cairo_set_source_rgb(cr,
-                                    GREY_R,
-                                    GREY_G,
-                                    GREY_B);
+               cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
             }
-            cairo_set_font_size(cr, PS_RENDER_FONT_SIZE);
-            cairo_show_text(cr, "PS");
+            cairo_set_font_size(cr, entry->font_size);
+            cairo_show_text(cr, entry->label);
         }
 #endif
 
+       // 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, GREY_R, GREY_G, GREY_B);
+           cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
         } else {
-            cairo_set_source_rgb(cr, RED_R, RED_G, RED_B);
+           cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
         }
         sprintf(temp_text, "RIT: %lld", vfo[id].rit);
-        cairo_move_to(cr, RIT_X, RIT_Y);
-        cairo_set_font_size(cr, RIT_RENDER_FONT_SIZE);
+        cairo_set_font_size(cr, entry->font_size);
         cairo_show_text(cr, temp_text);
 
         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, GREY_R, GREY_G, GREY_B);
+               cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
             } else {
-                cairo_set_source_rgb(cr, RED_R, RED_G, RED_B);
+               cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
             }
             sprintf(temp_text, "XIT: %lld", transmitter->xit);
-            cairo_move_to(cr, XIT_X, XIT_Y);
-            cairo_set_font_size(cr, XIT_RENDER_FONT_SIZE);
+
+            cairo_set_font_size(cr, entry->font_size);
             cairo_show_text(cr, temp_text);
         }
 
         // NB and NB2 are mutually exclusive, therefore
         // they are put to the same place in order to save
         // some space
-        cairo_move_to(cr, NB_X, NB_Y);
-        cairo_set_font_size(cr, NB_RENDER_FONT_SIZE);
+       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, YELLOW_R, YELLOW_G, YELLOW_B);
-            cairo_show_text(cr, "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, YELLOW_R, YELLOW_G, YELLOW_B);
-            cairo_show_text(cr, "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, GREY_R, GREY_G, GREY_B);
+           cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
             cairo_show_text(cr, "NB");
         }
 
+       // NR
         // NR, NR2, NR3 and NR4 are mutually exclusive
-        cairo_move_to(cr, NR_X, NR_Y);
+       entry = &default_widget_prop_table[SCR_NR];
+        cairo_move_to(cr, entry->x, entry->y);
         if (active_receiver->nr) {
-            cairo_set_source_rgb(cr, YELLOW_R, YELLOW_G, YELLOW_B);
+           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, YELLOW_R, YELLOW_G, YELLOW_B);
+           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, YELLOW_R, YELLOW_G, YELLOW_B);
+           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, YELLOW_R, YELLOW_G, YELLOW_B);
-            cairo_show_text(cr, "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, GREY_R, GREY_G, GREY_B);
+           cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
             cairo_show_text(cr, "NR");
         }
 
-        cairo_move_to(cr, ANF_X, ANF_Y);
+       // anf
+       entry = &default_widget_prop_table[SCR_ANF];
+       cairo_move_to(cr, entry->x, entry->y);
         if (active_receiver->anf) {
-            cairo_set_source_rgb(cr, YELLOW_R, YELLOW_G, YELLOW_B);
+           cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
         } else {
-            cairo_set_source_rgb(cr, GREY_R, GREY_G, GREY_B);
+           cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
         }
-        cairo_show_text(cr, "ANF");
+        cairo_show_text(cr, entry->label);
 
-        cairo_move_to(cr, SNB_X, SNB_Y);
+       // snb
+       entry = &default_widget_prop_table[SCR_SNB];
+       cairo_move_to(cr, entry->x, entry->y);
         if (active_receiver->snb) {
-            cairo_set_source_rgb(cr, YELLOW_R, YELLOW_G, YELLOW_B);
+           cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
         } else {
-            cairo_set_source_rgb(cr, GREY_R, GREY_G, GREY_B);
+           cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
         }
-        cairo_show_text(cr, "SNB");
+        cairo_show_text(cr, entry->label);
 
-        cairo_move_to(cr, AGC_X, AGC_Y);
+       // 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, GREY_R, GREY_G, GREY_B);
+           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, YELLOW_R, YELLOW_G, YELLOW_B);
+           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, YELLOW_R, YELLOW_G, YELLOW_B);
-            cairo_show_text(cr, "AGC S");
+           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, YELLOW_R, YELLOW_G, YELLOW_B);
+           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, YELLOW_R, YELLOW_G, YELLOW_B);
+           cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
             cairo_show_text(cr, "AGC F");
             break;
         }
 
 #ifdef MIDI
-        cairo_move_to(cr, MIDI_X, MIDI_Y);
+       entry = &default_widget_prop_table[SCR_MIDI];
+       cairo_move_to(cr, entry->x, entry->y);
         if (midi_enabled) {
-            cairo_set_source_rgb(cr, YELLOW_R, YELLOW_G, YELLOW_B);
+           cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
         } else {
-            cairo_set_source_rgb(cr, GREY_R, GREY_G, GREY_B);
+           cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
         }
-        cairo_show_text(cr, "MIDI");
+        cairo_show_text(cr, entry->label);
 #endif
 
         if (can_transmit) {
-            cairo_move_to(cr, VOX_X, VOX_Y);
+           entry = &default_widget_prop_table[SCR_VOX];
+           cairo_move_to(cr, entry->x, entry->y);
             if (vox_enabled) {
-                cairo_set_source_rgb(cr, RED_R, RED_G, RED_B);
+               cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
             } else {
-                cairo_set_source_rgb(cr, GREY_R, GREY_G, GREY_B);
+               cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
             }
-            cairo_show_text(cr, "VOX");
+            cairo_show_text(cr, entry->label);
         }
 
-        cairo_move_to(cr, LOCK_X, LOCK_Y);
+       // lock
+       entry = &default_widget_prop_table[SCR_LOCK];
+       cairo_move_to(cr, entry->x, entry->y);
         if (locked) {
-            cairo_set_source_rgb(cr, RED_R, RED_G, RED_B);
+           cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
         } else {
-            cairo_set_source_rgb(cr, GREY_R, GREY_G, GREY_B);
+           cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
         }
-        cairo_show_text(cr, "LOCK");
+        cairo_show_text(cr, entry->label);
 
-        cairo_move_to(cr, SPLIT_X, SPLIT_Y);
+       // split
+       entry = &default_widget_prop_table[SCR_SPLIT];
+        cairo_move_to(cr, entry->x, entry->y);
         if (split) {
-            cairo_set_source_rgb(cr, RED_R, RED_G, RED_B);
+            cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
         } else {
-            cairo_set_source_rgb(cr, GREY_R, GREY_G, GREY_B);
+            cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
         }
-        cairo_set_font_size(cr, SPLIT_RENDER_FONT_SIZE);
-        cairo_show_text(cr, "SPLIT");
+        cairo_set_font_size(cr, entry->font_size);
+        cairo_show_text(cr, entry->label);
 
-        cairo_move_to(cr, CTUN_X, CTUN_Y);
+       // Ctun
+       entry = &default_widget_prop_table[SCR_CTUN];
+        cairo_move_to(cr, entry->x, entry->y);
         if (vfo[id].ctun) {
-            cairo_set_source_rgb(cr, YELLOW_R, YELLOW_G, YELLOW_B);
+            cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
         } else {
-            cairo_set_source_rgb(cr, GREY_R, GREY_G, GREY_B);
+            cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
         }
-        cairo_show_text(cr, "CTUN");
-        /* if(sat_mode!=SAT_NONE) { */
-        /*   cairo_set_source_rgb(cr, 1.0, 0.0, 0.0); */
-        /* } else { */
-        /*   cairo_set_source_rgb(cr, 0.7, 0.7, 0.7); */
-        /* } */
-        /* cairo_set_font_size(cr, 16); */
-        /* if(sat_mode==SAT_NONE || sat_mode==SAT_MODE) { */
-        /*   cairo_show_text(cr, "SAT"); */
-        /* } else { */
-        /*   cairo_show_text(cr, "RSAT"); */
-        /* } */
+        cairo_show_text(cr, entry->label);
 
+       // dup
+       entry = &default_widget_prop_table[SCR_DUP];
+        cairo_move_to(cr, entry->x, entry->y);
         if (duplex) {
-            cairo_set_source_rgb(cr, RED_R, RED_G, RED_B);
+            cairo_set_source_rgb(cr, entry->on.r, entry->on.g, entry->on.b);
         } else {
-            cairo_set_source_rgb(cr, GREY_R, GREY_G, GREY_B);
+            cairo_set_source_rgb(cr, entry->off.r, entry->off.g, entry->off.b);
         }
-        sprintf(temp_text, "DUP");
-        cairo_move_to(cr, DUP_X, DUP_Y);
-        cairo_set_font_size(cr, DUP_RENDER_FONT_SIZE);
+        sprintf(temp_text, entry->label);
+        cairo_set_font_size(cr, entry->font_size);
         cairo_show_text(cr, temp_text);
 
         cairo_destroy(cr);
@@ -1359,13 +1367,14 @@ static gboolean vfo_press_event_cb(GtkWidget *widget, GdkEventButton *event,
                                    gpointer data) {
     // vfo a and b are drawn at x = 280, so it is the y coordinate
     // that matters.
-    if (event->x >= VFO_B_X && event->y <= VFO_B_Y) {
+    if (event->x >= default_widget_prop_table[SCR_VFO_B].x &&
+       event->y <= default_widget_prop_table[SCR_VFO_B].y) {
         // vfo B
         start_vfo(VFO_B);
         return TRUE;
-    } else if (event->x >= VFO_A_X &&
-              event->y > VFO_B_Y &&
-              event->y <= VFO_A_Y) {
+    } else if (event->x >= default_widget_prop_table[SCR_VFO_A].x &&
+              event->y > default_widget_prop_table[SCR_VFO_B].y &&
+              event->y <= default_widget_prop_table[SCR_VFO_A].y) {
         // vfo A
         start_vfo(VFO_A);
         return TRUE;
@@ -1374,6 +1383,9 @@ static gboolean vfo_press_event_cb(GtkWidget *widget, GdkEventButton *event,
     return FALSE;
 }
 
+void draw_element(size_t index, char *buf) {
+}
+
 GtkWidget *vfo_init(int width, int height, GtkWidget *parent) {
 
     fprintf(stderr, "vfo_init: width=%d height=%d\n", width, height);