font: add anti-aliasing and other features (#6198)

* Pack glyph bits

* Use unsigned chars for unicode strings.

* Implement multi-bit glyphs

* clang-format

* Allow extra glyphs to be added to a font

* Allow .otf and .woff file extensions

* Add printf versions with background color;
Add tests

* Whitespace...

* Move font test to new framework

* CI fix

* CI fix

* CODEOWNERS

* File extensions tested as case-insensitive
This commit is contained in:
Clyde Stubbs
2024-03-11 20:03:39 +11:00
committed by GitHub
parent 11b31483c3
commit e4df422798
8 changed files with 282 additions and 113 deletions
+22 -4
View File
@@ -200,7 +200,7 @@ class BaseImage {
class BaseFont {
public:
virtual void print(int x, int y, Display *display, Color color, const char *text) = 0;
virtual void print(int x, int y, Display *display, Color color, const char *text, Color background) = 0;
virtual void measure(const char *str, int *width, int *x_offset, int *baseline, int *height) = 0;
};
@@ -327,8 +327,10 @@ class Display : public PollingComponent {
* @param color The color to draw the text with.
* @param align The alignment of the text.
* @param text The text to draw.
* @param background When using multi-bit (anti-aliased) fonts, blend this background color into pixels
*/
void print(int x, int y, BaseFont *font, Color color, TextAlign align, const char *text);
void print(int x, int y, BaseFont *font, Color color, TextAlign align, const char *text,
Color background = COLOR_OFF);
/** Print `text` with the top left at [x,y] with `font`.
*
@@ -337,8 +339,9 @@ class Display : public PollingComponent {
* @param font The font to draw the text with.
* @param color The color to draw the text with.
* @param text The text to draw.
* @param background When using multi-bit (anti-aliased) fonts, blend this background color into pixels
*/
void print(int x, int y, BaseFont *font, Color color, const char *text);
void print(int x, int y, BaseFont *font, Color color, const char *text, Color background = COLOR_OFF);
/** Print `text` with the anchor point at [x,y] with `font`.
*
@@ -359,6 +362,20 @@ class Display : public PollingComponent {
*/
void print(int x, int y, BaseFont *font, const char *text);
/** Evaluate the printf-format `format` and print the result with the anchor point at [x,y] with `font`.
*
* @param x The x coordinate of the text alignment anchor point.
* @param y The y coordinate of the text alignment anchor point.
* @param font The font to draw the text with.
* @param color The color to draw the text with.
* @param background The background color to use for anti-aliasing
* @param align The alignment of the text.
* @param format The format to use.
* @param ... The arguments to use for the text formatting.
*/
void printf(int x, int y, BaseFont *font, Color color, Color background, TextAlign align, const char *format, ...)
__attribute__((format(printf, 8, 9)));
/** Evaluate the printf-format `format` and print the result with the anchor point at [x,y] with `font`.
*
* @param x The x coordinate of the text alignment anchor point.
@@ -610,7 +627,8 @@ class Display : public PollingComponent {
protected:
bool clamp_x_(int x, int w, int &min_x, int &max_x);
bool clamp_y_(int y, int h, int &min_y, int &max_y);
void vprintf_(int x, int y, BaseFont *font, Color color, TextAlign align, const char *format, va_list arg);
void vprintf_(int x, int y, BaseFont *font, Color color, Color background, TextAlign align, const char *format,
va_list arg);
void do_update_();
void clear_clipping_();