From 038809e5c15ac5e53e4880c3c7e3a38e78b303a2 Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Thu, 23 Sep 2021 09:51:51 +0200 Subject: [PATCH] fix graph colors --- tasmota/xdrv_13_display.ino | 41 +++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino index 609be6015..f4c280b4b 100755 --- a/tasmota/xdrv_13_display.ino +++ b/tasmota/xdrv_13_display.ino @@ -50,6 +50,11 @@ int16_t disp_xpos = 0; int16_t disp_ypos = 0; #ifdef USE_MULTI_DISPLAY + +#ifndef MAX_MULTI_DISPLAYS +#define MAX_MULTI_DISPLAYS 3 +#endif + struct MULTI_DISP { Renderer *display; uint16_t fg_color; @@ -58,7 +63,7 @@ struct MULTI_DISP { int16_t disp_ypos; uint8_t color_type; uint8_t auto_draw; -} displays[3]; +} displays[MAX_MULTI_DISPLAYS]; uint8_t cur_display; Renderer *Init_uDisplay(const char *desc, int8_t cs); @@ -204,6 +209,8 @@ struct GRAPH { uint8_t yticks; uint8_t last_val; uint8_t color_index; + uint16_t bg_color; + uint16_t fg_color; GFLAGS flags; }; @@ -583,7 +590,7 @@ void DisplayText(void) { var = atoiv(cp, &temp); cp += var; - if (temp < 1 || temp > 3) { + if (temp < 1 || temp > MAX_MULTI_DISPLAYS) { temp = 1; } temp--; @@ -612,6 +619,7 @@ void DisplayText(void) renderer = Init_uDisplay(fdesc, -1); Set_display(temp); AddLog(LOG_LEVEL_INFO, PSTR("DSP: File descriptor loaded %x"),renderer); + free(fdesc); } } } @@ -2378,12 +2386,12 @@ void ClrGraph(uint16_t num) { // clr inside, but only 1.graph if overlapped if (gp->flags.overlay) return; - renderer->fillRect(gp->xp+1,gp->yp+1,gp->xs-2,gp->ys-2,bg_color); + renderer->fillRect(gp->xp+1,gp->yp+1,gp->xs-2,gp->ys-2,gp->bg_color); if (xticks) { float cxp=gp->xp,xd=(float)gp->xs/(float)xticks; for (count=0; countwriteFastVLine(cxp,gp->yp+gp->ys-TICKLEN,TICKLEN,fg_color); + renderer->writeFastVLine(cxp,gp->yp+gp->ys-TICKLEN,TICKLEN,gp->fg_color); cxp+=xd; } } @@ -2393,27 +2401,27 @@ void ClrGraph(uint16_t num) { float cxp=0; float czp=gp->yp+(gp->ymax/gp->range); while (cxpxs) { - renderer->writeFastHLine(gp->xp+cxp,czp,2,fg_color); + renderer->writeFastHLine(gp->xp+cxp,czp,2,gp->fg_color); cxp+=6.0; } // align ticks to zero line float cyp=0,yd=gp->ys/yticks; for (count=0; countgp->yp) { - renderer->writeFastHLine(gp->xp,czp-cyp,TICKLEN,fg_color); - renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,czp-cyp,TICKLEN,fg_color); + renderer->writeFastHLine(gp->xp,czp-cyp,TICKLEN,gp->fg_color); + renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,czp-cyp,TICKLEN,gp->fg_color); } if ((czp+cyp)<(gp->yp+gp->ys)) { renderer->writeFastHLine(gp->xp,czp+cyp,TICKLEN,fg_color); - renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,czp+cyp,TICKLEN,fg_color); + renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,czp+cyp,TICKLEN,gp->fg_color); } cyp+=yd; } } else { float cyp=gp->yp,yd=gp->ys/yticks; for (count=0; countwriteFastHLine(gp->xp,cyp,TICKLEN,fg_color); - renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,cyp,TICKLEN,fg_color); + renderer->writeFastHLine(gp->xp,cyp,TICKLEN,gp->fg_color); + renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,cyp,TICKLEN,gp->fg_color); cyp+=yd; } } @@ -2443,6 +2451,9 @@ void DefineGraph(uint16_t num,uint16_t xp,uint16_t yp,int16_t xs,uint16_t ys,int } } + gp->bg_color=bg_color; + gp->fg_color=fg_color; + // 6 bits per axis gp->xticks=(num>>4)&0x3f; gp->yticks=(num>>10)&0x3f; @@ -2496,7 +2507,7 @@ void DefineGraph(uint16_t num,uint16_t xp,uint16_t yp,int16_t xs,uint16_t ys,int } // draw rectangle - renderer->drawRect(xp,yp,xs,ys,fg_color); + renderer->drawRect(xp,yp,xs,ys,gp->fg_color); // clr inside ClrGraph(index); @@ -2611,7 +2622,7 @@ void RedrawGraph(uint8_t num, uint8_t flags) { if (!renderer) return; gp->flags.draw=1; - uint16_t linecol=fg_color; + uint16_t linecol=gp->fg_color; if (color_type==COLOR_COLOR) { linecol = GetColorFromIndex(gp->color_index); @@ -2619,7 +2630,7 @@ void RedrawGraph(uint8_t num, uint8_t flags) { if (!gp->flags.overlay) { // draw rectangle - renderer->drawRect(gp->xp,gp->yp,gp->xs,gp->ys,fg_color); + renderer->drawRect(gp->xp,gp->yp,gp->xs,gp->ys,gp->fg_color); // clr inside ClrGraph(index); } @@ -2634,7 +2645,7 @@ void AddGraph(uint8_t num,uint8_t val) { struct GRAPH *gp=graph[num]; if (!renderer) return; - uint16_t linecol=fg_color; + uint16_t linecol=gp->fg_color; if (color_type==COLOR_COLOR) { linecol = GetColorFromIndex(gp->color_index); } @@ -2656,7 +2667,7 @@ void AddGraph(uint8_t num,uint8_t val) { // clr area and redraw graph if (!gp->flags.overlay) { // draw rectangle - renderer->drawRect(gp->xp,gp->yp,gp->xs,gp->ys,fg_color); + renderer->drawRect(gp->xp,gp->yp,gp->xs,gp->ys,gp->fg_color); // clr inner and draw ticks ClrGraph(num); }