better scroll hold, and make everything use the class

This commit is contained in:
2026-01-16 20:46:01 +01:00
parent f975d21195
commit 25c6044d3f
7 changed files with 28 additions and 77 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}
};