tds3p-rsvp-reader/include/Board.h

60 lines
1.7 KiB
C++

#pragma once
#include <Arduino.h>
class TFT_eSPI;
class Board {
public:
bool begin();
bool beginSd();
void setReadingContext(const String& bookTitle, const String& chapterTitle,
uint8_t progressPercent);
void drawWord(const String& word, uint16_t wpm, uint8_t styleFlags = 0);
void drawChapterTitle(const String& chapter, uint16_t wpm);
void drawTheEnd(uint16_t wpm);
void drawMenu(uint8_t selectedOption);
void drawPicker(const String& title, const String& value);
void drawFontStylePicker(uint8_t style, uint8_t size);
void drawFontSizePicker(uint8_t style, uint8_t size);
void setBrightness(uint8_t level);
void setPreferredBrightness(uint8_t level);
void setFont(uint8_t style, uint8_t size);
void displayOff();
void displayOn();
private:
struct DrawBounds {
int16_t x = 0;
int16_t y = 0;
int16_t width = 0;
int16_t height = 0;
bool valid = false;
};
int batteryPercent() const;
void setLandscape();
void setReaderFont(uint8_t style, uint8_t size, uint8_t styleFlags = 0);
void drawStatus(uint16_t wpm);
void drawFooter();
String ellipsize(const String& text, int16_t maximumWidth) const;
TFT_eSPI* display_ = nullptr;
uint8_t brightness_ = 0;
uint8_t preferredBrightness_ = 5;
uint8_t fontStyle_ = 0;
uint8_t fontSize_ = 20;
bool landscape_ = false;
bool powerMonitorAvailable_ = false;
bool statusDrawn_ = false;
bool footerDrawn_ = false;
uint16_t displayedWpm_ = 0;
uint8_t displayedProgressPercent_ = 255;
uint32_t lastStatusUpdateMs_ = 0;
String bookTitle_;
String chapterTitle_;
String displayedChapterTitle_;
uint8_t progressPercent_ = 0;
DrawBounds previousWordBounds_;
};