Commit 505ca81a authored by Bodmer's avatar Bodmer

Complete viewport update

parent ee91f723
...@@ -359,9 +359,13 @@ bool TFT_eSPI::getUnicodeIndex(uint16_t unicode, uint16_t *index) ...@@ -359,9 +359,13 @@ bool TFT_eSPI::getUnicodeIndex(uint16_t unicode, uint16_t *index)
// Expects file to be open // Expects file to be open
void TFT_eSPI::drawGlyph(uint16_t code) void TFT_eSPI::drawGlyph(uint16_t code)
{ {
uint16_t fg = textcolor;
uint16_t bg = textbgcolor;
if (code < 0x21) if (code < 0x21)
{ {
if (code == 0x20) { if (code == 0x20) {
//if (fg!=bg) fillRect(cursor_x, cursor_y, gFont.spaceWidth, gFont.yAdvance, bg);
cursor_x += gFont.spaceWidth; cursor_x += gFont.spaceWidth;
return; return;
} }
...@@ -377,18 +381,15 @@ void TFT_eSPI::drawGlyph(uint16_t code) ...@@ -377,18 +381,15 @@ void TFT_eSPI::drawGlyph(uint16_t code)
uint16_t gNum = 0; uint16_t gNum = 0;
bool found = getUnicodeIndex(code, &gNum); bool found = getUnicodeIndex(code, &gNum);
uint16_t fg = textcolor;
uint16_t bg = textbgcolor;
if (found) if (found)
{ {
if (textwrapX && (cursor_x + gWidth[gNum] + gdX[gNum] > _width)) if (textwrapX && (cursor_x + gWidth[gNum] + gdX[gNum] > width()))
{ {
cursor_y += gFont.yAdvance; cursor_y += gFont.yAdvance;
cursor_x = 0; cursor_x = 0;
} }
if (textwrapY && ((cursor_y + gFont.yAdvance) >= _height)) cursor_y = 0; if (textwrapY && ((cursor_y + gFont.yAdvance) >= height())) cursor_y = 0;
if (cursor_x == 0) cursor_x -= gdX[gNum]; if (cursor_x == 0) cursor_x -= gdX[gNum];
uint8_t* pbuffer = nullptr; uint8_t* pbuffer = nullptr;
...@@ -402,15 +403,17 @@ void TFT_eSPI::drawGlyph(uint16_t code) ...@@ -402,15 +403,17 @@ void TFT_eSPI::drawGlyph(uint16_t code)
} }
#endif #endif
int16_t xs = 0;
uint32_t dl = 0;
uint8_t pixel;
int16_t cy = cursor_y + gFont.maxAscent - gdY[gNum]; int16_t cy = cursor_y + gFont.maxAscent - gdY[gNum];
int16_t cx = cursor_x + gdX[gNum]; int16_t cx = cursor_x + gdX[gNum];
int16_t xs = cx;
uint32_t dl = 0;
uint8_t pixel;
startWrite(); // Avoid slow ESP32 transaction overhead for every pixel startWrite(); // Avoid slow ESP32 transaction overhead for every pixel
//if (fg!=bg) fillRect(cursor_x, cursor_y, gxAdvance[gNum], gFont.yAdvance, bg);
for (int y = 0; y < gHeight[gNum]; y++) for (int y = 0; y < gHeight[gNum]; y++)
{ {
#ifdef FONT_FS_AVAILABLE #ifdef FONT_FS_AVAILABLE
......
This diff is collapsed.
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#ifndef _TFT_eSPIH_ #ifndef _TFT_eSPIH_
#define _TFT_eSPIH_ #define _TFT_eSPIH_
#define TFT_ESPI_VERSION "2.3.0" #define TFT_ESPI_VERSION "2.3.1"
/*************************************************************************************** /***************************************************************************************
** Section 1: Load required header files ** Section 1: Load required header files
...@@ -736,10 +736,13 @@ class TFT_eSPI : public Print { ...@@ -736,10 +736,13 @@ class TFT_eSPI : public Print {
int32_t addr_row, addr_col; // Window position - used to minimise window commands int32_t addr_row, addr_col; // Window position - used to minimise window commands
// Viewport variables // Viewport variables
int32_t _vpX, _vpY, _vpW, _vpH; int32_t _vpX, _vpY, _vpW, _vpH; // Note: x start, y start, x end + 1, y end + 1
int32_t _xDatum; int32_t _xDatum;
int32_t _yDatum; int32_t _yDatum;
int32_t _xWidth;
int32_t _yHeight;
bool _vpDatum; bool _vpDatum;
bool _vpOoB;
uint32_t fontsloaded; // Bit field of fonts loaded uint32_t fontsloaded; // Bit field of fonts loaded
......
...@@ -45,7 +45,6 @@ void loop() { ...@@ -45,7 +45,6 @@ void loop() {
tft.setTextColor(TFT_RED, TFT_BLACK); tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4); tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
if (drawTime < 100) tft.drawString("Font 1 not loaded!", 0, 108, 2);
delay(4000); delay(4000);
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
...@@ -60,7 +59,6 @@ void loop() { ...@@ -60,7 +59,6 @@ void loop() {
tft.setTextColor(TFT_RED, TFT_BLACK); tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4); tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
if (drawTime < 200) tft.drawString("Font 2 not loaded!", 0, 108, 2);
delay(4000); delay(4000);
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
...@@ -75,7 +73,6 @@ void loop() { ...@@ -75,7 +73,6 @@ void loop() {
tft.setTextColor(TFT_RED, TFT_BLACK); tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4); tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
if (drawTime < 200) tft.drawString("Font 4 not loaded!", 0, 108, 2);
delay(4000); delay(4000);
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
...@@ -90,7 +87,6 @@ void loop() { ...@@ -90,7 +87,6 @@ void loop() {
tft.setTextColor(TFT_RED, TFT_BLACK); tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4); tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
if (drawTime < 200) tft.drawString("Font 6 not loaded!", 0, 108, 2);
delay(4000); delay(4000);
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
...@@ -105,7 +101,6 @@ void loop() { ...@@ -105,7 +101,6 @@ void loop() {
tft.setTextColor(TFT_RED, TFT_BLACK); tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4); tft.drawFloat(drawTime / 2890.0, 3, 0, 80, 4);
if (drawTime < 200) tft.drawString("Font 7 not loaded!", 0, 108, 2);
delay(4000); delay(4000);
tft.fillScreen(TFT_BLACK); tft.fillScreen(TFT_BLACK);
...@@ -120,7 +115,6 @@ void loop() { ...@@ -120,7 +115,6 @@ void loop() {
tft.setTextColor(TFT_RED, TFT_BLACK); tft.setTextColor(TFT_RED, TFT_BLACK);
tft.drawFloat(drawTime / 190.0, 3, 0, 80, 4); tft.drawFloat(drawTime / 190.0, 3, 0, 80, 4);
if (drawTime < 200) tft.drawString("Font 8 not loaded!", 0, 108, 2);
delay(4000); delay(4000);
} }
......
...@@ -89,7 +89,7 @@ void setup() { ...@@ -89,7 +89,7 @@ void setup() {
spr.setTextColor(TFT_WHITE, bg_color); spr.setTextColor(TFT_WHITE, bg_color);
spr.setTextDatum(MC_DATUM); spr.setTextDatum(MC_DATUM);
spr.setTextPadding(spr_width); spr.setTextPadding(spr_width);
spr.drawNumber(0, spr_width/2, 0); spr.drawNumber(0, spr_width/2, spr.fontHeight()/2);
spr.pushSprite(DIAL_CENTRE_X - spr_width / 2, DIAL_CENTRE_Y - spr.fontHeight() / 2); spr.pushSprite(DIAL_CENTRE_X - spr_width / 2, DIAL_CENTRE_Y - spr.fontHeight() / 2);
// Plot the label text // Plot the label text
...@@ -203,7 +203,7 @@ void plotNeedle(int16_t angle, uint16_t ms_delay) ...@@ -203,7 +203,7 @@ void plotNeedle(int16_t angle, uint16_t ms_delay)
} }
// Update the number at the centre of the dial // Update the number at the centre of the dial
spr.drawNumber(old_angle+120, spr_width/2, 0); spr.drawNumber(old_angle+120, spr_width/2, spr.fontHeight()/2);
spr.pushSprite(120 - spr_width / 2, 120 - spr.fontHeight() / 2); spr.pushSprite(120 - spr_width / 2, 120 - spr.fontHeight() / 2);
// Slow needle down slightly as it approaches the new position // Slow needle down slightly as it approaches the new position
......
...@@ -132,7 +132,7 @@ void loop() { ...@@ -132,7 +132,7 @@ void loop() {
for (int16_t angle = 30; angle <= 360; angle += 30) for (int16_t angle = 30; angle <= 360; angle += 30)
{ {
spr.fillSprite(TFT_BLACK); // Clear the Sprite spr.fillSprite(TFT_BLACK); // Clear the Sprite
spr.drawNumber(num, 20, 15, 4); // Plot number, in Sprite at 15,15 and with font 4 spr.drawNumber(num, 20, 15, 4); // Plot number, in Sprite at 20,15 and with font 4
spr.pushRotated(angle, TFT_BLACK); // Plot rotated Sprite, black being transparent spr.pushRotated(angle, TFT_BLACK); // Plot rotated Sprite, black being transparent
num++; num++;
} }
...@@ -143,7 +143,7 @@ void loop() { ...@@ -143,7 +143,7 @@ void loop() {
for (int16_t angle = -90; angle < 270; angle += 30) for (int16_t angle = -90; angle < 270; angle += 30)
{ {
spr.fillSprite(TFT_BLACK); // Clear the Sprite spr.fillSprite(TFT_BLACK); // Clear the Sprite
spr.drawNumber(angle+90, 15, 15, 4); // Plot number, in Sprite at 15,15 and with font 4 spr.drawNumber(angle+90, 20, 15, 4); // Plot number, in Sprite at 20,15 and with font 4
spr.pushRotated(angle, TFT_BLACK); // Plot rotated Sprite, black being transparent spr.pushRotated(angle, TFT_BLACK); // Plot rotated Sprite, black being transparent
num++; num++;
} }
......
{ {
"name": "TFT_eSPI", "name": "TFT_eSPI",
"version": "2.3.0", "version": "2.3.1",
"keywords": "Arduino, tft, ePaper, display, STM32, ESP8266, NodeMCU, ESP32, M5Stack, ILI9341, ST7735, ILI9163, S6D02A1, ILI9486, ST7789, RM68140", "keywords": "Arduino, tft, ePaper, display, STM32, ESP8266, NodeMCU, ESP32, M5Stack, ILI9341, ST7735, ILI9163, S6D02A1, ILI9486, ST7789, RM68140",
"description": "A TFT and ePaper SPI graphics library with optimisation for ESP8266, ESP32 and STM32", "description": "A TFT and ePaper SPI graphics library with optimisation for ESP8266, ESP32 and STM32",
"repository": "repository":
......
name=TFT_eSPI name=TFT_eSPI
version=2.3.0 version=2.3.1
author=Bodmer author=Bodmer
maintainer=Bodmer maintainer=Bodmer
sentence=TFT graphics library for Arduino processors with performance optimisation for STM32, ESP8266 and ESP32 sentence=TFT graphics library for Arduino processors with performance optimisation for STM32, ESP8266 and ESP32
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment