Junichi Katsu / Mbed 2 deprecated LedPanel_Clock

Dependencies:   EthernetInterface NTPClient mbed-rtos mbed

Committer:
mbed_Cookbook_SE
Date:
Wed Dec 23 16:17:01 2015 +0000
Revision:
0:7d6abca457ee
??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_Cookbook_SE 0:7d6abca457ee 1 /***********************************
mbed_Cookbook_SE 0:7d6abca457ee 2 This is a our graphics core library, for all our displays.
mbed_Cookbook_SE 0:7d6abca457ee 3 We'll be adapting all the
mbed_Cookbook_SE 0:7d6abca457ee 4 existing libaries to use this core to make updating, support
mbed_Cookbook_SE 0:7d6abca457ee 5 and upgrading easier!
mbed_Cookbook_SE 0:7d6abca457ee 6
mbed_Cookbook_SE 0:7d6abca457ee 7 Adafruit invests time and resources providing this open source code,
mbed_Cookbook_SE 0:7d6abca457ee 8 please support Adafruit and open-source hardware by purchasing
mbed_Cookbook_SE 0:7d6abca457ee 9 products from Adafruit!
mbed_Cookbook_SE 0:7d6abca457ee 10
mbed_Cookbook_SE 0:7d6abca457ee 11 Written by Limor Fried/Ladyada for Adafruit Industries.
mbed_Cookbook_SE 0:7d6abca457ee 12 BSD license, check license.txt for more information
mbed_Cookbook_SE 0:7d6abca457ee 13 All text above must be included in any redistribution
mbed_Cookbook_SE 0:7d6abca457ee 14 ****************************************/
mbed_Cookbook_SE 0:7d6abca457ee 15
mbed_Cookbook_SE 0:7d6abca457ee 16 /*
mbed_Cookbook_SE 0:7d6abca457ee 17 * Modified by Neal Horman 7/14/2012 for use in LPC1768
mbed_Cookbook_SE 0:7d6abca457ee 18 */
mbed_Cookbook_SE 0:7d6abca457ee 19
mbed_Cookbook_SE 0:7d6abca457ee 20 /**
mbed_Cookbook_SE 0:7d6abca457ee 21 * Matrix16x16 LEDPanel Grafix library
mbed_Cookbook_SE 0:7d6abca457ee 22 *
mbed_Cookbook_SE 0:7d6abca457ee 23 * @author Junichi Katsu
mbed_Cookbook_SE 0:7d6abca457ee 24 * @version 1.0
mbed_Cookbook_SE 0:7d6abca457ee 25 * @date 15-April-2015
mbed_Cookbook_SE 0:7d6abca457ee 26 *
mbed_Cookbook_SE 0:7d6abca457ee 27 */
mbed_Cookbook_SE 0:7d6abca457ee 28
mbed_Cookbook_SE 0:7d6abca457ee 29 #include "mbed.h"
mbed_Cookbook_SE 0:7d6abca457ee 30
mbed_Cookbook_SE 0:7d6abca457ee 31 #include "LedPanel_GFX.h"
mbed_Cookbook_SE 0:7d6abca457ee 32 #include "font.h"
mbed_Cookbook_SE 0:7d6abca457ee 33
mbed_Cookbook_SE 0:7d6abca457ee 34 Serial pc(USBTX, USBRX);
mbed_Cookbook_SE 0:7d6abca457ee 35
mbed_Cookbook_SE 0:7d6abca457ee 36
mbed_Cookbook_SE 0:7d6abca457ee 37 LedPanel_GFX::LedPanel_GFX(int16_t w, int16_t h)
mbed_Cookbook_SE 0:7d6abca457ee 38 {
mbed_Cookbook_SE 0:7d6abca457ee 39 _rawWidth = w;
mbed_Cookbook_SE 0:7d6abca457ee 40 _rawHeight = h;
mbed_Cookbook_SE 0:7d6abca457ee 41 _width = w;
mbed_Cookbook_SE 0:7d6abca457ee 42 _height = h;
mbed_Cookbook_SE 0:7d6abca457ee 43 cursor_x = 0;
mbed_Cookbook_SE 0:7d6abca457ee 44 cursor_y = 0;
mbed_Cookbook_SE 0:7d6abca457ee 45 textcolor = WHITE;
mbed_Cookbook_SE 0:7d6abca457ee 46 textbgcolor = BLACK;
mbed_Cookbook_SE 0:7d6abca457ee 47 textsize = 1;
mbed_Cookbook_SE 0:7d6abca457ee 48 rotation = 0;
mbed_Cookbook_SE 0:7d6abca457ee 49 wrap = true;
mbed_Cookbook_SE 0:7d6abca457ee 50
mbed_Cookbook_SE 0:7d6abca457ee 51 memcpy( &fnt_head , &font[0] , 18);
mbed_Cookbook_SE 0:7d6abca457ee 52 font_head_size = 18 + fnt_head.Tnum * 4;
mbed_Cookbook_SE 0:7d6abca457ee 53 for (uint32_t i=0;i<fnt_head.Tnum;i++)
mbed_Cookbook_SE 0:7d6abca457ee 54 {
mbed_Cookbook_SE 0:7d6abca457ee 55 fnt_head.Block[i].Start = font[19 + i*4];
mbed_Cookbook_SE 0:7d6abca457ee 56 fnt_head.Block[i].Start <<= 8;
mbed_Cookbook_SE 0:7d6abca457ee 57 fnt_head.Block[i].Start |= font[18 + i*4];
mbed_Cookbook_SE 0:7d6abca457ee 58 fnt_head.Block[i].End = font[21 + i*4];
mbed_Cookbook_SE 0:7d6abca457ee 59 fnt_head.Block[i].End <<= 8;
mbed_Cookbook_SE 0:7d6abca457ee 60 fnt_head.Block[i].End |= font[20 + i*4];
mbed_Cookbook_SE 0:7d6abca457ee 61 }
mbed_Cookbook_SE 0:7d6abca457ee 62 font_search_tbl[0] = 0;
mbed_Cookbook_SE 0:7d6abca457ee 63
mbed_Cookbook_SE 0:7d6abca457ee 64 for (uint32_t i=1;i<fnt_head.Tnum;i++)
mbed_Cookbook_SE 0:7d6abca457ee 65 {
mbed_Cookbook_SE 0:7d6abca457ee 66 font_search_tbl[i] = (fnt_head.Block[i-1].End - fnt_head.Block[i-1].Start + 1) + font_search_tbl[i-1];
mbed_Cookbook_SE 0:7d6abca457ee 67 }
mbed_Cookbook_SE 0:7d6abca457ee 68 };
mbed_Cookbook_SE 0:7d6abca457ee 69
mbed_Cookbook_SE 0:7d6abca457ee 70 #ifdef WANT_ABSTRACTS
mbed_Cookbook_SE 0:7d6abca457ee 71 // draw a circle outline
mbed_Cookbook_SE 0:7d6abca457ee 72 void LedPanel_GFX::drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 73 {
mbed_Cookbook_SE 0:7d6abca457ee 74 int16_t f = 1 - r;
mbed_Cookbook_SE 0:7d6abca457ee 75 int16_t ddF_x = 1;
mbed_Cookbook_SE 0:7d6abca457ee 76 int16_t ddF_y = -2 * r;
mbed_Cookbook_SE 0:7d6abca457ee 77 int16_t x = 0;
mbed_Cookbook_SE 0:7d6abca457ee 78 int16_t y = r;
mbed_Cookbook_SE 0:7d6abca457ee 79
mbed_Cookbook_SE 0:7d6abca457ee 80 drawPixel(x0, y0+r, color);
mbed_Cookbook_SE 0:7d6abca457ee 81 drawPixel(x0, y0-r, color);
mbed_Cookbook_SE 0:7d6abca457ee 82 drawPixel(x0+r, y0, color);
mbed_Cookbook_SE 0:7d6abca457ee 83 drawPixel(x0-r, y0, color);
mbed_Cookbook_SE 0:7d6abca457ee 84
mbed_Cookbook_SE 0:7d6abca457ee 85 while (x<y)
mbed_Cookbook_SE 0:7d6abca457ee 86 {
mbed_Cookbook_SE 0:7d6abca457ee 87 if (f >= 0)
mbed_Cookbook_SE 0:7d6abca457ee 88 {
mbed_Cookbook_SE 0:7d6abca457ee 89 y--;
mbed_Cookbook_SE 0:7d6abca457ee 90 ddF_y += 2;
mbed_Cookbook_SE 0:7d6abca457ee 91 f += ddF_y;
mbed_Cookbook_SE 0:7d6abca457ee 92 }
mbed_Cookbook_SE 0:7d6abca457ee 93 x++;
mbed_Cookbook_SE 0:7d6abca457ee 94 ddF_x += 2;
mbed_Cookbook_SE 0:7d6abca457ee 95 f += ddF_x;
mbed_Cookbook_SE 0:7d6abca457ee 96
mbed_Cookbook_SE 0:7d6abca457ee 97 drawPixel(x0 + x, y0 + y, color);
mbed_Cookbook_SE 0:7d6abca457ee 98 drawPixel(x0 - x, y0 + y, color);
mbed_Cookbook_SE 0:7d6abca457ee 99 drawPixel(x0 + x, y0 - y, color);
mbed_Cookbook_SE 0:7d6abca457ee 100 drawPixel(x0 - x, y0 - y, color);
mbed_Cookbook_SE 0:7d6abca457ee 101 drawPixel(x0 + y, y0 + x, color);
mbed_Cookbook_SE 0:7d6abca457ee 102 drawPixel(x0 - y, y0 + x, color);
mbed_Cookbook_SE 0:7d6abca457ee 103 drawPixel(x0 + y, y0 - x, color);
mbed_Cookbook_SE 0:7d6abca457ee 104 drawPixel(x0 - y, y0 - x, color);
mbed_Cookbook_SE 0:7d6abca457ee 105 }
mbed_Cookbook_SE 0:7d6abca457ee 106 }
mbed_Cookbook_SE 0:7d6abca457ee 107
mbed_Cookbook_SE 0:7d6abca457ee 108 void LedPanel_GFX::drawCircleHelper( int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 109 {
mbed_Cookbook_SE 0:7d6abca457ee 110 int16_t f = 1 - r;
mbed_Cookbook_SE 0:7d6abca457ee 111 int16_t ddF_x = 1;
mbed_Cookbook_SE 0:7d6abca457ee 112 int16_t ddF_y = -2 * r;
mbed_Cookbook_SE 0:7d6abca457ee 113 int16_t x = 0;
mbed_Cookbook_SE 0:7d6abca457ee 114 int16_t y = r;
mbed_Cookbook_SE 0:7d6abca457ee 115
mbed_Cookbook_SE 0:7d6abca457ee 116 while (x<y)
mbed_Cookbook_SE 0:7d6abca457ee 117 {
mbed_Cookbook_SE 0:7d6abca457ee 118 if (f >= 0)
mbed_Cookbook_SE 0:7d6abca457ee 119 {
mbed_Cookbook_SE 0:7d6abca457ee 120 y--;
mbed_Cookbook_SE 0:7d6abca457ee 121 ddF_y += 2;
mbed_Cookbook_SE 0:7d6abca457ee 122 f += ddF_y;
mbed_Cookbook_SE 0:7d6abca457ee 123 }
mbed_Cookbook_SE 0:7d6abca457ee 124 x++;
mbed_Cookbook_SE 0:7d6abca457ee 125 ddF_x += 2;
mbed_Cookbook_SE 0:7d6abca457ee 126 f += ddF_x;
mbed_Cookbook_SE 0:7d6abca457ee 127
mbed_Cookbook_SE 0:7d6abca457ee 128 if (cornername & 0x4)
mbed_Cookbook_SE 0:7d6abca457ee 129 {
mbed_Cookbook_SE 0:7d6abca457ee 130 drawPixel(x0 + x, y0 + y, color);
mbed_Cookbook_SE 0:7d6abca457ee 131 drawPixel(x0 + y, y0 + x, color);
mbed_Cookbook_SE 0:7d6abca457ee 132 }
mbed_Cookbook_SE 0:7d6abca457ee 133
mbed_Cookbook_SE 0:7d6abca457ee 134 if (cornername & 0x2)
mbed_Cookbook_SE 0:7d6abca457ee 135 {
mbed_Cookbook_SE 0:7d6abca457ee 136 drawPixel(x0 + x, y0 - y, color);
mbed_Cookbook_SE 0:7d6abca457ee 137 drawPixel(x0 + y, y0 - x, color);
mbed_Cookbook_SE 0:7d6abca457ee 138 }
mbed_Cookbook_SE 0:7d6abca457ee 139
mbed_Cookbook_SE 0:7d6abca457ee 140 if (cornername & 0x8)
mbed_Cookbook_SE 0:7d6abca457ee 141 {
mbed_Cookbook_SE 0:7d6abca457ee 142 drawPixel(x0 - y, y0 + x, color);
mbed_Cookbook_SE 0:7d6abca457ee 143 drawPixel(x0 - x, y0 + y, color);
mbed_Cookbook_SE 0:7d6abca457ee 144 }
mbed_Cookbook_SE 0:7d6abca457ee 145
mbed_Cookbook_SE 0:7d6abca457ee 146 if (cornername & 0x1)
mbed_Cookbook_SE 0:7d6abca457ee 147 {
mbed_Cookbook_SE 0:7d6abca457ee 148 drawPixel(x0 - y, y0 - x, color);
mbed_Cookbook_SE 0:7d6abca457ee 149 drawPixel(x0 - x, y0 - y, color);
mbed_Cookbook_SE 0:7d6abca457ee 150 }
mbed_Cookbook_SE 0:7d6abca457ee 151 }
mbed_Cookbook_SE 0:7d6abca457ee 152 }
mbed_Cookbook_SE 0:7d6abca457ee 153
mbed_Cookbook_SE 0:7d6abca457ee 154 void LedPanel_GFX::fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 155 {
mbed_Cookbook_SE 0:7d6abca457ee 156 drawFastVLine(x0, y0-r, 2*r+1, color);
mbed_Cookbook_SE 0:7d6abca457ee 157 fillCircleHelper(x0, y0, r, 3, 0, color);
mbed_Cookbook_SE 0:7d6abca457ee 158 }
mbed_Cookbook_SE 0:7d6abca457ee 159
mbed_Cookbook_SE 0:7d6abca457ee 160 // used to do circles and roundrects!
mbed_Cookbook_SE 0:7d6abca457ee 161 void LedPanel_GFX::fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 162 {
mbed_Cookbook_SE 0:7d6abca457ee 163 int16_t f = 1 - r;
mbed_Cookbook_SE 0:7d6abca457ee 164 int16_t ddF_x = 1;
mbed_Cookbook_SE 0:7d6abca457ee 165 int16_t ddF_y = -2 * r;
mbed_Cookbook_SE 0:7d6abca457ee 166 int16_t x = 0;
mbed_Cookbook_SE 0:7d6abca457ee 167 int16_t y = r;
mbed_Cookbook_SE 0:7d6abca457ee 168
mbed_Cookbook_SE 0:7d6abca457ee 169 while (x<y)
mbed_Cookbook_SE 0:7d6abca457ee 170 {
mbed_Cookbook_SE 0:7d6abca457ee 171 if (f >= 0)
mbed_Cookbook_SE 0:7d6abca457ee 172 {
mbed_Cookbook_SE 0:7d6abca457ee 173 y--;
mbed_Cookbook_SE 0:7d6abca457ee 174 ddF_y += 2;
mbed_Cookbook_SE 0:7d6abca457ee 175 f += ddF_y;
mbed_Cookbook_SE 0:7d6abca457ee 176 }
mbed_Cookbook_SE 0:7d6abca457ee 177 x++;
mbed_Cookbook_SE 0:7d6abca457ee 178 ddF_x += 2;
mbed_Cookbook_SE 0:7d6abca457ee 179 f += ddF_x;
mbed_Cookbook_SE 0:7d6abca457ee 180
mbed_Cookbook_SE 0:7d6abca457ee 181 if (cornername & 0x1)
mbed_Cookbook_SE 0:7d6abca457ee 182 {
mbed_Cookbook_SE 0:7d6abca457ee 183 drawFastVLine(x0+x, y0-y, 2*y+1+delta, color);
mbed_Cookbook_SE 0:7d6abca457ee 184 drawFastVLine(x0+y, y0-x, 2*x+1+delta, color);
mbed_Cookbook_SE 0:7d6abca457ee 185 }
mbed_Cookbook_SE 0:7d6abca457ee 186
mbed_Cookbook_SE 0:7d6abca457ee 187 if (cornername & 0x2)
mbed_Cookbook_SE 0:7d6abca457ee 188 {
mbed_Cookbook_SE 0:7d6abca457ee 189 drawFastVLine(x0-x, y0-y, 2*y+1+delta, color);
mbed_Cookbook_SE 0:7d6abca457ee 190 drawFastVLine(x0-y, y0-x, 2*x+1+delta, color);
mbed_Cookbook_SE 0:7d6abca457ee 191 }
mbed_Cookbook_SE 0:7d6abca457ee 192 }
mbed_Cookbook_SE 0:7d6abca457ee 193 }
mbed_Cookbook_SE 0:7d6abca457ee 194
mbed_Cookbook_SE 0:7d6abca457ee 195 // bresenham's algorithm - thx wikpedia
mbed_Cookbook_SE 0:7d6abca457ee 196 void LedPanel_GFX::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 197 {
mbed_Cookbook_SE 0:7d6abca457ee 198 int16_t steep = abs(y1 - y0) > abs(x1 - x0);
mbed_Cookbook_SE 0:7d6abca457ee 199
mbed_Cookbook_SE 0:7d6abca457ee 200 if (steep)
mbed_Cookbook_SE 0:7d6abca457ee 201 {
mbed_Cookbook_SE 0:7d6abca457ee 202 swap(x0, y0);
mbed_Cookbook_SE 0:7d6abca457ee 203 swap(x1, y1);
mbed_Cookbook_SE 0:7d6abca457ee 204 }
mbed_Cookbook_SE 0:7d6abca457ee 205
mbed_Cookbook_SE 0:7d6abca457ee 206 if (x0 > x1)
mbed_Cookbook_SE 0:7d6abca457ee 207 {
mbed_Cookbook_SE 0:7d6abca457ee 208 swap(x0, x1);
mbed_Cookbook_SE 0:7d6abca457ee 209 swap(y0, y1);
mbed_Cookbook_SE 0:7d6abca457ee 210 }
mbed_Cookbook_SE 0:7d6abca457ee 211
mbed_Cookbook_SE 0:7d6abca457ee 212 int16_t dx, dy;
mbed_Cookbook_SE 0:7d6abca457ee 213 dx = x1 - x0;
mbed_Cookbook_SE 0:7d6abca457ee 214 dy = abs(y1 - y0);
mbed_Cookbook_SE 0:7d6abca457ee 215
mbed_Cookbook_SE 0:7d6abca457ee 216 int16_t err = dx / 2;
mbed_Cookbook_SE 0:7d6abca457ee 217 int16_t ystep;
mbed_Cookbook_SE 0:7d6abca457ee 218
mbed_Cookbook_SE 0:7d6abca457ee 219 if (y0 < y1)
mbed_Cookbook_SE 0:7d6abca457ee 220 ystep = 1;
mbed_Cookbook_SE 0:7d6abca457ee 221 else
mbed_Cookbook_SE 0:7d6abca457ee 222 ystep = -1;
mbed_Cookbook_SE 0:7d6abca457ee 223
mbed_Cookbook_SE 0:7d6abca457ee 224 for (; x0<=x1; x0++)
mbed_Cookbook_SE 0:7d6abca457ee 225 {
mbed_Cookbook_SE 0:7d6abca457ee 226 if (steep)
mbed_Cookbook_SE 0:7d6abca457ee 227 drawPixel(y0, x0, color);
mbed_Cookbook_SE 0:7d6abca457ee 228 else
mbed_Cookbook_SE 0:7d6abca457ee 229 drawPixel(x0, y0, color);
mbed_Cookbook_SE 0:7d6abca457ee 230
mbed_Cookbook_SE 0:7d6abca457ee 231 err -= dy;
mbed_Cookbook_SE 0:7d6abca457ee 232 if (err < 0)
mbed_Cookbook_SE 0:7d6abca457ee 233 {
mbed_Cookbook_SE 0:7d6abca457ee 234 y0 += ystep;
mbed_Cookbook_SE 0:7d6abca457ee 235 err += dx;
mbed_Cookbook_SE 0:7d6abca457ee 236 }
mbed_Cookbook_SE 0:7d6abca457ee 237 }
mbed_Cookbook_SE 0:7d6abca457ee 238 }
mbed_Cookbook_SE 0:7d6abca457ee 239
mbed_Cookbook_SE 0:7d6abca457ee 240
mbed_Cookbook_SE 0:7d6abca457ee 241 // draw a rectangle
mbed_Cookbook_SE 0:7d6abca457ee 242 void LedPanel_GFX::drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 243 {
mbed_Cookbook_SE 0:7d6abca457ee 244 drawFastHLine(x, y, w, color);
mbed_Cookbook_SE 0:7d6abca457ee 245 drawFastHLine(x, y+h-1, w, color);
mbed_Cookbook_SE 0:7d6abca457ee 246 drawFastVLine(x, y, h, color);
mbed_Cookbook_SE 0:7d6abca457ee 247 drawFastVLine(x+w-1, y, h, color);
mbed_Cookbook_SE 0:7d6abca457ee 248 }
mbed_Cookbook_SE 0:7d6abca457ee 249
mbed_Cookbook_SE 0:7d6abca457ee 250 void LedPanel_GFX::drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 251 {
mbed_Cookbook_SE 0:7d6abca457ee 252 // stupidest version - update in subclasses if desired!
mbed_Cookbook_SE 0:7d6abca457ee 253 drawLine(x, y, x, y+h-1, color);
mbed_Cookbook_SE 0:7d6abca457ee 254 }
mbed_Cookbook_SE 0:7d6abca457ee 255
mbed_Cookbook_SE 0:7d6abca457ee 256 void LedPanel_GFX::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 257 {
mbed_Cookbook_SE 0:7d6abca457ee 258 // stupidest version - update in subclasses if desired!
mbed_Cookbook_SE 0:7d6abca457ee 259 drawLine(x, y, x+w-1, y, color);
mbed_Cookbook_SE 0:7d6abca457ee 260 }
mbed_Cookbook_SE 0:7d6abca457ee 261
mbed_Cookbook_SE 0:7d6abca457ee 262 void LedPanel_GFX::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 263 {
mbed_Cookbook_SE 0:7d6abca457ee 264 // stupidest version - update in subclasses if desired!
mbed_Cookbook_SE 0:7d6abca457ee 265 for (int16_t i=x; i<x+w; i++)
mbed_Cookbook_SE 0:7d6abca457ee 266 drawFastVLine(i, y, h, color);
mbed_Cookbook_SE 0:7d6abca457ee 267 }
mbed_Cookbook_SE 0:7d6abca457ee 268
mbed_Cookbook_SE 0:7d6abca457ee 269
mbed_Cookbook_SE 0:7d6abca457ee 270 void LedPanel_GFX::fillScreen(uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 271 {
mbed_Cookbook_SE 0:7d6abca457ee 272 fillRect(0, 0, _width, _height, color);
mbed_Cookbook_SE 0:7d6abca457ee 273 }
mbed_Cookbook_SE 0:7d6abca457ee 274
mbed_Cookbook_SE 0:7d6abca457ee 275 // draw a rounded rectangle!
mbed_Cookbook_SE 0:7d6abca457ee 276 void LedPanel_GFX::drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 277 {
mbed_Cookbook_SE 0:7d6abca457ee 278 // smarter version
mbed_Cookbook_SE 0:7d6abca457ee 279 drawFastHLine(x+r , y , w-2*r, color); // Top
mbed_Cookbook_SE 0:7d6abca457ee 280 drawFastHLine(x+r , y+h-1, w-2*r, color); // Bottom
mbed_Cookbook_SE 0:7d6abca457ee 281 drawFastVLine( x , y+r , h-2*r, color); // Left
mbed_Cookbook_SE 0:7d6abca457ee 282 drawFastVLine( x+w-1, y+r , h-2*r, color); // Right
mbed_Cookbook_SE 0:7d6abca457ee 283 // draw four corners
mbed_Cookbook_SE 0:7d6abca457ee 284 drawCircleHelper(x+r , y+r , r, 1, color);
mbed_Cookbook_SE 0:7d6abca457ee 285 drawCircleHelper(x+w-r-1, y+r , r, 2, color);
mbed_Cookbook_SE 0:7d6abca457ee 286 drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color);
mbed_Cookbook_SE 0:7d6abca457ee 287 drawCircleHelper(x+r , y+h-r-1, r, 8, color);
mbed_Cookbook_SE 0:7d6abca457ee 288 }
mbed_Cookbook_SE 0:7d6abca457ee 289
mbed_Cookbook_SE 0:7d6abca457ee 290 // fill a rounded rectangle!
mbed_Cookbook_SE 0:7d6abca457ee 291 void LedPanel_GFX::fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 292 {
mbed_Cookbook_SE 0:7d6abca457ee 293 // smarter version
mbed_Cookbook_SE 0:7d6abca457ee 294 fillRect(x+r, y, w-2*r, h, color);
mbed_Cookbook_SE 0:7d6abca457ee 295
mbed_Cookbook_SE 0:7d6abca457ee 296 // draw four corners
mbed_Cookbook_SE 0:7d6abca457ee 297 fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color);
mbed_Cookbook_SE 0:7d6abca457ee 298 fillCircleHelper(x+r , y+r, r, 2, h-2*r-1, color);
mbed_Cookbook_SE 0:7d6abca457ee 299 }
mbed_Cookbook_SE 0:7d6abca457ee 300
mbed_Cookbook_SE 0:7d6abca457ee 301 // draw a triangle!
mbed_Cookbook_SE 0:7d6abca457ee 302 void LedPanel_GFX::drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 303 {
mbed_Cookbook_SE 0:7d6abca457ee 304 drawLine(x0, y0, x1, y1, color);
mbed_Cookbook_SE 0:7d6abca457ee 305 drawLine(x1, y1, x2, y2, color);
mbed_Cookbook_SE 0:7d6abca457ee 306 drawLine(x2, y2, x0, y0, color);
mbed_Cookbook_SE 0:7d6abca457ee 307 }
mbed_Cookbook_SE 0:7d6abca457ee 308
mbed_Cookbook_SE 0:7d6abca457ee 309 // fill a triangle!
mbed_Cookbook_SE 0:7d6abca457ee 310 void LedPanel_GFX::fillTriangle ( int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 311 {
mbed_Cookbook_SE 0:7d6abca457ee 312 int16_t a, b, y, last;
mbed_Cookbook_SE 0:7d6abca457ee 313
mbed_Cookbook_SE 0:7d6abca457ee 314 // Sort coordinates by Y order (y2 >= y1 >= y0)
mbed_Cookbook_SE 0:7d6abca457ee 315 if (y0 > y1)
mbed_Cookbook_SE 0:7d6abca457ee 316 swap(y0, y1); swap(x0, x1);
mbed_Cookbook_SE 0:7d6abca457ee 317
mbed_Cookbook_SE 0:7d6abca457ee 318 if (y1 > y2)
mbed_Cookbook_SE 0:7d6abca457ee 319 swap(y2, y1); swap(x2, x1);
mbed_Cookbook_SE 0:7d6abca457ee 320
mbed_Cookbook_SE 0:7d6abca457ee 321 if (y0 > y1)
mbed_Cookbook_SE 0:7d6abca457ee 322 swap(y0, y1); swap(x0, x1);
mbed_Cookbook_SE 0:7d6abca457ee 323
mbed_Cookbook_SE 0:7d6abca457ee 324
mbed_Cookbook_SE 0:7d6abca457ee 325 if(y0 == y2)
mbed_Cookbook_SE 0:7d6abca457ee 326 { // Handle awkward all-on-same-line case as its own thing
mbed_Cookbook_SE 0:7d6abca457ee 327 a = b = x0;
mbed_Cookbook_SE 0:7d6abca457ee 328 if(x1 < a)
mbed_Cookbook_SE 0:7d6abca457ee 329 a = x1;
mbed_Cookbook_SE 0:7d6abca457ee 330 else if(x1 > b)
mbed_Cookbook_SE 0:7d6abca457ee 331 b = x1;
mbed_Cookbook_SE 0:7d6abca457ee 332
mbed_Cookbook_SE 0:7d6abca457ee 333 if(x2 < a)
mbed_Cookbook_SE 0:7d6abca457ee 334 a = x2;
mbed_Cookbook_SE 0:7d6abca457ee 335 else if(x2 > b) b = x2;
mbed_Cookbook_SE 0:7d6abca457ee 336 drawFastHLine(a, y0, b-a+1, color);
mbed_Cookbook_SE 0:7d6abca457ee 337 return;
mbed_Cookbook_SE 0:7d6abca457ee 338 }
mbed_Cookbook_SE 0:7d6abca457ee 339
mbed_Cookbook_SE 0:7d6abca457ee 340 int16_t
mbed_Cookbook_SE 0:7d6abca457ee 341 dx01 = x1 - x0,
mbed_Cookbook_SE 0:7d6abca457ee 342 dy01 = y1 - y0,
mbed_Cookbook_SE 0:7d6abca457ee 343 dx02 = x2 - x0,
mbed_Cookbook_SE 0:7d6abca457ee 344 dy02 = y2 - y0,
mbed_Cookbook_SE 0:7d6abca457ee 345 dx12 = x2 - x1,
mbed_Cookbook_SE 0:7d6abca457ee 346 dy12 = y2 - y1,
mbed_Cookbook_SE 0:7d6abca457ee 347 sa = 0,
mbed_Cookbook_SE 0:7d6abca457ee 348 sb = 0;
mbed_Cookbook_SE 0:7d6abca457ee 349
mbed_Cookbook_SE 0:7d6abca457ee 350 // For upper part of triangle, find scanline crossings for segments
mbed_Cookbook_SE 0:7d6abca457ee 351 // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1
mbed_Cookbook_SE 0:7d6abca457ee 352 // is included here (and second loop will be skipped, avoiding a /0
mbed_Cookbook_SE 0:7d6abca457ee 353 // error there), otherwise scanline y1 is skipped here and handled
mbed_Cookbook_SE 0:7d6abca457ee 354 // in the second loop...which also avoids a /0 error here if y0=y1
mbed_Cookbook_SE 0:7d6abca457ee 355 // (flat-topped triangle).
mbed_Cookbook_SE 0:7d6abca457ee 356 if(y1 == y2)
mbed_Cookbook_SE 0:7d6abca457ee 357 last = y1; // Include y1 scanline
mbed_Cookbook_SE 0:7d6abca457ee 358 else
mbed_Cookbook_SE 0:7d6abca457ee 359 last = y1-1; // Skip it
mbed_Cookbook_SE 0:7d6abca457ee 360
mbed_Cookbook_SE 0:7d6abca457ee 361 for(y=y0; y<=last; y++)
mbed_Cookbook_SE 0:7d6abca457ee 362 {
mbed_Cookbook_SE 0:7d6abca457ee 363 a = x0 + sa / dy01;
mbed_Cookbook_SE 0:7d6abca457ee 364 b = x0 + sb / dy02;
mbed_Cookbook_SE 0:7d6abca457ee 365 sa += dx01;
mbed_Cookbook_SE 0:7d6abca457ee 366 sb += dx02;
mbed_Cookbook_SE 0:7d6abca457ee 367 /* longhand:
mbed_Cookbook_SE 0:7d6abca457ee 368 a = x0 + (x1 - x0) * (y - y0) / (y1 - y0);
mbed_Cookbook_SE 0:7d6abca457ee 369 b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
mbed_Cookbook_SE 0:7d6abca457ee 370 */
mbed_Cookbook_SE 0:7d6abca457ee 371 if(a > b)
mbed_Cookbook_SE 0:7d6abca457ee 372 swap(a,b);
mbed_Cookbook_SE 0:7d6abca457ee 373 drawFastHLine(a, y, b-a+1, color);
mbed_Cookbook_SE 0:7d6abca457ee 374 }
mbed_Cookbook_SE 0:7d6abca457ee 375
mbed_Cookbook_SE 0:7d6abca457ee 376 // For lower part of triangle, find scanline crossings for segments
mbed_Cookbook_SE 0:7d6abca457ee 377 // 0-2 and 1-2. This loop is skipped if y1=y2.
mbed_Cookbook_SE 0:7d6abca457ee 378 sa = dx12 * (y - y1);
mbed_Cookbook_SE 0:7d6abca457ee 379 sb = dx02 * (y - y0);
mbed_Cookbook_SE 0:7d6abca457ee 380 for(; y<=y2; y++)
mbed_Cookbook_SE 0:7d6abca457ee 381 {
mbed_Cookbook_SE 0:7d6abca457ee 382 a = x1 + sa / dy12;
mbed_Cookbook_SE 0:7d6abca457ee 383 b = x0 + sb / dy02;
mbed_Cookbook_SE 0:7d6abca457ee 384 sa += dx12;
mbed_Cookbook_SE 0:7d6abca457ee 385 sb += dx02;
mbed_Cookbook_SE 0:7d6abca457ee 386 /* longhand:
mbed_Cookbook_SE 0:7d6abca457ee 387 a = x1 + (x2 - x1) * (y - y1) / (y2 - y1);
mbed_Cookbook_SE 0:7d6abca457ee 388 b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
mbed_Cookbook_SE 0:7d6abca457ee 389 */
mbed_Cookbook_SE 0:7d6abca457ee 390 if(a > b)
mbed_Cookbook_SE 0:7d6abca457ee 391 swap(a,b);
mbed_Cookbook_SE 0:7d6abca457ee 392 drawFastHLine(a, y, b-a+1, color);
mbed_Cookbook_SE 0:7d6abca457ee 393 }
mbed_Cookbook_SE 0:7d6abca457ee 394 }
mbed_Cookbook_SE 0:7d6abca457ee 395 #endif
mbed_Cookbook_SE 0:7d6abca457ee 396
mbed_Cookbook_SE 0:7d6abca457ee 397 void LedPanel_GFX::drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color)
mbed_Cookbook_SE 0:7d6abca457ee 398 {
mbed_Cookbook_SE 0:7d6abca457ee 399 for (int16_t j=0; j<h; j++)
mbed_Cookbook_SE 0:7d6abca457ee 400 {
mbed_Cookbook_SE 0:7d6abca457ee 401 for (int16_t i=0; i<w; i++ )
mbed_Cookbook_SE 0:7d6abca457ee 402 {
mbed_Cookbook_SE 0:7d6abca457ee 403 if (bitmap[i + (j/8)*w] & _BV(j%8))
mbed_Cookbook_SE 0:7d6abca457ee 404 drawPixel(x+i, y+j, color);
mbed_Cookbook_SE 0:7d6abca457ee 405 }
mbed_Cookbook_SE 0:7d6abca457ee 406 }
mbed_Cookbook_SE 0:7d6abca457ee 407 }
mbed_Cookbook_SE 0:7d6abca457ee 408
mbed_Cookbook_SE 0:7d6abca457ee 409 size_t LedPanel_GFX::writeChar(uint8_t c)
mbed_Cookbook_SE 0:7d6abca457ee 410 {
mbed_Cookbook_SE 0:7d6abca457ee 411 static unsigned char tmp[2] = { 0 , 0 };
mbed_Cookbook_SE 0:7d6abca457ee 412 static int flag = 0;
mbed_Cookbook_SE 0:7d6abca457ee 413
mbed_Cookbook_SE 0:7d6abca457ee 414 if (c == '\n')
mbed_Cookbook_SE 0:7d6abca457ee 415 {
mbed_Cookbook_SE 0:7d6abca457ee 416 cursor_y += textsize*8;
mbed_Cookbook_SE 0:7d6abca457ee 417 cursor_x = 0;
mbed_Cookbook_SE 0:7d6abca457ee 418 }
mbed_Cookbook_SE 0:7d6abca457ee 419 else if (c == '\r')
mbed_Cookbook_SE 0:7d6abca457ee 420 {
mbed_Cookbook_SE 0:7d6abca457ee 421 cursor_x = 0;
mbed_Cookbook_SE 0:7d6abca457ee 422 }
mbed_Cookbook_SE 0:7d6abca457ee 423 else if(flag == 1)
mbed_Cookbook_SE 0:7d6abca457ee 424 {
mbed_Cookbook_SE 0:7d6abca457ee 425 flag = 0;
mbed_Cookbook_SE 0:7d6abca457ee 426 tmp[1] = c;
mbed_Cookbook_SE 0:7d6abca457ee 427 draw2Char(cursor_x, cursor_y, tmp, textcolor, textbgcolor, textsize);
mbed_Cookbook_SE 0:7d6abca457ee 428 cursor_x += textsize*8;
mbed_Cookbook_SE 0:7d6abca457ee 429 if (wrap && (cursor_x > (_width - textsize*8)))
mbed_Cookbook_SE 0:7d6abca457ee 430 {
mbed_Cookbook_SE 0:7d6abca457ee 431 cursor_y += textsize*8;
mbed_Cookbook_SE 0:7d6abca457ee 432 cursor_x = 0;
mbed_Cookbook_SE 0:7d6abca457ee 433 }
mbed_Cookbook_SE 0:7d6abca457ee 434 }
mbed_Cookbook_SE 0:7d6abca457ee 435 else if((c >= 0x81) && (c <= 0xea))
mbed_Cookbook_SE 0:7d6abca457ee 436 {
mbed_Cookbook_SE 0:7d6abca457ee 437 tmp[0] = c;
mbed_Cookbook_SE 0:7d6abca457ee 438 flag = 1;
mbed_Cookbook_SE 0:7d6abca457ee 439 }
mbed_Cookbook_SE 0:7d6abca457ee 440 else
mbed_Cookbook_SE 0:7d6abca457ee 441 {
mbed_Cookbook_SE 0:7d6abca457ee 442 drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize);
mbed_Cookbook_SE 0:7d6abca457ee 443 cursor_x += textsize*6;
mbed_Cookbook_SE 0:7d6abca457ee 444 if (wrap && (cursor_x > (_width - textsize*6)))
mbed_Cookbook_SE 0:7d6abca457ee 445 {
mbed_Cookbook_SE 0:7d6abca457ee 446 cursor_y += textsize*8;
mbed_Cookbook_SE 0:7d6abca457ee 447 cursor_x = 0;
mbed_Cookbook_SE 0:7d6abca457ee 448 }
mbed_Cookbook_SE 0:7d6abca457ee 449 }
mbed_Cookbook_SE 0:7d6abca457ee 450 return 1;
mbed_Cookbook_SE 0:7d6abca457ee 451 }
mbed_Cookbook_SE 0:7d6abca457ee 452
mbed_Cookbook_SE 0:7d6abca457ee 453 // draw a character
mbed_Cookbook_SE 0:7d6abca457ee 454 void LedPanel_GFX::drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size)
mbed_Cookbook_SE 0:7d6abca457ee 455 {
mbed_Cookbook_SE 0:7d6abca457ee 456 if(
mbed_Cookbook_SE 0:7d6abca457ee 457 (x >= _width) || // Clip right
mbed_Cookbook_SE 0:7d6abca457ee 458 (y >= _height) || // Clip bottom
mbed_Cookbook_SE 0:7d6abca457ee 459 ((x + 5 * size - 1) < 0) || // Clip left
mbed_Cookbook_SE 0:7d6abca457ee 460 ((y + 8 * size - 1) < 0) // Clip top
mbed_Cookbook_SE 0:7d6abca457ee 461 )
mbed_Cookbook_SE 0:7d6abca457ee 462 return;
mbed_Cookbook_SE 0:7d6abca457ee 463
mbed_Cookbook_SE 0:7d6abca457ee 464 for (int8_t i=0; i<6; i++ )
mbed_Cookbook_SE 0:7d6abca457ee 465 {
mbed_Cookbook_SE 0:7d6abca457ee 466 uint8_t line = 0;
mbed_Cookbook_SE 0:7d6abca457ee 467
mbed_Cookbook_SE 0:7d6abca457ee 468 if (i == 5)
mbed_Cookbook_SE 0:7d6abca457ee 469 line = 0x0;
mbed_Cookbook_SE 0:7d6abca457ee 470 else
mbed_Cookbook_SE 0:7d6abca457ee 471 line = s_apxFont5x8[(c*5)+i];
mbed_Cookbook_SE 0:7d6abca457ee 472
mbed_Cookbook_SE 0:7d6abca457ee 473 for (int8_t j = 0; j<8; j++)
mbed_Cookbook_SE 0:7d6abca457ee 474 {
mbed_Cookbook_SE 0:7d6abca457ee 475 if (line & 0x1)
mbed_Cookbook_SE 0:7d6abca457ee 476 {
mbed_Cookbook_SE 0:7d6abca457ee 477 if (size == 1) // default size
mbed_Cookbook_SE 0:7d6abca457ee 478 drawPixel(x+i, y+j, color);
mbed_Cookbook_SE 0:7d6abca457ee 479 #ifdef WANT_ABSTRACTS
mbed_Cookbook_SE 0:7d6abca457ee 480 else // big size
mbed_Cookbook_SE 0:7d6abca457ee 481 fillRect(x+(i*size), y+(j*size), size, size, color);
mbed_Cookbook_SE 0:7d6abca457ee 482 #endif
mbed_Cookbook_SE 0:7d6abca457ee 483 }
mbed_Cookbook_SE 0:7d6abca457ee 484 else if (bg != color)
mbed_Cookbook_SE 0:7d6abca457ee 485 {
mbed_Cookbook_SE 0:7d6abca457ee 486 if (size == 1) // default size
mbed_Cookbook_SE 0:7d6abca457ee 487 drawPixel(x+i, y+j, bg);
mbed_Cookbook_SE 0:7d6abca457ee 488 #ifdef WANT_ABSTRACTS
mbed_Cookbook_SE 0:7d6abca457ee 489 else // big size
mbed_Cookbook_SE 0:7d6abca457ee 490 fillRect(x+i*size, y+j*size, size, size, bg);
mbed_Cookbook_SE 0:7d6abca457ee 491 #endif
mbed_Cookbook_SE 0:7d6abca457ee 492 }
mbed_Cookbook_SE 0:7d6abca457ee 493 line >>= 1;
mbed_Cookbook_SE 0:7d6abca457ee 494 }
mbed_Cookbook_SE 0:7d6abca457ee 495 }
mbed_Cookbook_SE 0:7d6abca457ee 496 }
mbed_Cookbook_SE 0:7d6abca457ee 497
mbed_Cookbook_SE 0:7d6abca457ee 498 int32_t LedPanel_GFX::search_font_area( uint16_t code )
mbed_Cookbook_SE 0:7d6abca457ee 499 {
mbed_Cookbook_SE 0:7d6abca457ee 500
mbed_Cookbook_SE 0:7d6abca457ee 501 for(uint16_t i=0;i<fnt_head.Tnum;i++)
mbed_Cookbook_SE 0:7d6abca457ee 502 {
mbed_Cookbook_SE 0:7d6abca457ee 503 if( (fnt_head.Block[i].Start<=code) && (fnt_head.Block[i].End>=code) )
mbed_Cookbook_SE 0:7d6abca457ee 504 {
mbed_Cookbook_SE 0:7d6abca457ee 505 return(i);
mbed_Cookbook_SE 0:7d6abca457ee 506 }
mbed_Cookbook_SE 0:7d6abca457ee 507 }
mbed_Cookbook_SE 0:7d6abca457ee 508
mbed_Cookbook_SE 0:7d6abca457ee 509 return(-1);
mbed_Cookbook_SE 0:7d6abca457ee 510 }
mbed_Cookbook_SE 0:7d6abca457ee 511
mbed_Cookbook_SE 0:7d6abca457ee 512 int32_t LedPanel_GFX::get_font_pt( uint16_t code ,uint8_t *chr )
mbed_Cookbook_SE 0:7d6abca457ee 513 {
mbed_Cookbook_SE 0:7d6abca457ee 514 int32_t font_area;
mbed_Cookbook_SE 0:7d6abca457ee 515 int32_t offset;
mbed_Cookbook_SE 0:7d6abca457ee 516 uint32_t addr;
mbed_Cookbook_SE 0:7d6abca457ee 517
mbed_Cookbook_SE 0:7d6abca457ee 518 font_area = search_font_area(code);
mbed_Cookbook_SE 0:7d6abca457ee 519
mbed_Cookbook_SE 0:7d6abca457ee 520 if(font_area == -1)
mbed_Cookbook_SE 0:7d6abca457ee 521 {
mbed_Cookbook_SE 0:7d6abca457ee 522 code = 0x81a0;
mbed_Cookbook_SE 0:7d6abca457ee 523 font_area = search_font_area(code);
mbed_Cookbook_SE 0:7d6abca457ee 524 }
mbed_Cookbook_SE 0:7d6abca457ee 525
mbed_Cookbook_SE 0:7d6abca457ee 526 offset = (uint32_t)code - (uint32_t)fnt_head.Block[font_area].Start;
mbed_Cookbook_SE 0:7d6abca457ee 527
mbed_Cookbook_SE 0:7d6abca457ee 528 addr = ((uint32_t)font_search_tbl[font_area] + offset) * ((fnt_head.XSize >> 3) * fnt_head.YSize);
mbed_Cookbook_SE 0:7d6abca457ee 529
mbed_Cookbook_SE 0:7d6abca457ee 530 addr += font_head_size;
mbed_Cookbook_SE 0:7d6abca457ee 531
mbed_Cookbook_SE 0:7d6abca457ee 532 memcpy( chr ,&font[addr] ,8 );
mbed_Cookbook_SE 0:7d6abca457ee 533
mbed_Cookbook_SE 0:7d6abca457ee 534 return( 0 );
mbed_Cookbook_SE 0:7d6abca457ee 535 }
mbed_Cookbook_SE 0:7d6abca457ee 536
mbed_Cookbook_SE 0:7d6abca457ee 537 // draw a character
mbed_Cookbook_SE 0:7d6abca457ee 538 void LedPanel_GFX::draw2Char(int16_t x, int16_t y, unsigned char *c, uint16_t color, uint16_t bg, uint8_t size)
mbed_Cookbook_SE 0:7d6abca457ee 539 {
mbed_Cookbook_SE 0:7d6abca457ee 540 if(
mbed_Cookbook_SE 0:7d6abca457ee 541 (x >= _width) || // Clip right
mbed_Cookbook_SE 0:7d6abca457ee 542 (y >= _height) || // Clip bottom
mbed_Cookbook_SE 0:7d6abca457ee 543 ((x + 5 * size - 1) < 0) || // Clip left
mbed_Cookbook_SE 0:7d6abca457ee 544 ((y + 8 * size - 1) < 0) // Clip top
mbed_Cookbook_SE 0:7d6abca457ee 545 )
mbed_Cookbook_SE 0:7d6abca457ee 546 return;
mbed_Cookbook_SE 0:7d6abca457ee 547
mbed_Cookbook_SE 0:7d6abca457ee 548 unsigned short tmp;
mbed_Cookbook_SE 0:7d6abca457ee 549 unsigned char chr[8];
mbed_Cookbook_SE 0:7d6abca457ee 550
mbed_Cookbook_SE 0:7d6abca457ee 551 tmp = c[0];
mbed_Cookbook_SE 0:7d6abca457ee 552 tmp <<= 8;
mbed_Cookbook_SE 0:7d6abca457ee 553 tmp |= c[1];
mbed_Cookbook_SE 0:7d6abca457ee 554
mbed_Cookbook_SE 0:7d6abca457ee 555 get_font_pt(tmp,&chr[0]);
mbed_Cookbook_SE 0:7d6abca457ee 556
mbed_Cookbook_SE 0:7d6abca457ee 557 for (int8_t i=0; i<8; i++ )
mbed_Cookbook_SE 0:7d6abca457ee 558 {
mbed_Cookbook_SE 0:7d6abca457ee 559 uint8_t line = chr[i];
mbed_Cookbook_SE 0:7d6abca457ee 560
mbed_Cookbook_SE 0:7d6abca457ee 561 for (int8_t j = 0; j<8; j++)
mbed_Cookbook_SE 0:7d6abca457ee 562 {
mbed_Cookbook_SE 0:7d6abca457ee 563 if (line & 0x1)
mbed_Cookbook_SE 0:7d6abca457ee 564 {
mbed_Cookbook_SE 0:7d6abca457ee 565 drawPixel(x+(7-i), y+(7-j), color);
mbed_Cookbook_SE 0:7d6abca457ee 566 }
mbed_Cookbook_SE 0:7d6abca457ee 567 else if (bg != color)
mbed_Cookbook_SE 0:7d6abca457ee 568 {
mbed_Cookbook_SE 0:7d6abca457ee 569 drawPixel(x+(7-i), y+(7-j), bg);
mbed_Cookbook_SE 0:7d6abca457ee 570 }
mbed_Cookbook_SE 0:7d6abca457ee 571 line >>= 1;
mbed_Cookbook_SE 0:7d6abca457ee 572 }
mbed_Cookbook_SE 0:7d6abca457ee 573 }
mbed_Cookbook_SE 0:7d6abca457ee 574 }