* GFXcanvas: Allow subclass to take charge of buffer allocations
In Adafruit_dvhstx, the low level driver takes charge of the framebuffer
allocations. Consequently, any allocation by the GFXcanvas class would be
an unused waste of memory.
Introduce a new constructor parameter `bool allocate_buffer=true`. The
default preserves the old behavior of allocating the buffer in the
constructor and freeing it in the destructor, while passing in `false`
skips buffer allocation & freeing.
In this case, the subclass must allocate the buffer before the first
drawing operation (such as in its constructor or begin method), and
free it in its own destructor or end method.
The subclass can also freely change the buffer pointer at runtime, for
instance in a swap method if the underlying framebuffer is double-buffered.
* experimentally run a different clang-format
This runs version 19.1.7: uvx clang-format -i *.cpp *.h
the changes look similar to what was shown during CI
* undo one edit that ci doesn't like
strncpy() does not place a null terminator when the max characters is reached of '9' in this case. So, any buttons with 9 or more in the source will wind up with a potentially non-null-terminated _label.
This is a quick fix to fix functions like:
```
GFXcanvas16 *canvas = new GFXcanvas16 (240, 320)
canvas -> fillTriangle(0, 0, 239, 0, 120, 310, ILI9341_BLUE)
```
Could all on down to drawFastRawHLine and the
computerd buffer_index > 32767 which is the largest that could be held in int16_t. So switched to uint32_t also converted the computed value to uint32_t as well as to remove compiler warning.
Removed another compiler warning as well.
This addresses the problem in
#325
* Change boolean to bool
This avoids compiler warnings such as:
In file included from /home/ed/git/dryer-arduino/ui/src/graphicstest.ino:18:
.pio/libdeps/nucleo_f446re/Adafruit GFX Library_ID13/Adafruit_GFX.h:48:39: warning: 'boolean' is deprecated [-Wdeprecated-declarations]
48 | virtual void invertDisplay(boolean i);
| ^
In file included from /home/ed/.platformio/packages/framework-arduinoststm32/cores/arduino/wiring.h:34,
from /home/ed/.platformio/packages/framework-arduinoststm32/cores/arduino/Arduino.h:32,
from /tmp/tmpvslwxjr7:1:
/home/ed/.platformio/packages/framework-arduinoststm32/cores/arduino/wiring_constants.h:110:14: note: declared here
* Fix clang format issues unrelated to this PR
Addresses the following from CI:
$ python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r .
--- ./Adafruit_GFX.h (original)
+++ ./Adafruit_GFX.h (reformatted)
@@ -240,8 +240,8 @@
uint8_t textsize_x; ///< Desired magnification in X-axis of text to print()
uint8_t textsize_y; ///< Desired magnification in Y-axis of text to print()
uint8_t rotation; ///< Display rotation (0 thru 3)
- bool wrap; ///< If set, 'wrap' text at right edge of display
- bool _cp437; ///< If set, use correct CP437 charset (default is off)
+ bool wrap; ///< If set, 'wrap' text at right edge of display
+ bool _cp437; ///< If set, use correct CP437 charset (default is off)
GFXfont *gfxFont; ///< Pointer to special font
};
--- ./Adafruit_GFX.cpp (original)
+++ ./Adafruit_GFX.cpp (reformatted)
@@ -1713,9 +1713,7 @@
@returns True if was pressed before, now is not.
*/
/**************************************************************************/
-bool Adafruit_GFX_Button::justReleased() {
- return (!currstate && laststate);
-}
+bool Adafruit_GFX_Button::justReleased() { return (!currstate && laststate); }
// -------------------------------------------------------------------------
Alsp added and example for GFXcanvas that demonstrates the impact of rotation
on pixel layout and also demonstrates getting a pixel based on raw
physical coordinates.
Function would previously draw certain line segments repeatedly; minor performance drain on most displays, but especially problematic for SSD1306's INVERT drawing mode.
Note: Consider harmonizing types since uints might spill if someone
invents a 64k wide or high oled.. Jk. Changing h and w might be nice
tho, but keeping changes at minimum here.