kopia lustrzana https://github.com/dl9rdz/rdz_ttgo_sonde
box sizes for proportinal fonts; right-justified text; extra text for hs/vs
rodzic
450269510a
commit
111aceebdb
|
@ -355,21 +355,32 @@ void ILI9225Display::getDispSize(uint8_t *height, uint8_t *width, uint8_t *lines
|
|||
|
||||
void ILI9225Display::drawString(uint8_t x, uint8_t y, const char *s, int16_t width, uint16_t fg, uint16_t bg) {
|
||||
int16_t w,h;
|
||||
boolean alignright=false;
|
||||
Serial.printf("drawString: width=%d\n", width);
|
||||
if(findex<3) { // standard font
|
||||
//////////////tft->drawText(x...);
|
||||
Serial.printf("Simple Text %s at %d,%d\n", s, x, y);
|
||||
Serial.printf("Simple Text %s at %d,%d [%d]\n", s, x, y, width);
|
||||
tft->drawText(x, y, s, fg);
|
||||
return;
|
||||
}
|
||||
// GFX font
|
||||
if(width==-1) {
|
||||
tft->getGFXTextExtent(s, x, y + gfxoffsets[findex-3].yofs, &w, &h);
|
||||
width = w;
|
||||
if(width<0) {
|
||||
width = -width;
|
||||
alignright = true;
|
||||
}
|
||||
if(width==WIDTH_AUTO || alignright) {
|
||||
tft->getGFXTextExtent(s, x, y + gfxoffsets[findex-3].yofs, &w, &h);
|
||||
if(width==WIDTH_AUTO) width=w;
|
||||
}
|
||||
|
||||
if(findex-3>=ngfx) findex=3;
|
||||
tft->fillRectangle(x, y, x + width, y + gfxoffsets[findex-3].yclear, bg);
|
||||
Serial.printf("GFX Text %s at %d,%d+%d in color %x, width=%d\n", s, x, y, gfxoffsets[findex-3].yofs, fg, width);
|
||||
tft->drawGFXText(x, y + gfxoffsets[findex-3].yofs, s, fg);
|
||||
if(alignright) {
|
||||
tft->drawGFXText(x + width - w, y + gfxoffsets[findex-3].yofs, s, fg);
|
||||
} else {
|
||||
tft->drawGFXText(x, y + gfxoffsets[findex-3].yofs, s, fg);
|
||||
}
|
||||
}
|
||||
|
||||
void ILI9225Display::drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) {
|
||||
|
@ -393,7 +404,7 @@ void ILI9225Display::drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_p
|
|||
void ILI9225Display::welcome() {
|
||||
tft->clear();
|
||||
setFont(6);
|
||||
drawString(0, 0*22, version_name, -1, 0xff77);
|
||||
drawString(0, 0*22, version_name, WIDTH_AUTO, 0xff77);
|
||||
setFont(5);
|
||||
drawString(0, 1*22, "RS41,RS92,DFM6/9");
|
||||
drawString(0, 3*22, version_id);
|
||||
|
@ -540,9 +551,11 @@ void Display::parseDispElement(char *text, DispEntry *de)
|
|||
case 'a':
|
||||
de->func = disp.drawAlt; break;
|
||||
case 'h':
|
||||
de->func = disp.drawHS; break;
|
||||
de->func = disp.drawHS;
|
||||
de->extra = text[1]?strdup(text+1):NULL; break;
|
||||
case 'v':
|
||||
de->func = disp.drawVS; break;
|
||||
de->func = disp.drawVS;
|
||||
de->extra = text[1]?strdup(text+1):NULL; break;
|
||||
case 'i':
|
||||
de->func = disp.drawID;
|
||||
de->extra = strdup(text+1);
|
||||
|
@ -618,6 +631,7 @@ void Display::initFromFile() {
|
|||
int entrysize;
|
||||
Serial.printf("Reading from /screens.txt. available=%d\n",d.available());
|
||||
while(d.available()) {
|
||||
const char *ptr;
|
||||
String line = d.readStringUntil('\n');
|
||||
line.trim();
|
||||
const char *s = line.c_str();
|
||||
|
@ -683,15 +697,17 @@ void Display::initFromFile() {
|
|||
if(res==2) {
|
||||
colbg = (bg>>19) << 11 | ((bg>>10)&0x3F) << 5 | ((bg>>3)&0x1F);
|
||||
}
|
||||
} else if(strchr(s, '=')) { // one line with some data...
|
||||
int x,y;
|
||||
} else if( (ptr=strchr(s, '=')) ) { // one line with some data...
|
||||
int x,y,w,n;
|
||||
char text[30];
|
||||
sscanf(s, "%d,%d=%30[^\r\n]", &y, &x, text);
|
||||
if(sonde.config.disptype==1) { x*=xscale; y*=yscale; }
|
||||
n=sscanf(s, "%d,%d,%d", &y, &x, &w);
|
||||
sscanf(ptr+1, "%30[^\r\n]", text);
|
||||
if(sonde.config.disptype==1) { x*=xscale; y*=yscale; w*=xscale; }
|
||||
layouts[idx].de[what].x = x;
|
||||
layouts[idx].de[what].y = y;
|
||||
layouts[idx].de[what].width = n>2 ? w : WIDTH_AUTO;
|
||||
parseDispElement(text, layouts[idx].de+what);
|
||||
Serial.printf("entry at %d,%d font %d, color=%x,%x\n", x, y, layouts[idx].de[what].fmt,
|
||||
Serial.printf("entry at %d,%d width=%d font %d, color=%x,%x\n", x, y, layouts[idx].de[what].width, layouts[idx].de[what].fmt,
|
||||
layouts[idx].de[what].fg, layouts[idx].de[what].bg);
|
||||
what++;
|
||||
layouts[idx].de[what].func = NULL;
|
||||
|
@ -713,7 +729,7 @@ void Display::setLayout(int layoutIdx) {
|
|||
}
|
||||
|
||||
void Display::drawString(DispEntry *de, const char *str) {
|
||||
rdis->drawString(de->x, de->y, str, -1 /*de->width*/, de->fg, de->bg);
|
||||
rdis->drawString(de->x, de->y, str, de->width, de->fg, de->bg);
|
||||
}
|
||||
|
||||
void Display::drawLat(DispEntry *de) {
|
||||
|
@ -750,8 +766,9 @@ void Display::drawHS(DispEntry *de) {
|
|||
return;
|
||||
}
|
||||
snprintf(buf, 16, sonde.si()->hs>99?" %3.0f":" %2.1f", sonde.si()->hs);
|
||||
drawString(de,buf+strlen(buf)-4);
|
||||
rdis->drawTile(de->x+4,de->y,2,kmh_tiles);
|
||||
if(de->extra) { strcat(buf, de->extra); }
|
||||
drawString(de,buf+strlen(buf)-4- (de->extra?strlen(de->extra):0) );
|
||||
if(!de->extra) rdis->drawTile(de->x+4,de->y,2,kmh_tiles);
|
||||
}
|
||||
void Display::drawVS(DispEntry *de) {
|
||||
rdis->setFont(de->fmt);
|
||||
|
@ -760,8 +777,10 @@ void Display::drawVS(DispEntry *de) {
|
|||
return;
|
||||
}
|
||||
snprintf(buf, 16, " %+2.1f", sonde.si()->vs);
|
||||
drawString(de, buf+strlen(buf)-5);
|
||||
rdis->drawTile(de->x+5,de->y,2,ms_tiles);
|
||||
Serial.printf("drawVS: extra is %s width=%d\n", de->extra?de->extra:"<null>", de->width);
|
||||
if(de->extra) { strcat(buf, de->extra); }
|
||||
drawString(de, buf+strlen(buf)-5- (de->extra?strlen(de->extra):0) );
|
||||
if(!de->extra) rdis->drawTile(de->x+5,de->y,2,ms_tiles);
|
||||
}
|
||||
void Display::drawID(DispEntry *de) {
|
||||
rdis->setFont(de->fmt);
|
||||
|
@ -828,7 +847,7 @@ void Display::drawAFC(DispEntry *de) {
|
|||
drawString(de, buf+strlen(buf)-8);
|
||||
}
|
||||
void Display::drawIP(DispEntry *de) {
|
||||
rdis->drawIP(de->x, de->y, -1 /*de->width*/, de->fg, de->bg);
|
||||
rdis->drawIP(de->x, de->y, de->width, de->fg, de->bg);
|
||||
}
|
||||
void Display::drawSite(DispEntry *de) {
|
||||
rdis->setFont(de->fmt);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#include <TFT22_ILI9225.h>
|
||||
#include <U8x8lib.h>
|
||||
|
||||
|
||||
#define WIDTH_AUTO 9999
|
||||
struct DispEntry {
|
||||
int8_t y;
|
||||
int8_t x;
|
||||
|
@ -32,10 +32,10 @@ public:
|
|||
virtual void clear() = 0;
|
||||
virtual void setFont(uint8_t fontindex) = 0;
|
||||
virtual void getDispSize(uint8_t *height, uint8_t *width, uint8_t *lineskip, uint8_t *colskip) = 0;
|
||||
virtual void drawString(uint8_t x, uint8_t y, const char *s, int16_t width=-1, uint16_t fg=0xffff, uint16_t bg=0 ) = 0;
|
||||
virtual void drawString(uint8_t x, uint8_t y, const char *s, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0 ) = 0;
|
||||
virtual void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) = 0;
|
||||
virtual void welcome() = 0;
|
||||
virtual void drawIP(uint8_t x, uint8_t y, int16_t width=-1, uint16_t fg=0xffff, uint16_t bg=0 ) = 0;
|
||||
virtual void drawIP(uint8_t x, uint8_t y, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0 ) = 0;
|
||||
};
|
||||
|
||||
class U8x8Display : public RawDisplay {
|
||||
|
@ -51,10 +51,10 @@ public:
|
|||
void clear();
|
||||
void setFont(uint8_t fontindex);
|
||||
void getDispSize(uint8_t *height, uint8_t *width, uint8_t *lineskip, uint8_t *colskip);
|
||||
void drawString(uint8_t x, uint8_t y, const char *s, int16_t width=-1, uint16_t fg=0xffff, uint16_t bg=0);
|
||||
void drawString(uint8_t x, uint8_t y, const char *s, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0);
|
||||
void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr);
|
||||
void welcome();
|
||||
void drawIP(uint8_t x, uint8_t y, int16_t width=-1, uint16_t fg=0xffff, uint16_t bg=0);
|
||||
void drawIP(uint8_t x, uint8_t y, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0);
|
||||
};
|
||||
|
||||
class MY_ILI9225 : public TFT22_ILI9225 {
|
||||
|
@ -76,10 +76,10 @@ public:
|
|||
void clear();
|
||||
void setFont(uint8_t fontindex);
|
||||
void getDispSize(uint8_t *height, uint8_t *width, uint8_t *lineskip, uint8_t *colskip);
|
||||
void drawString(uint8_t x, uint8_t y, const char *s, int16_t width=-1, uint16_t fg=0xffff, uint16_t bg=0);
|
||||
void drawString(uint8_t x, uint8_t y, const char *s, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0);
|
||||
void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr);
|
||||
void welcome();
|
||||
void drawIP(uint8_t x, uint8_t y, int16_t width=-1, uint16_t fg=0xffff, uint16_t bg=0);
|
||||
void drawIP(uint8_t x, uint8_t y, int16_t width=WIDTH_AUTO, uint16_t fg=0xffff, uint16_t bg=0);
|
||||
};
|
||||
|
||||
class Display {
|
||||
|
|
Ładowanie…
Reference in New Issue