You've already forked TEF6686_ESP32
better scroll hold, and make everything use the class
This commit is contained in:
@@ -619,6 +619,7 @@ class TEF6686 {
|
||||
bool togglebit;
|
||||
bool runningbit;
|
||||
uint8_t segments_received[16];
|
||||
uint8_t segments_received_lps[8];
|
||||
bool initab;
|
||||
bool afinit;
|
||||
bool errorfreepi;
|
||||
|
||||
@@ -218,8 +218,6 @@ extern int Squelchold;
|
||||
extern int SStatusold;
|
||||
extern int Stereostatus;
|
||||
extern int XDRBWset;
|
||||
extern int xPos;
|
||||
extern int xPos2;
|
||||
extern int16_t OStatus;
|
||||
extern int16_t SAvg;
|
||||
extern int16_t SAvg2;
|
||||
@@ -326,8 +324,6 @@ extern unsigned long ModulationpeakPreviousMillis;
|
||||
extern unsigned long NTPtimer;
|
||||
extern unsigned long peakholdmillis;
|
||||
extern unsigned long processed_rdsblocksold[33];
|
||||
extern unsigned long pslongticker;
|
||||
extern unsigned long pslongtickerhold;
|
||||
extern unsigned long rtticker;
|
||||
extern unsigned long rttickerhold;
|
||||
extern unsigned long rotarytimer;
|
||||
@@ -358,6 +354,8 @@ extern WiFiClient RemoteClient;
|
||||
extern WiFiUDP Udp;
|
||||
extern WebServer webserver;
|
||||
|
||||
extern ScrollingTextDisplay aidDisplay;
|
||||
extern ScrollingTextDisplay lpsDisplay;
|
||||
extern ScrollingTextDisplay rtplusDisplay;
|
||||
extern ScrollingTextDisplay eonDisplay;
|
||||
extern ScrollingTextDisplay eccDisplay;
|
||||
|
||||
@@ -15,14 +15,16 @@ private:
|
||||
bool isScrolling;
|
||||
std::function<void(TFT_eSprite*, bool)> postDrawCallback;
|
||||
int usedH;
|
||||
bool hold;
|
||||
int xOffset;
|
||||
|
||||
static const unsigned long SCROLL_INTERVAL = 5;
|
||||
static const unsigned long HOLD_DURATION = 2000;
|
||||
static const int SCROLL_GAP = 10;
|
||||
|
||||
public:
|
||||
ScrollingTextDisplay(TFT_eSprite* spr, int y, int maxW, int inuseH = -1 ) :
|
||||
sprite(spr), yPos(y), maxWidth(maxW), xPos(0), textWidth(0), lastTick(0), holdTick(0), isScrolling(false), postDrawCallback(nullptr), usedH(inuseH) {}
|
||||
ScrollingTextDisplay(TFT_eSprite* spr, int y, int maxW, int x = 35, int inuseH = -1 ) :
|
||||
sprite(spr), yPos(y), maxWidth(maxW), xPos(0), textWidth(0), lastTick(0), holdTick(0), isScrolling(false), postDrawCallback(nullptr), usedH(inuseH), hold(false), xOffset(x) {}
|
||||
|
||||
void setPostDrawCallback(std::function<void(TFT_eSprite*, bool)> callback) {
|
||||
postDrawCallback = callback;
|
||||
@@ -39,12 +41,13 @@ public:
|
||||
if(!isScrolling) holdTick = millis();
|
||||
isScrolling = true;
|
||||
if(millis() - lastTick >= SCROLL_INTERVAL) {
|
||||
if(xPos <= -(textWidth + SCROLL_GAP)) xPos = 0;
|
||||
if(xPos <= -(textWidth + SCROLL_GAP)) {xPos += textWidth + SCROLL_GAP; hold = true;}
|
||||
|
||||
if(xPos == 0) {
|
||||
if(hold) {
|
||||
if(millis() - holdTick >= HOLD_DURATION) {
|
||||
xPos--;
|
||||
holdTick = millis();
|
||||
hold = false;
|
||||
}
|
||||
} else {
|
||||
xPos--;
|
||||
@@ -97,6 +100,6 @@ private:
|
||||
}
|
||||
|
||||
if(postDrawCallback) postDrawCallback(sprite, false);
|
||||
sprite->pushSprite(35, yPos, TFT_TRANSPARENT);
|
||||
if(yPos != 0) sprite->pushSprite(xOffset, yPos, TFT_TRANSPARENT);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user