};
#define BIG_FONT FrutigerLT_Roman_64_font
-#define SMALL_FONT FrutigerLT_Roman_12_font
+#define VOLT_FONT FrutigerLT_Roman_64_font
+#define SMALL_FONT NotoMono_12_font
+#define LOGO_FONT BenguiatGothicStd_Bold_26_font
-#define VALUE_Y BIG_FONT.ascent
-#define LABEL_Y BIG_FONT.ascent + SMALL_FONT.ascent + 2
+#define LABEL_Y (int16_t) (SMALL_FONT.ascent)
+#define VALUE_Y (int16_t) (LABEL_Y + BIG_FONT.ascent)
#define BOX_X 2
#define PAD_X 90
#define BOX_LABEL_X 30
+#define VOLT_LABEL_X 35
+#define RSSI_LABEL_X 15
#define PAD_LABEL_X 95
#define SEP_X (PAD_X - 8)
static int box_number = 1;
static int pad_number = 1;
-static bool do_polys = false;
+static int do_polys = 0;
static const struct ao_coord trek[] = {
{ .x = 90, .y = 0 },
#define NCOORD_DONUT (sizeof(donut)/sizeof(donut[0]))
-void HandleExpose(Display *dpy, Window win, GC gc)
-{
- ao_rect(&fb, 0, 0, WIDTH, HEIGHT, 0xffffffff, AO_COPY);
+static const struct ao_coord bowtie[] = {
+ { .x = 0, .y = 0 },
+ { .x = 32, .y = 32 },
+ { .x = 0, .y = 32 },
+ { .x = 32, .y = 0 },
+};
- if (do_polys) {
- ao_poly(&fb, trek, NCOORD_TREK, 0x00000000, AO_COPY);
- ao_poly(&fb, donut, NCOORD_DONUT, 0x00000000, AO_COPY);
- } else {
- char str[64];
+#define NCOORD_BOWTIE (sizeof(bowtie)/sizeof(bowtie[0]))
- sprintf(str, "%02d", box_number);
- ao_text(&fb, &BIG_FONT, BOX_X, VALUE_Y, str, 0x00000000, AO_COPY);
- ao_text(&fb, &SMALL_FONT, BOX_LABEL_X, LABEL_Y, "box", 0x00000000, AO_COPY);
+static const struct ao_transform logo_transform = {
+ .x_scale = 48, .x_off = 0,
+ .y_scale = 48, .y_off = 10,
+};
+
+static const struct ao_transform bowtie_transform = {
+ .x_scale = 1, .x_off = 50,
+ .y_scale = 1, .y_off = 20,
+};
- sprintf(str, "%d", pad_number);
- ao_text(&fb, &BIG_FONT, PAD_X, VALUE_Y, str, 0x00000000, AO_COPY);
- ao_text(&fb, &SMALL_FONT, PAD_LABEL_X, LABEL_Y, "pad", 0x00000000, AO_COPY);
+static const float pad_volts = 12.3f;
+static const float lco_volts = 4.1f;
+static const int rssi = -30;
- ao_line(&fb, SEP_X, 0, SEP_X, HEIGHT, 0x00000000, AO_COPY);
+void HandleExpose(Display *dpy, Window win, GC gc)
+{
+ char str[64];
+
+ ao_rect(&fb, 0, 0, WIDTH, HEIGHT, 0xffffffff, AO_COPY);
+
+ switch (do_polys) {
+ case 1:
+ ao_logo(&fb, &logo_transform, &LOGO_FONT, 0x00000000, AO_COPY);
+ break;
+ case 2:
+ ao_poly(&fb, trek, NCOORD_TREK, NULL, 0x00000000, AO_COPY);
+ ao_poly(&fb, donut, NCOORD_DONUT, NULL, 0x00000000, AO_COPY);
+ break;
+ case 3:
+ ao_poly(&fb, bowtie, NCOORD_BOWTIE, &bowtie_transform, 0x00000000, AO_COPY);
+ break;
+ default:
+ case 0:
+ switch (box_number) {
+ case 0:
+ sprintf(str, "%4.1f", lco_volts);
+ ao_text(&fb, &VOLT_FONT, BOX_X, VALUE_Y, str, 0x00000000, AO_COPY);
+ ao_text(&fb, &SMALL_FONT, VOLT_LABEL_X, LABEL_Y, "LCO Battery", 0x00000000, AO_COPY);
+ break;
+ default:
+ switch (pad_number) {
+ case -1:
+ sprintf(str, "%4.1f", pad_volts);
+ ao_text(&fb, &VOLT_FONT, BOX_X, VALUE_Y, str, 0x00000000, AO_COPY);
+ ao_text(&fb, &SMALL_FONT, VOLT_LABEL_X, LABEL_Y, "Pad Battery", 0x00000000, AO_COPY);
+ break;
+ case 0:
+ sprintf(str, "%4d", rssi);
+ ao_text(&fb, &VOLT_FONT, BOX_X, VALUE_Y, str, 0x00000000, AO_COPY);
+ ao_text(&fb, &SMALL_FONT, RSSI_LABEL_X, LABEL_Y, "Signal Strength", 0x00000000, AO_COPY);
+ break;
+ default:
+ sprintf(str, "%02d", box_number);
+ ao_text(&fb, &BIG_FONT, BOX_X, VALUE_Y, str, 0x00000000, AO_COPY);
+ ao_text(&fb, &SMALL_FONT, BOX_LABEL_X, LABEL_Y, "Box", 0x00000000, AO_COPY);
+
+ sprintf(str, "%d", pad_number);
+ ao_text(&fb, &BIG_FONT, PAD_X, VALUE_Y, str, 0x00000000, AO_COPY);
+ ao_text(&fb, &SMALL_FONT, PAD_LABEL_X, LABEL_Y, "Pad", 0x00000000, AO_COPY);
+
+ ao_line(&fb, SEP_X, 0, SEP_X, HEIGHT, 0x00000000, AO_COPY);
+ }
+ break;
+ }
+ break;
}
XImage *image = XCreateImage(dpy, visual, 1, XYBitmap, 0, (char *) bits, WIDTH, HEIGHT, 32, STRIDE*4);
{
char string[10];
if (XLookupString ((XKeyEvent *) ev, string, sizeof (string), 0, 0) >= 1) {
- printf("key %s\n", string);
switch (string[0]) {
case 'q':
exit (0);
case 'p':
- pad_number++;
- if (pad_number > 8)
- pad_number = 1;
+ if (box_number != 0) {
+ pad_number++;
+ if (pad_number > 8)
+ pad_number = -1;
+ }
break;
case 'P':
- pad_number--;
- if (pad_number < 1)
- pad_number = 8;
+ if (box_number != 0) {
+ pad_number--;
+ if (pad_number < -1)
+ pad_number = 8;
+ }
break;
case 'b':
box_number++;
if (box_number > 99)
- box_number = 1;
+ box_number = 0;
break;
case 'B':
box_number--;
- if (box_number < 1)
+ if (box_number < 0)
box_number = 99;
break;
case 's':
- do_polys = !do_polys;
+ do_polys++;
+ if (do_polys == 4)
+ do_polys = 0;
break;
case 'c':
break;
void
HandleKeyRelease(Display *dpy, Window win, GC gc, XEvent *ev)
{
+ (void) dpy;
+ (void) win;
+ (void) gc;
+ (void) ev;
}