1
Diff: Adafruit_GFX.cpp
- Revision:
- 17:c0c589ffe9bf
- Parent:
- 14:edb3c36aa1a7
diff -r 7fb1d4d3525d -r c0c589ffe9bf Adafruit_GFX.cpp --- a/Adafruit_GFX.cpp Tue Nov 11 22:08:20 2014 +0000 +++ b/Adafruit_GFX.cpp Fri Jun 17 02:24:45 2022 +0000 @@ -1,14 +1,14 @@ /*********************************** -This is a our graphics core library, for all our displays. +This is a our graphics core library, for all our displays. We'll be adapting all the -existing libaries to use this core to make updating, support +existing libaries to use this core to make updating, support and upgrading easier! -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing +Adafruit invests time and resources providing this open source code, +please support Adafruit and open-source hardware by purchasing products from Adafruit! -Written by Limor Fried/Ladyada for Adafruit Industries. +Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, check license.txt for more information All text above must be included in any redistribution ****************************************/ @@ -31,16 +31,14 @@ int16_t ddF_y = -2 * r; int16_t x = 0; int16_t y = r; - + drawPixel(x0, y0+r, color); drawPixel(x0, y0-r, color); drawPixel(x0+r, y0, color); drawPixel(x0-r, y0, color); - - while (x<y) - { - if (f >= 0) - { + + while (x<y) { + if (f >= 0) { y--; ddF_y += 2; f += ddF_y; @@ -48,7 +46,7 @@ x++; ddF_x += 2; f += ddF_x; - + drawPixel(x0 + x, y0 + y, color); drawPixel(x0 - x, y0 + y, color); drawPixel(x0 + x, y0 - y, color); @@ -67,11 +65,9 @@ int16_t ddF_y = -2 * r; int16_t x = 0; int16_t y = r; - - while (x<y) - { - if (f >= 0) - { + + while (x<y) { + if (f >= 0) { y--; ddF_y += 2; f += ddF_y; @@ -79,27 +75,23 @@ x++; ddF_x += 2; f += ddF_x; - - if (cornername & 0x4) - { + + if (cornername & 0x4) { drawPixel(x0 + x, y0 + y, color); drawPixel(x0 + y, y0 + x, color); - } + } - if (cornername & 0x2) - { + if (cornername & 0x2) { drawPixel(x0 + x, y0 - y, color); drawPixel(x0 + y, y0 - x, color); } - if (cornername & 0x8) - { + if (cornername & 0x8) { drawPixel(x0 - y, y0 + x, color); drawPixel(x0 - x, y0 + y, color); } - - if (cornername & 0x1) - { + + if (cornername & 0x1) { drawPixel(x0 - y, y0 - x, color); drawPixel(x0 - x, y0 - y, color); } @@ -120,11 +112,9 @@ int16_t ddF_y = -2 * r; int16_t x = 0; int16_t y = r; - - while (x<y) - { - if (f >= 0) - { + + while (x<y) { + if (f >= 0) { y--; ddF_y += 2; f += ddF_y; @@ -132,15 +122,13 @@ x++; ddF_x += 2; f += ddF_x; - - if (cornername & 0x1) - { + + if (cornername & 0x1) { drawFastVLine(x0+x, y0-y, 2*y+1+delta, color); drawFastVLine(x0+y, y0-x, 2*x+1+delta, color); } - if (cornername & 0x2) - { + if (cornername & 0x2) { drawFastVLine(x0-x, y0-y, 2*y+1+delta, color); drawFastVLine(x0-y, y0-x, 2*x+1+delta, color); } @@ -153,41 +141,37 @@ void Adafruit_GFX::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color) { int16_t steep = abs(y1 - y0) > abs(x1 - x0); - - if (steep) - { + + if (steep) { swap(x0, y0); swap(x1, y1); } - - if (x0 > x1) - { + + if (x0 > x1) { swap(x0, x1); swap(y0, y1); } - + int16_t dx, dy; dx = x1 - x0; dy = abs(y1 - y0); - + int16_t err = dx / 2; int16_t ystep; - + if (y0 < y1) ystep = 1; else ystep = -1; - - for (; x0<=x1; x0++) - { + + for (; x0<=x1; x0++) { if (steep) drawPixel(y0, x0, color); else drawPixel(x0, y0, color); err -= dy; - if (err < 0) - { + if (err < 0) { y0 += ystep; err += dx; } @@ -204,7 +188,7 @@ { // stupidest version - update in subclasses if desired! for (int16_t i=x; i<x+w; i++) - drawFastVLine(i, y, h, color); + drawFastVLine(i, y, h, color); } #endif @@ -233,15 +217,15 @@ void Adafruit_GFX::drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color) { // smarter version - drawFastHLine(x+r , y , w-2*r, color); // Top - drawFastHLine(x+r , y+h-1, w-2*r, color); // Bottom - drawFastVLine( x , y+r , h-2*r, color); // Left - drawFastVLine( x+w-1, y+r , h-2*r, color); // Right + drawFastHLine(x+r, y, w-2*r, color); // Top + drawFastHLine(x+r, y+h-1, w-2*r, color); // Bottom + drawFastVLine( x, y+r, h-2*r, color); // Left + drawFastVLine( x+w-1, y+r, h-2*r, color); // Right // draw four corners - drawCircleHelper(x+r , y+r , r, 1, color); - drawCircleHelper(x+w-r-1, y+r , r, 2, color); + drawCircleHelper(x+r, y+r, r, 1, color); + drawCircleHelper(x+w-r-1, y+r, r, 2, color); drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color); - drawCircleHelper(x+r , y+h-r-1, r, 8, color); + drawCircleHelper(x+r, y+h-r-1, r, 8, color); } // fill a rounded rectangle! @@ -249,10 +233,10 @@ { // smarter version fillRect(x+r, y, w-2*r, h, color); - + // draw four corners fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color); - fillCircleHelper(x+r , y+r, r, 2, h-2*r-1, color); + fillCircleHelper(x+r, y+r, r, 2, h-2*r-1, color); } // draw a triangle! @@ -267,42 +251,45 @@ void Adafruit_GFX::fillTriangle ( int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) { int16_t a, b, y, last; - + // Sort coordinates by Y order (y2 >= y1 >= y0) if (y0 > y1) - swap(y0, y1); swap(x0, x1); + swap(y0, y1); + swap(x0, x1); if (y1 > y2) - swap(y2, y1); swap(x2, x1); + swap(y2, y1); + swap(x2, x1); if (y0 > y1) - swap(y0, y1); swap(x0, x1); + swap(y0, y1); + swap(x0, x1); - - if(y0 == y2) - { // Handle awkward all-on-same-line case as its own thing + + if(y0 == y2) { + // Handle awkward all-on-same-line case as its own thing a = b = x0; if(x1 < a) a = x1; else if(x1 > b) b = x1; - + if(x2 < a) a = x2; else if(x2 > b) b = x2; - drawFastHLine(a, y0, b-a+1, color); + drawFastHLine(a, y0, b-a+1, color); return; } int16_t - dx01 = x1 - x0, - dy01 = y1 - y0, - dx02 = x2 - x0, - dy02 = y2 - y0, - dx12 = x2 - x1, - dy12 = y2 - y1, - sa = 0, - sb = 0; + dx01 = x1 - x0, + dy01 = y1 - y0, + dx02 = x2 - x0, + dy02 = y2 - y0, + dx12 = x2 - x1, + dy12 = y2 - y1, + sa = 0, + sb = 0; // For upper part of triangle, find scanline crossings for segments // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1 @@ -315,8 +302,7 @@ else last = y1-1; // Skip it - for(y=y0; y<=last; y++) - { + for(y=y0; y<=last; y++) { a = x0 + sa / dy01; b = x0 + sb / dy02; sa += dx01; @@ -334,8 +320,7 @@ // 0-2 and 1-2. This loop is skipped if y1=y2. sa = dx12 * (y - y1); sb = dx02 * (y - y0); - for(; y<=y2; y++) - { + for(; y<=y2; y++) { a = x1 + sa / dy12; b = x0 + sb / dy02; sa += dx12; @@ -352,10 +337,8 @@ void Adafruit_GFX::drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) { - for (int16_t j=0; j<h; j++) - { - for (int16_t i=0; i<w; i++ ) - { + for (int16_t j=0; j<h; j++) { + for (int16_t i=0; i<w; i++ ) { if (bitmap[i + (j/8)*w] & _BV(j%8)) drawPixel(x+i, y+j, color); } @@ -365,19 +348,15 @@ size_t Adafruit_GFX::writeChar(uint8_t c) { - if (c == '\n') - { + if (c == '\n') { cursor_y += textsize*8; cursor_x = 0; - } - else if (c == '\r') + } else if (c == '\r') cursor_x = 0; - else - { + else { drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize); cursor_x += textsize*6; - if (wrap && (cursor_x > (_width - textsize*6))) - { + if (wrap && (cursor_x > (_width - textsize*6))) { cursor_y += textsize*8; cursor_x = 0; } @@ -393,22 +372,19 @@ (y >= _height) || // Clip bottom ((x + 5 * size - 1) < 0) || // Clip left ((y + 8 * size - 1) < 0) // Clip top - ) - return; - - for (int8_t i=0; i<6; i++ ) - { + ) + return; + + for (int8_t i=0; i<6; i++ ) { uint8_t line = 0; - if (i == 5) + if (i == 5) line = 0x0; - else + else line = font[(c*5)+i]; - - for (int8_t j = 0; j<8; j++) - { - if (line & 0x1) - { + + for (int8_t j = 0; j<8; j++) { + if (line & 0x1) { #if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT) if (size == 1) // default size drawPixel(x+i, y+j, color); @@ -417,9 +393,7 @@ #else drawPixel(x+i, y+j, color); #endif - } - else if (bg != color) - { + } else if (bg != color) { #if defined(GFX_WANT_ABSTRACTS) || defined(GFX_SIZEABLE_TEXT) if (size == 1) // default size drawPixel(x+i, y+j, bg); @@ -438,8 +412,7 @@ { x %= 4; // cant be higher than 3 rotation = x; - switch (x) - { + switch (x) { case 0: case 2: _width = _rawWidth; @@ -452,3 +425,25 @@ break; } } + +void Adafruit_GFX::drawX11BitMap(const uint8_t bitmap[],uint16_t bitMapWidth,uint16_t bitMapSize,uint16_t posX,uint16_t posY) +{ + int16_t x1 = posX; + int16_t y1 = posY; + for(unsigned int i=0; i<bitMapSize; i++) { + uint8_t val = bitmap[i]; + for(int j=0; j<8; j++) { + uint16_t pixColor; + if(val>>j & 0x01) + pixColor = 1; + else + pixColor = 0; + drawPixel(x1,y1, pixColor); + x1 = x1 + 1; + if(x1 == posX + bitMapWidth) { + x1 = posX; + y1 = y1 + 1; + } + } + } +} \ No newline at end of file