@@ -217,7 +217,7 @@ void gfxLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, GFX_COLOUR_t colour
217
217
}
218
218
}
219
219
220
- static void sGfxPrint5x7 (uint8_t size , int16_t x , int16_t y , GFX_COLOUR_t fg , GFX_COLOUR_t bg , const char * str )
220
+ static void sGfxPrint5x7 (uint8_t size , int16_t x , int16_t y , GFX_COLOUR_t fg , GFX_COLOUR_t bg , const char * str , const bool isProgMem )
221
221
{
222
222
#ifndef GFX_CHECK_BOUNDS
223
223
// skip early, gfxPixel() will take care of the precise bounds
@@ -230,7 +230,7 @@ static void sGfxPrint5x7(uint8_t size, int16_t x, int16_t y, GFX_COLOUR_t fg, GF
230
230
return ;
231
231
}
232
232
#endif
233
- const int iLen = strlen (str );
233
+ const int iLen = isProgMem ? strlen_P ( str ) : strlen (str );
234
234
if ( (iLen > 255 ) || (iLen < 1 ) )
235
235
{
236
236
return ;
@@ -239,7 +239,7 @@ static void sGfxPrint5x7(uint8_t size, int16_t x, int16_t y, GFX_COLOUR_t fg, GF
239
239
for (uint8_t strIx = 0 ; strIx < len ; strIx ++ )
240
240
{
241
241
// draw character...
242
- uint8_t * bitmap = adaGfxFontChar (str [strIx ]);
242
+ uint8_t * bitmap = adaGfxFontChar ( isProgMem ? pgm_read_byte ( & str [strIx ]) : str [ strIx ] );
243
243
for (uint8_t bitmapIx = 0 ; bitmapIx < 5 ; bitmapIx ++ )
244
244
{
245
245
// ...row by row
@@ -274,13 +274,29 @@ void gfxPrint(GFX_FONT_t font, int16_t x, int16_t y, GFX_COLOUR_t fg, GFX_COLOUR
274
274
switch (font )
275
275
{
276
276
case GFX_FONT_5X7_1 :
277
- sGfxPrint5x7 (1 , x , y , fg , bg , str );
277
+ sGfxPrint5x7 (1 , x , y , fg , bg , str , false );
278
278
break ;
279
279
case GFX_FONT_5X7_2 :
280
- sGfxPrint5x7 (2 , x , y , fg , bg , str );
280
+ sGfxPrint5x7 (2 , x , y , fg , bg , str , false );
281
281
break ;
282
282
case GFX_FONT_5X7_3 :
283
- sGfxPrint5x7 (3 , x , y , fg , bg , str );
283
+ sGfxPrint5x7 (3 , x , y , fg , bg , str , false);
284
+ break ;
285
+ }
286
+ }
287
+
288
+ void gfxPrint_P (GFX_FONT_t font , int16_t x , int16_t y , GFX_COLOUR_t fg , GFX_COLOUR_t bg , const char * str )
289
+ {
290
+ switch (font )
291
+ {
292
+ case GFX_FONT_5X7_1 :
293
+ sGfxPrint5x7 (1 , x , y , fg , bg , str , true);
294
+ break ;
295
+ case GFX_FONT_5X7_2 :
296
+ sGfxPrint5x7 (2 , x , y , fg , bg , str , true);
297
+ break ;
298
+ case GFX_FONT_5X7_3 :
299
+ sGfxPrint5x7 (3 , x , y , fg , bg , str , true);
284
300
break ;
285
301
}
286
302
}
0 commit comments