Make scrolling look way better

This commit is contained in:
2026-01-16 20:09:51 +01:00
parent 6e7a92cba3
commit f975d21195
3 changed files with 37 additions and 48 deletions

View File

@@ -14,7 +14,6 @@ private:
unsigned long holdTick;
bool isScrolling;
std::function<void(TFT_eSprite*, bool)> postDrawCallback;
int usedW;
int usedH;
static const unsigned long SCROLL_INTERVAL = 5;
@@ -22,8 +21,8 @@ private:
static const int SCROLL_GAP = 10;
public:
ScrollingTextDisplay(TFT_eSprite* spr, int y, int maxW, int inuseW = -1, int inuseH = -1 ) :
sprite(spr), yPos(y), maxWidth(maxW), xPos(0), textWidth(0), lastTick(0), holdTick(0), isScrolling(false), postDrawCallback(nullptr), usedW(inuseW), usedH(inuseH) {}
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) {}
void setPostDrawCallback(std::function<void(TFT_eSprite*, bool)> callback) {
postDrawCallback = callback;
@@ -74,11 +73,11 @@ public:
private:
void drawText(const String& text, bool status, uint16_t activeColor, uint16_t activeSmooth, uint16_t dropoutColor, uint16_t dropoutSmooth, uint16_t backgroundColor) {
if(usedW > 0 && usedH > 0) {
if(usedH > 0) {
sprite->fillSprite(TFT_TRANSPARENT);
sprite->fillRect(0, 0, usedW, usedH, backgroundColor);
sprite->fillRect(0, 0, maxWidth, usedH, backgroundColor);
sprite->setViewport(0, 0, usedW, usedH);
sprite->setViewport(0, 0, maxWidth, usedH);
if(status) sprite->setTextColor(activeColor, activeSmooth, false);
else sprite->setTextColor(dropoutColor, dropoutSmooth, false);
@@ -97,8 +96,6 @@ private:
if(isScrolling) sprite->drawString(text, xPos + textWidth + SCROLL_GAP, 0);
}
sprite->fillRect(0, sprite->fontHeight(), sprite->width(), sprite->height() - sprite->fontHeight(), TFT_TRANSPARENT);
if(postDrawCallback) postDrawCallback(sprite, false);
sprite->pushSprite(35, yPos, TFT_TRANSPARENT);
}