 
 
 #if TEXTMODE
+#if (HEIGHT >= 8)
+#define FONT NULL
+#define TEXT_OFFSET (HEIGHT - (HEIGHT/8) * 8) / 2
+#elif (HEIGHT >= 6)
 #include "Picopixel.h"
+#define FONT &Picopixel
+#define TEXT_OFFSET (HEIGHT - 6) + 4
+#endif
+
 void setAt(uint16_t x, uint16_t y, CRGB color);
 class BlumeGFX : public Adafruit_GFX {
   public:

#define PHYSICAL_HEIGHT (logical_num_leds / PHYSICAL_WIDTH + (logical_num_leds % PHYSICAL_WIDTH ? 1 : 0))
// If ROTATE is true, LEDs are in columns, not rows, so flip the 
// physical dimensions when generating the dimensions the rest of the code uses.
uint16_t WIDTH = ROTATE ? PHYSICAL_HEIGHT : PHYSICAL_WIDTH;
uint16_t HEIGHT = ROTATE ? PHYSICAL_WIDTH : PHYSICAL_HEIGHT;

int eepromStart;
long saveTarget;


BlumeGFX gfx = BlumeGFX(WIDTH, HEIGHT);

// Max length 64
char text[64] = "pqgjy Hello World! I'm Blume. :-)";
void runText(bool initialize) {
  // TODO: c1 = speed, or rainbow on?
  // TODO: c2 = rainbow size, or rainbow vertical?
  static int pos = WIDTH;
  static long nextShift;
  if (initialize) {
    gfx.setTextSize(HEIGHT / 8);
    gfx.setFont(FONT);
    gfx.setTextWrap(false);
    nextShift = 0;
  }
  if (!nextShift || millis() >= nextShift) {
    pos--;
    nextShift = millis() + 90;
  }
  gfx.setCursor(pos, TEXT_OFFSET);
  fill_solid(leds, NUM_LEDS, 0);
  gfx.realColor = CHSV(settings.hue, settings.saturation, 255);
  gfx.printed = false;
  gfx.print(text);
  if (!gfx.printed && pos < WIDTH / 2) {
    pos = WIDTH;
  }
}
