pico-hardware-test: tidy & speed up

Some minor tidyup and visual tweaks, plus less slow per-pixel HSV-to-RGB.
diff --git a/examples/picosystem-hardware-test/hardware-test.cpp b/examples/picosystem-hardware-test/hardware-test.cpp
index f8d3111..97beb86 100644
--- a/examples/picosystem-hardware-test/hardware-test.cpp
+++ b/examples/picosystem-hardware-test/hardware-test.cpp
@@ -67,36 +67,46 @@
   bool dpad_u = buttons & Button::DPAD_UP;
   bool dpad_d = buttons & Button::DPAD_DOWN;
 
-  for(int b = 0; b < screen.bounds.w; b++){
-    for(int v = 0; v < screen.bounds.h; v++){
-      screen.pen = hsv_to_rgba(float(b) / (float)(screen.bounds.w), 1.0f, float(v) / (float)(screen.bounds.h));
-      screen.pixel(Point(b, v));
-    }
+  float offset = time / 10000.0f;
+  for(int x = 0; x < screen.bounds.w; x++){
+      screen.pen = hsv_to_rgba(float(x) / (float)(screen.bounds.w) + offset, 1.0f, 1.0f);
+      screen.v_span(Point(x, 0), screen.bounds.h);
   }
 
+  screen.pen = Pen(255, 255, 255, 128);
+  Rect dpad(5, 5, 30, 30);
+  screen.circle(dpad.center() - Point(1, 1), dpad.w / 2);
+  dpad.deflate(1);
+
   screen.pen = dpad_r ? Pen(255, 0, 0) : Pen(128, 128, 128);
-  screen.text("R", minimal_font, Point(25, 15), false, center_center);
+  screen.text("R", outline_font, dpad, false, center_right);
 
   screen.pen = dpad_d ? Pen(255, 0, 0) : Pen(128, 128, 128);
-  screen.text("D", minimal_font, Point(15, 25), false, center_center);
+  screen.text("D", outline_font, dpad, false, bottom_center);
 
   screen.pen = dpad_u ? Pen(255, 0, 0) : Pen(128, 128, 128);
-  screen.text("U", minimal_font, Point(15, 5), false, center_center);
+  screen.text("U", outline_font, dpad, false, top_center);
 
   screen.pen = dpad_l ? Pen(255, 0, 0) : Pen(128, 128, 128);
-  screen.text("L", minimal_font, Point(5, 15), false, center_center);
+  screen.text("L", outline_font, dpad, false, center_left);
+
+  screen.pen = Pen(255, 255, 255, 128);
+  Rect face_buttons(5, 5, 30, 30);
+  face_buttons.x = screen.bounds.w - face_buttons.w - face_buttons.x; // Align right
+  screen.circle(face_buttons.center() - Point(1, 1), face_buttons.w / 2);
+  face_buttons.deflate(1);
 
   screen.pen = button_a ? Pen(255, 0, 0) : Pen(128, 128, 128);
-  screen.text("A", minimal_font, Point(screen.bounds.w - 5, 15), false, center_center);
+  screen.text("A", outline_font, face_buttons, false, center_right);
 
   screen.pen = button_b ? Pen(255, 0, 0) : Pen(128, 128, 128);
-  screen.text("B", minimal_font, Point(screen.bounds.w - 15, 25), false, center_center);
+  screen.text("B", outline_font, face_buttons, false, bottom_center);
 
   screen.pen = button_x ? Pen(255, 0, 0) : Pen(128, 128, 128);
-  screen.text("X", minimal_font, Point(screen.bounds.w - 15, 5), false, center_center);
+  screen.text("X", outline_font, face_buttons, false, top_center);
 
   screen.pen = button_y ? Pen(255, 0, 0) : Pen(128, 128, 128);
-  screen.text("Y", minimal_font, Point(screen.bounds.w - 25, 15), false, center_center);
+  screen.text("Y", outline_font, face_buttons, false, center_left);
 
   //LED = hsv_to_rgba(time / 50.0f, 1.0f, 1.0f);
   LED = LED_COLOUR[(time / 1000) % 3];