Browse Source

Extra-persnickety declarations in PROGMEM bitmap functions

Phillip Burgess 8 years ago
parent
commit
7589ecaf0f
3 changed files with 23 additions and 16 deletions
  1. 13 8
      Adafruit_GFX.cpp
  2. 9 7
      Adafruit_GFX.h
  3. 1 1
      library.properties

+ 13 - 8
Adafruit_GFX.cpp

@@ -462,7 +462,7 @@ void Adafruit_GFX::fillTriangle(int16_t x0, int16_t y0,
 // Draw a PROGMEM-resident 1-bit image at the specified (x,y) position,
 // using the specified foreground color (unset bits are transparent).
 void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
-  const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {
+  PROGMEM const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color) {
 
     int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte
     uint8_t byte = 0;
@@ -482,7 +482,8 @@ void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
 // using the specified foreground (for set bits) and background (unset
 // bits) colors.
 void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
-  const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) {
+  PROGMEM const uint8_t bitmap[], int16_t w, int16_t h,
+  uint16_t color, uint16_t bg) {
 
     int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte
     uint8_t byte = 0;
@@ -539,9 +540,11 @@ void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
 
 // Draw PROGMEM-resident XBitMap Files (*.xbm), exported from GIMP,
 // Usage: Export from GIMP to *.xbm, rename *.xbm to *.c and open in editor.
-// C Array can be directly used with this function
+// C Array can be directly used with this function.
+// There is no RAM-resident version of this function; if generating bitmaps
+// in RAM, use the format defined by drawBitmap() and call that instead.
 void Adafruit_GFX::drawXBitmap(int16_t x, int16_t y,
-  const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {
+  PROGMEM const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color) {
 
     int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte
     uint8_t byte = 0;
@@ -563,7 +566,7 @@ void Adafruit_GFX::drawXBitmap(int16_t x, int16_t y,
 // pos.  Specifically for 8-bit display devices such as IS31FL3731;
 // no color reduction/expansion is performed.
 void Adafruit_GFX::drawGrayscaleBitmap(int16_t x, int16_t y,
-  const uint8_t *bitmap, int16_t w, int16_t h) {
+  PROGMEM const uint8_t bitmap[], int16_t w, int16_t h) {
     startWrite();
     for(int16_t j=0; j<h; j++, y++) {
         for(int16_t i=0; i<w; i++ ) {
@@ -593,7 +596,8 @@ void Adafruit_GFX::drawGrayscaleBitmap(int16_t x, int16_t y,
 // Specifically for 8-bit display devices such as IS31FL3731;
 // no color reduction/expansion is performed.
 void Adafruit_GFX::drawGrayscaleBitmap(int16_t x, int16_t y,
-  const uint8_t *bitmap, const uint8_t *mask, int16_t w, int16_t h) {
+  PROGMEM const uint8_t bitmap[], PROGMEM const uint8_t mask[],
+  int16_t w, int16_t h) {
     int16_t bw   = (w + 7) / 8; // Bitmask scanline pad = whole byte
     uint8_t byte = 0;
     startWrite();
@@ -634,7 +638,7 @@ void Adafruit_GFX::drawGrayscaleBitmap(int16_t x, int16_t y,
 // Draw a PROGMEM-resident 16-bit image (RGB 5/6/5) at the specified (x,y)
 // position.  For 16-bit display devices; no color reduction performed.
 void Adafruit_GFX::drawRGBBitmap(int16_t x, int16_t y,
-  const uint16_t *bitmap, int16_t w, int16_t h) {
+  PROGMEM const uint16_t bitmap[], int16_t w, int16_t h) {
     startWrite();
     for(int16_t j=0; j<h; j++, y++) {
         for(int16_t i=0; i<w; i++ ) {
@@ -662,7 +666,8 @@ void Adafruit_GFX::drawRGBBitmap(int16_t x, int16_t y,
 // BOTH buffers (color and mask) must be PROGMEM-resident.
 // For 16-bit display devices; no color reduction performed.
 void Adafruit_GFX::drawRGBBitmap(int16_t x, int16_t y,
-  const uint16_t *bitmap, const uint8_t *mask, int16_t w, int16_t h) {
+  PROGMEM const uint16_t bitmap[], PROGMEM const uint8_t mask[],
+  int16_t w, int16_t h) {
     int16_t bw   = (w + 7) / 8; // Bitmask scanline pad = whole byte
     uint8_t byte = 0;
     startWrite();

+ 9 - 7
Adafruit_GFX.h

@@ -64,30 +64,32 @@ class Adafruit_GFX : public Print {
       int16_t radius, uint16_t color),
     fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
       int16_t radius, uint16_t color),
-    drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap,
+    drawBitmap(int16_t x, int16_t y, PROGMEM const uint8_t bitmap[],
       int16_t w, int16_t h, uint16_t color),
-    drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap,
+    drawBitmap(int16_t x, int16_t y, PROGMEM const uint8_t bitmap[],
       int16_t w, int16_t h, uint16_t color, uint16_t bg),
     drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,
       int16_t w, int16_t h, uint16_t color),
     drawBitmap(int16_t x, int16_t y, uint8_t *bitmap,
       int16_t w, int16_t h, uint16_t color, uint16_t bg),
-    drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap,
+    drawXBitmap(int16_t x, int16_t y, PROGMEM const uint8_t bitmap[],
       int16_t w, int16_t h, uint16_t color),
-    drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t *bitmap,
+    drawGrayscaleBitmap(int16_t x, int16_t y, PROGMEM const uint8_t bitmap[],
       int16_t w, int16_t h),
     drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap,
       int16_t w, int16_t h),
     drawGrayscaleBitmap(int16_t x, int16_t y,
-      const uint8_t *bitmap, const uint8_t *mask, int16_t w, int16_t h),
+      PROGMEM const uint8_t bitmap[], PROGMEM const uint8_t mask[],
+      int16_t w, int16_t h),
     drawGrayscaleBitmap(int16_t x, int16_t y,
       uint8_t *bitmap, uint8_t *mask, int16_t w, int16_t h),
-    drawRGBBitmap(int16_t x, int16_t y, const uint16_t *bitmap,
+    drawRGBBitmap(int16_t x, int16_t y, PROGMEM const uint16_t bitmap[],
       int16_t w, int16_t h),
     drawRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap,
       int16_t w, int16_t h),
     drawRGBBitmap(int16_t x, int16_t y,
-      const uint16_t *bitmap, const uint8_t *mask, int16_t w, int16_t h),
+      PROGMEM const uint16_t bitmap[], PROGMEM const uint8_t mask[],
+      int16_t w, int16_t h),
     drawRGBBitmap(int16_t x, int16_t y,
       uint16_t *bitmap, uint8_t *mask, int16_t w, int16_t h),
     drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color,

+ 1 - 1
library.properties

@@ -1,5 +1,5 @@
 name=Adafruit GFX Library
-version=1.2.0
+version=1.2.1
 author=Adafruit
 maintainer=Adafruit <info@adafruit.com>
 sentence=Adafruit GFX graphics core library, this is the 'core' class that all our other graphics libraries derive from.