Test for STM32F4

Dependents:   Nucleo_SSD1331

Fork of RGB_OLED_SSD1331 by Juergen M

Committer:
kkado
Date:
Wed Aug 02 22:12:49 2017 +0000
Revision:
18:47cbbfc890a8
Parent:
17:1bcdc92af126
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
messi1 0:6e810b5b40a3 1 /*
messi1 0:6e810b5b40a3 2 * SGL.cpp
messi1 0:6e810b5b40a3 3 * A library for Seeed Graphical library
messi1 0:6e810b5b40a3 4 *
messi1 0:6e810b5b40a3 5 * Copyright (c) 2014 seeed technology inc.
messi1 0:6e810b5b40a3 6 * Author : lawliet.zou(lawliet.zou@gmail.com)
messi1 0:6e810b5b40a3 7 * Create Time : Jun 06, 2014
messi1 0:6e810b5b40a3 8 * Change Log :
messi1 0:6e810b5b40a3 9 *
messi1 0:6e810b5b40a3 10 * The MIT License (MIT)
messi1 0:6e810b5b40a3 11 *
messi1 0:6e810b5b40a3 12 * Permission is hereby granted, free of charge, to any person obtaining a copy
messi1 0:6e810b5b40a3 13 * of this software and associated documentation files (the "Software"), to deal
messi1 0:6e810b5b40a3 14 * in the Software without restriction, including without limitation the rights
messi1 0:6e810b5b40a3 15 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
messi1 0:6e810b5b40a3 16 * copies of the Software, and to permit persons to whom the Software is
messi1 0:6e810b5b40a3 17 * furnished to do so, subject to the following conditions:
messi1 0:6e810b5b40a3 18 *
messi1 0:6e810b5b40a3 19 * The above copyright notice and this permission notice shall be included in
messi1 0:6e810b5b40a3 20 * all copies or substantial portions of the Software.
messi1 0:6e810b5b40a3 21 *
messi1 0:6e810b5b40a3 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
messi1 0:6e810b5b40a3 23 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
messi1 0:6e810b5b40a3 24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
messi1 0:6e810b5b40a3 25 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
messi1 0:6e810b5b40a3 26 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
messi1 0:6e810b5b40a3 27 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
messi1 0:6e810b5b40a3 28 * THE SOFTWARE.
messi1 0:6e810b5b40a3 29 */
messi1 0:6e810b5b40a3 30 #include <stdlib.h>
messi1 0:6e810b5b40a3 31 #include "SGL.h"
messi1 10:ef7440718431 32 #include "SimpleFont.h"
messi1 0:6e810b5b40a3 33
messi1 11:162aa3e801df 34 //template class SGL<uint8_t>;
messi1 11:162aa3e801df 35 //template class SGL<uint16_t>;
messi1 11:162aa3e801df 36
messi1 8:ff74bd4d94d6 37 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 38 template <class T>
messi1 11:162aa3e801df 39 SGL<T>::SGL(T width, T height):
messi1 17:1bcdc92af126 40 _displayWidth(width), _displayHeight(height),
messi1 10:ef7440718431 41 _currentFont(0),
messi1 10:ef7440718431 42 _fontWidth(0),
messi1 10:ef7440718431 43 _fontHeight(0),
messi1 10:ef7440718431 44 _fontStart(0),
messi1 10:ef7440718431 45 _fontStop(0)
messi1 10:ef7440718431 46 {}
messi1 0:6e810b5b40a3 47
messi1 8:ff74bd4d94d6 48 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 49 template <class T>
messi1 11:162aa3e801df 50 void SGL<T>::drawLine(T x0, T y0, T x1, T y1, uint16_t color)
messi1 0:6e810b5b40a3 51 {
messi1 11:162aa3e801df 52 T x = x1-x0;
messi1 11:162aa3e801df 53 T y = y1-y0;
messi1 11:162aa3e801df 54 T dx = abs(x), sx = x0<x1 ? 1 : -1;
messi1 11:162aa3e801df 55 T dy = -abs(y), sy = y0<y1 ? 1 : -1;
messi1 11:162aa3e801df 56 T err = dx+dy, e2;
messi1 10:ef7440718431 57 for (;;)
messi1 10:ef7440718431 58 {
messi1 4:1707ca53e7d5 59 drawPixel(x0, y0,color);
messi1 0:6e810b5b40a3 60 e2 = 2*err;
messi1 0:6e810b5b40a3 61 if (e2 >= dy) {
messi1 0:6e810b5b40a3 62 if (x0 == x1) break;
messi1 0:6e810b5b40a3 63 err += dy; x0 += sx;
messi1 0:6e810b5b40a3 64 }
messi1 0:6e810b5b40a3 65 if (e2 <= dx) {
messi1 0:6e810b5b40a3 66 if (y0 == y1) break;
messi1 0:6e810b5b40a3 67 err += dx; y0 += sy;
messi1 0:6e810b5b40a3 68 }
messi1 0:6e810b5b40a3 69 }
messi1 0:6e810b5b40a3 70 }
messi1 0:6e810b5b40a3 71
messi1 8:ff74bd4d94d6 72 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 73 template <class T>
messi1 11:162aa3e801df 74 void SGL<T>::drawVLine(T x, T y, T length,uint16_t color)
messi1 0:6e810b5b40a3 75 {
messi1 17:1bcdc92af126 76 T y1 = MIN(y+length,_displayHeight-1);
messi1 11:162aa3e801df 77 for(T i = y; i < y1; ++i)
messi1 10:ef7440718431 78 {
messi1 8:ff74bd4d94d6 79 drawPixel(x, i, color);
messi1 0:6e810b5b40a3 80 }
messi1 0:6e810b5b40a3 81 }
messi1 0:6e810b5b40a3 82
messi1 8:ff74bd4d94d6 83 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 84 template <class T>
messi1 11:162aa3e801df 85 void SGL<T>::drawHLine(T x, T y, T length, uint16_t color)
messi1 0:6e810b5b40a3 86 {
messi1 17:1bcdc92af126 87 T x1 = MIN(x+length,_displayWidth-1);
messi1 11:162aa3e801df 88 for(T i = x; i < x1; ++i)
messi1 10:ef7440718431 89 {
messi1 8:ff74bd4d94d6 90 drawPixel(i, y, color);
messi1 0:6e810b5b40a3 91 }
messi1 0:6e810b5b40a3 92 }
messi1 0:6e810b5b40a3 93
messi1 8:ff74bd4d94d6 94 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 95 template <class T>
messi1 11:162aa3e801df 96 void SGL<T>::drawRect(T x, T y, T width, T height, uint16_t color)
messi1 0:6e810b5b40a3 97 {
messi1 8:ff74bd4d94d6 98 drawHLine(x, y, width, color);
messi1 8:ff74bd4d94d6 99 drawHLine(x, y+height, width, color);
messi1 8:ff74bd4d94d6 100 drawVLine(x, y, height, color);
messi1 8:ff74bd4d94d6 101 drawVLine(x+width, y, height, color);
messi1 0:6e810b5b40a3 102 }
messi1 0:6e810b5b40a3 103
messi1 8:ff74bd4d94d6 104 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 105 template <class T>
messi1 11:162aa3e801df 106 void SGL<T>::fillRect(T x, T y, T width, T height, uint16_t color)
messi1 0:6e810b5b40a3 107 {
messi1 10:ef7440718431 108 for(uint8_t i = 0; i < height; ++i)
messi1 10:ef7440718431 109 {
messi1 10:ef7440718431 110 for(uint8_t j = 0; j < width; ++j)
messi1 10:ef7440718431 111 {
messi1 8:ff74bd4d94d6 112 drawPixel( x+j, y+i, color);
messi1 0:6e810b5b40a3 113 }
messi1 0:6e810b5b40a3 114 }
messi1 0:6e810b5b40a3 115 }
messi1 0:6e810b5b40a3 116
messi1 8:ff74bd4d94d6 117 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 118 template <class T>
messi1 11:162aa3e801df 119 void SGL<T>::drawCircle(T poX, T poY, T r, uint16_t color)
messi1 0:6e810b5b40a3 120 {
messi1 0:6e810b5b40a3 121 int x = -r, y = 0, err = 2-2*r, e2;
messi1 10:ef7440718431 122 do
messi1 10:ef7440718431 123 {
messi1 0:6e810b5b40a3 124 drawPixel(poX-x, poY+y,color);
messi1 0:6e810b5b40a3 125 drawPixel(poX+x, poY+y,color);
messi1 0:6e810b5b40a3 126 drawPixel(poX+x, poY-y,color);
messi1 0:6e810b5b40a3 127 drawPixel(poX-x, poY-y,color);
messi1 0:6e810b5b40a3 128 e2 = err;
messi1 10:ef7440718431 129 if(e2 <= y)
messi1 10:ef7440718431 130 {
messi1 0:6e810b5b40a3 131 err += ++y*2+1;
messi1 0:6e810b5b40a3 132 if(-x == y && e2 <= x) e2 = 0;
messi1 0:6e810b5b40a3 133 }
messi1 0:6e810b5b40a3 134 if(e2 > x) err += ++x*2+1;
messi1 0:6e810b5b40a3 135 } while(x <= 0);
messi1 0:6e810b5b40a3 136 }
messi1 0:6e810b5b40a3 137
messi1 8:ff74bd4d94d6 138 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 139 template <class T>
messi1 11:162aa3e801df 140 void SGL<T>::fillCircle(T poX, T poY, T r, uint16_t color)
messi1 0:6e810b5b40a3 141 {
messi1 0:6e810b5b40a3 142 int x = -r, y = 0, err = 2-2*r, e2;
messi1 10:ef7440718431 143 do
messi1 10:ef7440718431 144 {
messi1 8:ff74bd4d94d6 145 drawVLine(poX-x, poY-y, 2*y, color);
messi1 8:ff74bd4d94d6 146 drawVLine(poX+x, poY-y, 2*y, color);
messi1 0:6e810b5b40a3 147 e2 = err;
messi1 10:ef7440718431 148 if(e2 <= y)
messi1 10:ef7440718431 149 {
messi1 0:6e810b5b40a3 150 err += ++y*2+1;
messi1 0:6e810b5b40a3 151 if(-x == y && e2 <= x) e2 = 0;
messi1 0:6e810b5b40a3 152 }
messi1 0:6e810b5b40a3 153 if(e2 > x) err += ++x*2+1;
messi1 0:6e810b5b40a3 154 }while(x <= 0);
messi1 0:6e810b5b40a3 155 }
messi1 0:6e810b5b40a3 156
messi1 8:ff74bd4d94d6 157 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 158 template <class T>
messi1 13:8dd215952d76 159 void SGL<T>::drawTriangle(T x0, T y0, T x1, T y1, T x2, T y2, uint16_t color)
messi1 0:6e810b5b40a3 160 {
messi1 0:6e810b5b40a3 161 drawLine(x0, y0, x1, y1,color);
messi1 0:6e810b5b40a3 162 drawLine(x1, y1, x2, y2,color);
messi1 0:6e810b5b40a3 163 drawLine(x2, y2, x0, y0,color);
messi1 0:6e810b5b40a3 164 }
messi1 0:6e810b5b40a3 165
messi1 8:ff74bd4d94d6 166 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 167 template <class T>
messi1 13:8dd215952d76 168 void SGL<T>::fillTriangle(T x0, T y0, T x1, T y1, T x2, T y2, uint16_t color)
messi1 0:6e810b5b40a3 169 {
messi1 11:162aa3e801df 170 T a, b, y, last;
messi1 0:6e810b5b40a3 171
messi1 0:6e810b5b40a3 172 if(y0 > y1){ swap(&y0, &y1); swap(&x0, &x1); }
messi1 0:6e810b5b40a3 173 if(y1 > y2){ swap(&y2, &y1); swap(&x2, &x1); }
messi1 0:6e810b5b40a3 174 if(y0 > y1){ swap(&y1, &y0); swap(&x1, &x0); }
messi1 0:6e810b5b40a3 175
messi1 0:6e810b5b40a3 176 if(y0 == y2){
messi1 0:6e810b5b40a3 177 x0 = MIN(x0,x1)<x2?MIN(x0,x1):x2;
messi1 0:6e810b5b40a3 178 x2 = MAX(x0,x1)>x2?MAX(x0,x1):x2;
messi1 8:ff74bd4d94d6 179 drawHLine(x0, y0, x2-x0, color);
messi1 0:6e810b5b40a3 180 return;
messi1 0:6e810b5b40a3 181 }
messi1 0:6e810b5b40a3 182
messi1 0:6e810b5b40a3 183 int16_t dx01 = x1 - x0, dy01 = y1 - y0,
messi1 0:6e810b5b40a3 184 dx02 = x2 - x0, dy02 = y2 - y0,
messi1 0:6e810b5b40a3 185 dx12 = x2 - x1, dy12 = y2 - y1;
messi1 0:6e810b5b40a3 186 int16_t sa = 0, sb = 0;
messi1 0:6e810b5b40a3 187
messi1 8:ff74bd4d94d6 188 if(y1 == y2)
messi1 8:ff74bd4d94d6 189 last = y1;
messi1 8:ff74bd4d94d6 190 else
messi1 8:ff74bd4d94d6 191 last = y1-1;
messi1 0:6e810b5b40a3 192
messi1 10:ef7440718431 193 for(y = y0; y <= last; ++y)
messi1 10:ef7440718431 194 {
messi1 0:6e810b5b40a3 195 a = x0 + sa / dy01;
messi1 0:6e810b5b40a3 196 b = x0 + sb / dy02;
messi1 0:6e810b5b40a3 197 sa += dx01;
messi1 0:6e810b5b40a3 198 sb += dx02;
messi1 0:6e810b5b40a3 199 if(a > b) swap(&a,&b);
messi1 8:ff74bd4d94d6 200 drawHLine(a, y, b-a+1, color);
messi1 0:6e810b5b40a3 201 }
messi1 0:6e810b5b40a3 202
messi1 0:6e810b5b40a3 203 sa = dx12 * (y - y1);
messi1 0:6e810b5b40a3 204 sb = dx02 * (y - y0);
messi1 10:ef7440718431 205 for(; y<=y2; ++y)
messi1 10:ef7440718431 206 {
messi1 0:6e810b5b40a3 207 a = x1 + sa / dy12;
messi1 0:6e810b5b40a3 208 b = x0 + sb / dy02;
messi1 0:6e810b5b40a3 209 sa += dx12;
messi1 0:6e810b5b40a3 210 sb += dx02;
messi1 0:6e810b5b40a3 211 if(a > b) swap(&a,&b);
messi1 8:ff74bd4d94d6 212 drawHLine(a, y, b-a+1, color);
messi1 0:6e810b5b40a3 213 }
messi1 0:6e810b5b40a3 214 }
messi1 0:6e810b5b40a3 215
messi1 8:ff74bd4d94d6 216 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 217 template <class T>
messi1 11:162aa3e801df 218 void SGL<T>::drawChar(uint8_t ascii, T x, T y, uint16_t color, float zoom)
messi1 0:6e810b5b40a3 219 {
messi1 10:ef7440718431 220 if(!_currentFont && !*_currentFont)
messi1 10:ef7440718431 221 return;
messi1 10:ef7440718431 222
messi1 10:ef7440718431 223 if((ascii < _fontStart)||(ascii > _fontStop)){
messi1 0:6e810b5b40a3 224 return;
messi1 0:6e810b5b40a3 225 }
messi1 17:1bcdc92af126 226
messi1 17:1bcdc92af126 227 clearArea(x, y, x+_fontWidth, y+_fontHeight);
messi1 0:6e810b5b40a3 228
messi1 10:ef7440718431 229 for(uint8_t i = 0; i < _fontWidth; ++i )
messi1 10:ef7440718431 230 {
messi1 10:ef7440718431 231 uint8_t temp = simpleFont[ascii-0x20][i];
messi1 10:ef7440718431 232 uint8_t inrun = 0;
messi1 8:ff74bd4d94d6 233 uint8_t runlen = 0;
messi1 8:ff74bd4d94d6 234 uint8_t endrun = 0;
messi1 0:6e810b5b40a3 235
messi1 10:ef7440718431 236 for(uint8_t f = 0; f < _fontHeight; ++f)
messi1 10:ef7440718431 237 {
messi1 10:ef7440718431 238 if((temp>>f)&0x01)
messi1 10:ef7440718431 239 {
messi1 0:6e810b5b40a3 240 if (inrun) runlen += 1;
messi1 10:ef7440718431 241 else
messi1 10:ef7440718431 242 {
messi1 10:ef7440718431 243 inrun = 1;
messi1 0:6e810b5b40a3 244 runlen = 1;
messi1 0:6e810b5b40a3 245 }
messi1 10:ef7440718431 246 }
messi1 10:ef7440718431 247 else if (inrun)
messi1 10:ef7440718431 248 {
messi1 0:6e810b5b40a3 249 endrun = 1;
messi1 10:ef7440718431 250 inrun = 0;
messi1 0:6e810b5b40a3 251 }
messi1 0:6e810b5b40a3 252
messi1 10:ef7440718431 253 if (f == _fontHeight - 1 && inrun)
messi1 10:ef7440718431 254 {
messi1 0:6e810b5b40a3 255 endrun = 1;
messi1 0:6e810b5b40a3 256 // need the +1 b/c we this code is normally
messi1 0:6e810b5b40a3 257 // only triggered when f == FONT_Y, due to the
messi1 0:6e810b5b40a3 258 // edge-triggered nature of this algorithm
messi1 0:6e810b5b40a3 259 f += 1;
messi1 0:6e810b5b40a3 260 }
messi1 0:6e810b5b40a3 261
messi1 10:ef7440718431 262 if (endrun)
messi1 10:ef7440718431 263 {
messi1 10:ef7440718431 264 fillRect(x+i*zoom, y+(f-runlen)*zoom, zoom, runlen*zoom, color);
messi1 0:6e810b5b40a3 265 inrun = 0;
messi1 0:6e810b5b40a3 266 runlen = 0;
messi1 0:6e810b5b40a3 267 endrun = 0;
messi1 0:6e810b5b40a3 268 }
messi1 0:6e810b5b40a3 269 }
messi1 0:6e810b5b40a3 270 }
messi1 0:6e810b5b40a3 271 }
messi1 0:6e810b5b40a3 272
messi1 8:ff74bd4d94d6 273 //---------------------------------------------------------------------------------------
messi1 17:1bcdc92af126 274 template <class T>
messi1 17:1bcdc92af126 275 void SGL<T>::drawString(const char *string, T x, T y, uint16_t color, float zoom, int8_t fontSpace)
messi1 0:6e810b5b40a3 276 {
messi1 10:ef7440718431 277 if(!_currentFont && !*_currentFont)
messi1 10:ef7440718431 278 return;
messi1 10:ef7440718431 279
messi1 17:1bcdc92af126 280 T tempX = x;
messi1 17:1bcdc92af126 281 T tempY = y;
messi1 17:1bcdc92af126 282
messi1 10:ef7440718431 283 while(*string)
messi1 17:1bcdc92af126 284 {
messi1 17:1bcdc92af126 285 drawChar(*string, tempX, tempY, color, zoom);
messi1 0:6e810b5b40a3 286 *string++;
messi1 17:1bcdc92af126 287 tempX += _fontWidth+fontSpace;
messi1 17:1bcdc92af126 288
messi1 17:1bcdc92af126 289 // New line when end of display reached
messi1 17:1bcdc92af126 290 if(tempX >= _displayWidth-1)
messi1 10:ef7440718431 291 {
messi1 17:1bcdc92af126 292 tempY += _fontHeight*zoom;
messi1 17:1bcdc92af126 293 tempX = 0;
messi1 0:6e810b5b40a3 294 }
messi1 0:6e810b5b40a3 295 }
messi1 17:1bcdc92af126 296 }
messi1 15:c49040bf0e1d 297
messi1 15:c49040bf0e1d 298 //---------------------------------------------------------------------------------------
messi1 15:c49040bf0e1d 299 template <class T>
messi1 17:1bcdc92af126 300 Rect<T> SGL<T>::boundingRect(const char *string, T x, T y, float zoom, int8_t fontSpace)
messi1 15:c49040bf0e1d 301 {
messi1 15:c49040bf0e1d 302 if(!_currentFont && !*_currentFont)
messi1 15:c49040bf0e1d 303 return Rect<T>();
messi1 15:c49040bf0e1d 304
messi1 15:c49040bf0e1d 305 int boundingWidth = 0;
messi1 15:c49040bf0e1d 306
messi1 15:c49040bf0e1d 307 while(*string)
messi1 15:c49040bf0e1d 308 {
messi1 17:1bcdc92af126 309 boundingWidth += (_fontWidth+fontSpace*zoom);
messi1 15:c49040bf0e1d 310 *string++;
messi1 15:c49040bf0e1d 311 }
messi1 15:c49040bf0e1d 312
messi1 17:1bcdc92af126 313 T rectX = x-2;
messi1 17:1bcdc92af126 314 T rectY = y-2;
messi1 17:1bcdc92af126 315
messi1 17:1bcdc92af126 316 if(rectX > _displayWidth)
messi1 17:1bcdc92af126 317 rectX = 0;
messi1 17:1bcdc92af126 318
messi1 17:1bcdc92af126 319 if(rectY > _displayHeight)
messi1 17:1bcdc92af126 320 rectY = 0;
messi1 17:1bcdc92af126 321
messi1 17:1bcdc92af126 322 return Rect<T>(rectX, rectY, boundingWidth, _fontHeight+3 );
messi1 0:6e810b5b40a3 323 }
messi1 0:6e810b5b40a3 324
messi1 8:ff74bd4d94d6 325 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 326 template <class T>
messi1 11:162aa3e801df 327 void SGL<T>::drawBitMap(T x, T y, const uint8_t *bitmap, T width, T height, uint16_t color)
messi1 0:6e810b5b40a3 328 {
messi1 11:162aa3e801df 329 T byteWidth = (width + 7) / 8;
messi1 8:ff74bd4d94d6 330
messi1 11:162aa3e801df 331 for(T j = 0; j < height; ++j)
messi1 8:ff74bd4d94d6 332 {
messi1 11:162aa3e801df 333 for(T i = 0; i < width; ++i )
messi1 8:ff74bd4d94d6 334 {
messi1 8:ff74bd4d94d6 335 if( *(bitmap + j * byteWidth + i / 8) & (128 >> (i & 7)) )
messi1 8:ff74bd4d94d6 336 {
messi1 0:6e810b5b40a3 337 drawPixel(x+i, y+j, color);
messi1 0:6e810b5b40a3 338 }
messi1 0:6e810b5b40a3 339 }
messi1 0:6e810b5b40a3 340 }
messi1 0:6e810b5b40a3 341 }
messi1 0:6e810b5b40a3 342
messi1 8:ff74bd4d94d6 343 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 344 template <class T>
messi1 11:162aa3e801df 345 void SGL<T>::fillScreen(uint16_t color)
messi1 0:6e810b5b40a3 346 {
messi1 17:1bcdc92af126 347 fillRect(0, 0, _displayWidth, _displayHeight, color);
messi1 10:ef7440718431 348 }
messi1 10:ef7440718431 349
messi1 10:ef7440718431 350 //---------------------------------------------------------------------------------------
messi1 11:162aa3e801df 351 template <class T>
messi1 11:162aa3e801df 352 void SGL<T>::setFont(FontType font, uint8_t width, uint8_t height, uint8_t asciiStart, uint8_t asciiStop)
messi1 10:ef7440718431 353 {
messi1 10:ef7440718431 354 if(!font && !*font)
messi1 10:ef7440718431 355 return;
messi1 10:ef7440718431 356
messi1 10:ef7440718431 357 _currentFont= font;
messi1 10:ef7440718431 358 _fontWidth = width;
messi1 10:ef7440718431 359 _fontHeight = height;
messi1 11:162aa3e801df 360 _fontStart = asciiStart;
messi1 11:162aa3e801df 361 _fontStop = asciiStop;
messi1 0:6e810b5b40a3 362 }